数据包和套接字有什么区别?

What is the difference between a packet and a socket?

我刚刚阅读 "What is the difference between a port and a socket?" 并且似乎套接字是用来创建连接的东西。然后一个数据包怎么样?连接之间有什么东西在发送吗?所以进度是 "ip -> port -> socket -> sending packet" ?

套接字是您用来发送数据包的抽象概念。

套接字绑定到您的系统以允许两个进程之间的通信。

数据包是通过套接字发送的信息片段。

数据包是一大块数据。 所有 IP 网络都以小块的形式通过网络发送数据。 套接字(相对于 TCP/IP)是建立在其之上的抽象,它提供可靠的数据流。

使用套接字时,无需处理发送单个数据包的问题,​​您只需发送无限的数据流。
套接字实现处理将其拆分为数据包并通过网络发送,并处理重新发送在途中丢失的数据包。

一个socket是IP地址和端口号的组合。

一个数据包是一个三层协议数据单元,或者说是与网络层相关联的一段数据。

就您提到的 "progress" 而言,OSI 模型是描述流程的有用工具。

每个 OSI 模型层都有一个关联的数据单元。从上面可以看出,数据包是与网络层相关联的一段数据。您描述的网络层使用 IP 地址进行通信。

第 4 层或传输层使用端口号进行通信。套接字是端口号和IP地址的组合。

来自 发送者 视角的流沿着 OSI 模型向下延伸。应用程序数据被 Transport headers(源和目标端口号)包围,然后是 Network headers(源和目标 IP 地址),然后是 data-link headers(通常是 MAC 以太网 LAN 上的地址),最后编码为线路上的位。

收件人的角度来看,流程正好相反,向上攀登。在线接收位,然后数据缓慢 "unpacked",删除 headers。如果目标 MAC 与接收者匹配,则剥离那些 headers,如果 IP 匹配,则剥离那些 headers,如果找到开放端口,则移除那些 headers ,最终导致此处未显示的更高层中的解压缩应用程序级数据。

希望这有助于澄清。