究竟什么时候创建网络数据包?
When exactly are network packets created?
在从客户端到主机(或反之亦然)的消息传输中,消息实际上是在哪个点被分割成数据包?
据我目前的理解,应用程序将整个文件放入套接字并将其完全交给TCP。 TCP 首先缓冲 file/message,然后在合适的时候(什么时候合适?)切割缓冲区数据块(创建数据包)并添加 TCP headers 以将块转换为段。
如果应用层根本没有数据包,为什么还要讨论应用层的数据包?只是整个文件...这不正确。
谁能证实我的理解?
数据在传输层(UDP、TCP)被分割成段进行封装。这些段被网络层(IPv4、IPv6等)封装成packets。数据包由 frames 在 data-link 层(以太网等)封装。
TCP-based 应用程序有 消息 需要发送。消息是什么取决于应用程序——它可能只是一个小请求,也可能是整个文件。它将消息传递给传输层 (TCP),后者将消息分成 段 并将它们一个接一个地传递给网络层(Internet 协议)。网络层为每个数据包添加一个header,并将其传递给link层(以太网),该层处理帧。
所以,原则上,我们有:
- 消息在应用层;
- 段在传输层;
- 数据包在网络层;和
- 帧在link层。
然而在实践中,人们并没有那么迂腐,而且容易混淆概念。你会经常听到人们谈论 TCP 数据包(正确的术语应该是带有 TCP 负载的 IP 数据包),他们甚至会谈论发送数据包的应用程序(正确的表述是应用程序将消息传递到传输层)。大多数时候,不准确的术语不是问题,因为上下文可以消除歧义。
在从客户端到主机(或反之亦然)的消息传输中,消息实际上是在哪个点被分割成数据包?
据我目前的理解,应用程序将整个文件放入套接字并将其完全交给TCP。 TCP 首先缓冲 file/message,然后在合适的时候(什么时候合适?)切割缓冲区数据块(创建数据包)并添加 TCP headers 以将块转换为段。
如果应用层根本没有数据包,为什么还要讨论应用层的数据包?只是整个文件...这不正确。
谁能证实我的理解?
数据在传输层(UDP、TCP)被分割成段进行封装。这些段被网络层(IPv4、IPv6等)封装成packets。数据包由 frames 在 data-link 层(以太网等)封装。
TCP-based 应用程序有 消息 需要发送。消息是什么取决于应用程序——它可能只是一个小请求,也可能是整个文件。它将消息传递给传输层 (TCP),后者将消息分成 段 并将它们一个接一个地传递给网络层(Internet 协议)。网络层为每个数据包添加一个header,并将其传递给link层(以太网),该层处理帧。
所以,原则上,我们有:
- 消息在应用层;
- 段在传输层;
- 数据包在网络层;和
- 帧在link层。
然而在实践中,人们并没有那么迂腐,而且容易混淆概念。你会经常听到人们谈论 TCP 数据包(正确的术语应该是带有 TCP 负载的 IP 数据包),他们甚至会谈论发送数据包的应用程序(正确的表述是应用程序将消息传递到传输层)。大多数时候,不准确的术语不是问题,因为上下文可以消除歧义。