我知道socket在网络程序中被广泛使用,我可以用它写代码。但我无法理解一些事情:
1. 为什么我们需要套接字?
如果是通过网络层来区分应用层程序,为什么不使用应用名称或其他唯一属性呢?
插座是标准吗?
套接字只是linux或其他操作系统中的一个结构吗?
2.socket是如何工作的?
socket有很多函数,比如bind、accept、listen、send。比如send()通过TCP发送msg到dest,它是如何发送msg到网络层的?它是否将 msg 发送到 tcp 缓冲区?网络层进程如何读取 tcp 缓冲区数据以及如何将数据发送到下层进程?
如果我使用send(int sockfd, const void *buf, size_t len, int flags)
函数,第一个 arg 'sockfd' 是一个未定义的套接字,比如一个随机的 int,会导致什么结果,为什么?os进程是什么?