Tcp协议是以什么依据进行数据包分片的?
在IP层,对应以太网的IP数据包的mtu为1500字节。如果所要发送的IP数据包大于1500字节,则IP层会对数据包进行分片。而IP层的包大小来自Tcp运输层。Tcp运输层的数据则是由应用程序提供的。
问题1:Tcp协议是根据什么将应用程序要发送的数据包进行大小拆分而交给IP层的呢?和应用程序send的频率以及send的数据包大小有关系吗?
问题2:应用程序send频率以及send包大小的不同,会造成Tcp协议对数据包分片的不同,从而产生碎片包的发送,影响到网络性能吗(如网络资源占用率)?
望各位执教!!!
问题点数:30、回复次数:23Top
1 楼netsys2(来电!)回复于 2006-06-26 15:39:04 得分 0
会造成一些影响,用压力测试就知道了。
Top
2 楼sfwm414()回复于 2006-10-18 13:50:54 得分 0
关注中Top
3 楼ensoniq()回复于 2006-10-18 17:02:47 得分 0
如果不是极端追求响应速度的话把Nagle算法打开吧,就不用考虑这个问题了。从单个包的投递准确率来说,小包好一些,但是考虑总的流量的话应该是大包胜出。Top
4 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2006-10-23 13:08:41 得分 0
TCP层不用管MTU,是一个流式的,只要缓冲区可用,往缓冲区里丢数据就行了,丢多少随你,发送的包的大小以及分片问题由协议栈处理Top
5 楼cai3995(什么都不懂)回复于 2006-10-25 15:41:59 得分 0
please understand the TCP window related knowledgeTop
6 楼benjiam(今晚打老虎)回复于 2006-10-27 16:38:07 得分 0
问题1:Tcp协议是根据什么将应用程序要发送的数据包进行大小拆分而交给IP层的呢?和应用程序send的频率以及send的数据包大小有关系吗?
第一是 window 窗口大小 第二是 中断。按照steven 的说法 好像是50ms一次中断。(nagle相关 )该还和低潮指针有关系。
问题2:应用程序send频率以及send包大小的不同,会造成Tcp协议对数据包分片的不同,从而产生碎片包的发送,影响到网络性能吗(如网络资源占用率)?
和上面一样
Top
7 楼yexingren(编你的程)回复于 2006-10-29 19:30:54 得分 0
tcp是怎么对数据包进行拆分的?双方建立tcp连接时会协商tcp window ,一种说法是默认情况下tcp窗口为×××(具体多少我记不准了500 多),但我测试发现即时不指定窗口大小,发现双方协商的结果为1460(+tcp头20字节+ ip头20字节=mtu 1500)
数据包大小和发送频率对tcp协议对数据包的分片是有影响的:这些因素会导致发送缓冲区,如果tcp协议栈取数据时,数据较少自然数据包就小。楼上说tcp中断50ms一次,不知道是否确定?
那样的话,tcp数据包率为20个每秒,肯定不止这个数。
Top
8 楼leon7909(專注网絡編程)回复于 2006-11-02 16:48:04 得分 0
據俺所知:
tcp是根據路徑最大mtu值在進行分片,對於tcp來說,他不願看到tcp包被ip層分片的情況出現,這樣會影響效率,因為比如一個tcp包被ip層分成三片,接收方如果收到兩片掉了一片,那麼收到的兩片也得要丟掉.這是ip層的做法,但是tcp顯然是受不了這樣的情況的,所以tcp本身就根據mtu進行了分片,這樣就算丟,重傳的消費也不大.
再引用書上的話:
T C P试图避免分片,但对于应用程序来说几乎不可能强迫T C P发送一个需要进行分片的长报文段Top
9 楼benjiam(今晚打老虎)回复于 2006-11-02 20:18:44 得分 0
协商是mms 大小。
楼上说tcp中断50ms一次。 是指开了nagle时候。会有这个情况 详情见圣经。 我记得不是很清楚了。 但是 按照unix 的中断来判断是肯定没错的。Top
10 楼wqf363(denny)回复于 2006-11-04 11:42:18 得分 0
MTU: Maxitum Transmission Unit 最大传输单元 (以太网1500B)
MSS: Maxitum Segment Size 最大分段 (以太网1500-40=1460B)
Top
11 楼coppermine(coppermine)回复于 2006-11-04 21:35:27 得分 0
TCP是基于“流”的协议,也就是说从TCP的角度,没有“分片”的概念。
TCP看到的是以BYTE为单位的字节流。
IP协议可能对IP包进行分片--当IP向数据链路层传递数据时,如果IP包大于数据链路层的MTS,IP将对原IP包进行分片。这个过程对于TCP是透明的。Top
12 楼leon7909(專注网絡編程)回复于 2006-11-07 10:04:44 得分 0
樓上的,試過嗎?試試用分析工具分析一下tcp send一個50kb的包到另一端的情況,看看是不是除了第一個包其餘的每個分片只有ip包頭?肯定不是的,如果你發現每個包除了有ip包頭還有tcp包頭的時候,你是不是會改變你的想法?Top
13 楼lyck(猪头猪脑猪尾巴)回复于 2006-11-14 17:08:21 得分 0
楼上的兄弟,
别的啥也不说了,,
我感觉你的思路很禁锢,
也不首先好好想想是否你的这种测试方法是否正确?
如果用一种错误的测试方法来验证一个问题的正确性,你觉得这个结果会可信吗?Top
14 楼lyck(猪头猪脑猪尾巴)回复于 2006-11-14 17:17:31 得分 0
需要提出一点:
我认为大家在对这个问题进行讨论的时候首先要知道MTU到底是什么。
并且,大家也需要好好思考一下,网络栈的工作机理,以及科学的系统结构的设计原理的角度都能说明这个问题,都能很好地把这个问题进行定位,为何总是有人在天马行空的搞些毫不相关的猜测呢?
不要贸然的去猜测,需要用系统的思考去分析这个问题。
有时候贸然的猜测,或者立足于本身就是错误的基础上所进行的推理都是一种浮躁。
比如说leon7909(leon) 兄台,就犯了这样的错误。
Top
15 楼lyck(猪头猪脑猪尾巴)回复于 2006-11-14 17:21:07 得分 0
楼上的几位兄弟都犯了各种各样的错误
这些错误的共同点就是,你们总是在捧着系统设计、系统思考等等教科书的同时,做着与这些思想完全相背离的思考。
是不是全都是因为中国的应试教育造成的。
害人。。。。。。。。。。
真害人。。。。。。。。。。Top
16 楼leon7909(專注网絡編程)回复于 2006-11-15 11:08:24 得分 0
樓上兄台興沖沖回三個貼也沒說說你的高見,如果我們的認知上有偏差,你可以把你知道的狀況講出來嘛,一堆教育/科學/系統架構....說半天也沒說個實際的東西出來
我說了我看到的結果,如果大俠你知道得更透徹的話更應該把你的知識共享出來啊.真的是在虛心的請教,在這個問題上我也有一些疑問,我用的工具是Iris,在局域網上抓包時發現tcp頭部的seq number和ACK seq number從來沒變過,不知是哪個地方出了問題.還望大俠指點啊.Top
17 楼lyck(猪头猪脑猪尾巴)回复于 2006-11-15 12:43:36 得分 0
如果我说了上面那些话还是不能拨开些迷雾的话,
有些人仍旧是倾向于不去独立思考而直接要答案,我觉得真得很悲哀。
如果真的能按照我所说的那些话,从这个角度去思考,一定会有一个明确的答案的。
Top
18 楼Nowish(看我能忍耐多久)回复于 2006-11-17 09:59:03 得分 0
mark~Top
19 楼hyg2008(蓝色雨)回复于 2006-11-21 19:05:03 得分 0
居然有人把TCP窗口大小当成是数据长度,基本知识都搞错了。Top
20 楼shinesi(DaBaiCai)回复于 2006-12-05 13:57:29 得分 0
我认为应该是根据MSS来分包的大小。TCP Window只是起速度控制作用。
IP分片只会出现在UDP包的情况。Top
21 楼shinesi(DaBaiCai)回复于 2006-12-05 14:19:08 得分 0
TCP数据划分成IP包后,如果发送的过程经过的路由路MTU小于IP包的长度,
会返回一个需要分片的ICMP差错报文,这时候IP包会出现分片或重划分IP包大小
(这里是重划分包还是分片我也不太清楚)。
Top
22 楼benjiam(今晚打老虎)回复于 2006-12-18 14:52:47 得分 0
在這個問題上我也有一些疑問,我用的工具是Iris,在局域網上抓包時發現tcp頭部的seq number和ACK seq number從來沒變過,不知是哪個地方出了問題.還望大俠指點啊.
iris 的4.xx 版本 有时候 有这样的bug. seq 和ack 变化了,但是显示的值没有变化。
仔细算一下就知道了。
IP分片只会出现在UDP包的情况。
ip 包分片和什么协议没有关系。
Top
23 楼benjiam(今晚打老虎)回复于 2006-12-18 14:54:27 得分 0
TCP窗口大小 控制分片 我的意思是指当窗口大小小于 mms 的时候。Top




