CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  网络通信

Tcp协议是以什么依据进行数据包分片的?

楼主bnflower()2006-06-23 15:46:03 在 专题开发/技术/项目 / 网络通信 提问

在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

相关问题

关键词

得分解答快速导航

  • 帖主:bnflower

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo