TCP报文什么时候会在应用层分片?当应用程序发送 TCP 数据包时,应用程序层的接收者是否会收到两个或多个数据包中的数据包?如果是这样,什么条件会导致数据包被分割。似乎数据包在达到以太网(在网络层)1500 字节的限制之前不会被分段。但是,该分段对于应用程序层的接收者来说是透明的,因为网络层将在将数据包发送到下一层之前重新组装分段,对吗?
当它到达 MTU 低于数据包大小的网络设备时,它将被分割。大多数以太网设备都是 1500,但通常可以更小,例如 1492(如果以太网通过 PPPoE (DSL) 传输,因为需要额外的路由信息),如果添加第二层(如 Windows Internet 连接共享),则甚至更低。而拨号一般是576!
一般来说,你应该记住这一点TCP不是数据包协议。它使用最低级别的数据包通过 IP 进行传输,但就任何 TCP 堆栈的接口而言,它是一种流协议,不需要为您提供与发送或接收的物理数据包 1:1 的关系(例如,大多数堆栈将保留消息,直到某一段时间到期,或者有足够的消息来最大化给定 MTU 的 IP 数据包的大小)
例如,如果您发送了两个“数据包”(调用发送函数两次),则接收程序可能只会收到 1 个“数据包”(接收 TCP 堆栈可能会将它们组合在一起)。如果您正在通过 TCP 实现消息类型协议,则应在每个消息的开头包含一个标头(或其他一些标头/页脚机制),以便接收方可以将 TCP 流拆分回单独的消息,无论是当消息分两部分接收,或者当多个消息作为一个块接收时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)