关于黑洞路由器的学习总结
上一篇 /
下一篇 2013-01-30 22:51:28
/ 置顶(1)
/ 个人分类:测试学习总结
第一次听到这个名字是在上周小组的知识交流会上,当时听到黑洞路由器,都不知道是什么东东,好像挺高级的东西一样。在会上大概了解了一下,知道是怎么回事,会后去百度了一下,加深了对此的认识,说了那么多废话,还没说黑洞路由器到底是何方神圣。好吧,下面介绍一下。
要知道什么是黑洞路由器,首先还要了解一下两个新的名词,MTU和MSS,这两个又是什么呢?学过网络的应该都知道,MTU就是Maxitum
Transmission Unit(最大传输单元)的缩写,MSS是Maxitum Segment Size(最大分段大小)的缩写。
以太网EthernetII最大的数据帧是1518Bytes,其中以太帧(DMAC(6Bytes)+SMAC(6Bytes)+Type(2Bytes))14Bytes和帧尾CRC校验部分的4Bytes,剩下承载上层协议的地方就只有1500Bytes了,这个值就称之为MTU。
MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,算法是MTU的值减去IP数据包的包头(20Bytes)和TCP的包头(20Bytes),按照MTU为1500,那么MSS就为1460了(有时候还必须减去链路层开销和加密报文头)。双方协商的结果是以最小的那个MSS值确定为本次连接的最大MSS值。
当路由器必须将IP包分段但又因DF标记设置为1而不能分段时,直接丢弃该包的路由器称之为黑洞路由器。
那么黑洞路由器会给我们带来哪些问题呢?比如它会给TCP连接带来问题。设定DF标志位为1,在TCP三次握手期间交换的TCP数据段不会太大,所以该包不用进行拆分,所以不会被丢弃。但是,一旦开始在连接上传输数据,假定基于协商的MSS确定的PMTU比实际的PMTU大,TCP数据段大于实际PMTU的IP包就会被丢弃,而且不会给源端返回消息回执,导致传输失败。
知识联系实际,回到测试上,我们怎么去判断是否链路上存在黑洞路由器呢?首先从上面的分析可以看出来,黑洞路由器影响到传输的条件是当DF设置为1,且实际总数据长度大于MTU时才会出现这种情况。那么可以检查我们发送的包是否满足了这两个条件,如果满足了,那么可以进一步排查,发送小包时,是否也会存在这种情况,如果不存在该情况,那么初步可以判断是链路上存在黑洞路由器了,此时可以通过更改路由接口MTU和调整MSS来解决问题。具体的报文MTU、TCP 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: