wamp在网站建设中的功能及协作关系,网络营销运营策划,装潢设计与工艺教育专业,长沙本地公众号本文简述下TCP分段和IP分片的区别与联系。
我们知道#xff0c;用户空间的数据拷贝到内核空间的TCP发送缓冲区#xff08;这个是一个结构体#xff0c;叫sk_buffer#xff0c;简称skb#xff09;后就由内核网络协议栈做后续的封装和发送处理了#xff0c;用户无需考虑下…本文简述下TCP分段和IP分片的区别与联系。
我们知道用户空间的数据拷贝到内核空间的TCP发送缓冲区这个是一个结构体叫sk_buffer简称skb后就由内核网络协议栈做后续的封装和发送处理了用户无需考虑下层的网络问题。 按理来说MAC帧中搭载的数据部分越长则一次可发送的数据越多即数据发送效率就越大。但是由于数据链路的负载能力不是没有上限的而且为了更方便差错控制每一种数据链路层协议都规定了数据帧的数据部分上线即最大传送单元MTUMAC协议的MTU是1500字节。 这个1500字节不包括以太网的帧头、帧尾而是包括IP头、TCP头和数据部分。 因此IP层如果封装后的报文大于1500字节那就违反了MAC协议因此无法被封装成MAC帧IP层此时必须将数据进行分片。
而这1500字节里还有固定的IP报头20字节TCP报头的20~60字节一般是20字节因此从TCP发送缓冲区到封装成TCP报文TCP层也需要对数据进行分段使其起码要小于1460.当然具体来说是小于MTU - IP头长度 - TCP头度这个长度成为最大报文长度MSS英文全称Maximum Segment Size。
这个过程如下图
问题一为什么IP对数据分片了还要TCP分段
既然IP层会迫于MTU的限制而对数据报进行分片使其符合MAC协议并能够正常在以太网中传输。IP层使得数据报满足了MTU那里面负载的数据肯定小于MSS呀为什么还需要TCP分段呢 因为对于一份很大的数据如果只是IP分片那么某个数据片丢失后TCP的重传机制是对这整个数据进行重传IP是它的下层协议它不知道IP对这个数据分了多少片自然也不知道是哪个片丢失了。 而TCP也分段之后该段数据丢失了那么TCP只需要重传这一段就可以了。
问题二TCP有分段IP还要分片吗
既然TCP的分段使得数据满足了MSS的要求肯定也就满足了MTU的要求吧为什么IP层还是需要对数据分片。
IP分段取决于MTU大小这个是和网络负载能力有关的。实际上不同链路负载能力不同不是所有链路大小都是1500字节。比如IP数据报在到达某路由器时接下来要走的链路的MTU更小那么路由器会在IP层对其继续分片使其满足后面的链路的MTU要求。