TCP和UDP的MTU路径发现

TCP和UDP的MTU路径发现

ID:42029647

大小:203.59 KB

页数:9页

时间:2019-09-05

TCP和UDP的MTU路径发现_第1页
TCP和UDP的MTU路径发现_第2页
TCP和UDP的MTU路径发现_第3页
TCP和UDP的MTU路径发现_第4页
TCP和UDP的MTU路径发现_第5页
资源描述:

《TCP和UDP的MTU路径发现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、小宝系列教程之TCP和UDP的MTU路径发现TCP和UDP的MTU路径发现路径MTU的概念:这是当前在两个主机之间的路径上任何网络设备上的最小MTU。路径MTU发现在IP首部中继承并设置“不要分片(DF)”比特,来发现当前路径上的路由器是否需要对正在发送的IP数据报进行分片。物理网络层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。把一

2、份IP数据报分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,它们要求在下一站就进行进行重新组装,而不是在最终的目的地)。重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层(TCP和UDP)是透明的,除了某些可能的越级操作外。已经分片过的数据报有可能会再次进行分片(可能不止一次)。IP首部中包含的数据为分片和重新组装提供了足够的信息。尽管IP分片过程看起来是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报。为什么会发生这种情况呢?因为IP层本身没有超时重传的机制——由更高层来负责超时

3、和重传(TCP有超时和重传机制,但UDP没有。一些UDP应用程序本身也执行超时和重传)。当来自TCP报文段的某一片丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报。没有办法只重传数据报中的一个数据报片。事实上,如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的。就这个原因,经常要避免分片。ICMP不可达差错信息(需要分片)type=3,code=4:先了解一下路径发现要用到ICMP中的错误信息(type=3,code=4)ICMP域:类型:3代码:0=网络不可达;1=主机不可

4、达;2=协议不可用;3=端口不可达;-1-小宝系列教程之TCP和UDP的MTU路径发现4=需要分段和DF设置;5=源路由失败;发生ICMP不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特。上图是ICMP不可达信息的包头格式如果路由器没有提供这种新的ICMP差错报文格式,那么下一站的MTU就设为0。新版的路由器需求RFC[Almquist1993]声明,在发生这种ICMP不可达差错时,路由器必须生成这种新格式的报文,现在的路由器一般都支持新报文,也就是说返回的时候能返回下一跳网络接口的MTU

5、。TCP的路径MTU发现:TCP的路径MTU发现按如下方式进行:和对端tcp建立连接的程序时候,双方要在第一个syn中通报自己接口的mtu,(在ip包tcp部分的optional中)然后采用双方中最小的那个mtu传输数据,如果一方没有通报mtu,协商不成功的时候,就用默认的mtu576来传输数据。一旦选定了起始的报文段大小,在该连接上的所有被TCP发送的IP数据报都将被设置DF比特。如果某个中间路由器的接口不能发送1500的ip包的时候则需要对一个设置了DF标志的数据报进行分片,它就丢弃这个数据报,并产生一个ICMP的“不能分片”差错。如果发送

6、端收到这个ICMP差错,TCP就减少段大小并进行重传:如果路由器产生的是一个较新的该类ICMP差错,则报文段大小被设置为下一跳的MTU减去IP和TCP的首部长度。如果是一个较旧的该类ICMP差错,则必须尝试下一个可能的最小MTU。由于路由可以动态变化,因此在最后一次减少路径MTU的一段时间以后,可以尝试使用一个较大的值(直到等于对端声明的MSS或用新版icmp输出接口MTU的最小值)。RFC1191推荐这个时间间隔为10分钟我们来看一个例子,这是摘自TCP/IP详解中的一个例子,是用tcpdump抓的包,可能看的时候有点难度,不过没关系,我详细

7、解释一下。-2-小宝系列教程之TCP和UDP的MTU路径发现我们从最右边的主机solaris(支持路径MTU发现机制)到最左边的主机slip建立一个连接并发送512字节的数据包。在这里我们已经把slip接口的MTU设置为552,而不是通常的296。这使得slip通告一个512的MSS。但是在bsdi上的SLIP链路上的MTU为296,这就引起超过256的TCP报文段被分片。于是就可以观察在solaris上的路径MTU发现是如何进行处理的。我们在主机sun上用tcpdump抓包看看:我们先注意第1和第2行的MSS值。第一个是solaris在syn

8、包中包含了自己的mss值是1460第二个是slip回应的ack包中发送了自己的mss是512接着第三个是solaris发送一个包含512字节的数据和对

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。