关于黑洞路由器的学习总结

上一篇 / 下一篇  2013-01-30 22:51:28 / 置顶(1) / 个人分类:测试学习总结

第一次听到这个名字是在上周小组的知识交流会上,当时听到黑洞路由器,都不知道是什么东东,好像挺高级的东西一样。在会上大概了解了一下,知道是怎么回事,会后去百度了一下,加深了对此的认识,说了那么多废话,还没说黑洞路由器到底是何方神圣。好吧,下面介绍一下。

要知道什么是黑洞路由器,首先还要了解一下两个新的名词,MTUMSS,这两个又是什么呢?学过网络的应该都知道,MTU就是Maxitum Transmission Unit(最大传输单元)的缩写,MSSMaxitum Segment Size(最大分段大小)的缩写。

以太网EthernetII最大的数据帧是1518Bytes,其中以太帧(DMAC6Bytes+SMAC6Bytes+Type2Bytes))14Bytes和帧尾CRC校验部分的4Bytes,剩下承载上层协议的地方就只有1500Bytes了,这个值就称之为MTU

MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,算法是MTU的值减去IP数据包的包头(20Bytes)和TCP的包头(20Bytes),按照MTU1500,那么MSS就为1460了(有时候还必须减去链路层开销和加密报文头)。双方协商的结果是以最小的那个MSS值确定为本次连接的最大MSS值。

当路由器必须将IP包分段但又因DF标记设置为1而不能分段时,直接丢弃该包的路由器称之为黑洞路由器。

那么黑洞路由器会给我们带来哪些问题呢?比如它会给TCP连接带来问题。设定DF标志位为1,在TCP三次握手期间交换的TCP数据段不会太大,所以该包不用进行拆分,所以不会被丢弃。但是,一旦开始在连接上传输数据,假定基于协商的MSS确定的PMTU比实际的PMTU大,TCP数据段大于实际PMTUIP包就会被丢弃,而且不会给源端返回消息回执,导致传输失败。

知识联系实际,回到测试上,我们怎么去判断是否链路上存在黑洞路由器呢?首先从上面的分析可以看出来,黑洞路由器影响到传输的条件是当DF设置为1,且实际总数据长度大于MTU时才会出现这种情况。那么可以检查我们发送的包是否满足了这两个条件,如果满足了,那么可以进一步排查,发送小包时,是否也会存在这种情况,如果不存在该情况,那么初步可以判断是链路上存在黑洞路由器了,此时可以通过更改路由接口MTU和调整MSS来解决问题。具体的报文MTUTCP MSS大小要根据具体应用、按经验值进行尝试,选择最佳值,其中MTU可以通过ping命令(如ping destination –f –l 1472)设置不分片来进行测试,TCP MSS值的选择则可以通过MTU减去相应其他加密、链路层开销、IP头、TCP头等字节计算。

对于专用Intranet中的黑洞路由器问题的处理方法,可以采用将所有路由器配置成为支持路由器端RFC 1191,并支持发送ICMP Destination Unreachable-Fragmentation Needed and DF Set消息(其中带有转发失败的链路的IP MTU)。这个跟将路由器配置为支持主机端RFC 1191是有区别的,后者会对自己的TCP连接使用PMTU(实际MTU)发送。通过路由器返回的IP MTU来重新调整发送的MTU值,从而解决问题。如果是Internet上的通信,我们不可能去配置网络上所有路由器支持RFC 1191,那么我们可以从自己方出发,通过上面介绍的通过PING命令来确定最佳IP MTU并通过修改MTU注册表来实现。

以上就是对于黑洞路由器的一些总结,希望对后面的工作有所帮助,并且能够加深对网络通信协议的理解

 


TAG:

引用 删除 wxl0556   /   2016-02-17 11:23:03
5
 

评分:0

我来说两句

Open Toolbar