异网络厂商对接BGP,MTU惹的祸

大部分异厂商,BGP故障,查看BGP报文交互,经常看到UPdate报文0更新,都是MTU惹的祸

        MTU 以太网MTU1500 ,IP数据包16位最大为65535,传输当然需要分片
        网络是比较复杂的,每个网络的MTU值是不同的。我们假设,如果接受/发送端都是以太网1500,我们假设发送的时候,数据包会以1500来封装,然而,不幸的是,传输中有一段X.25网,它的MTU是576,这会发生什么呢?这个数据包会被再次分片,如果IP包被设置了“不允许分片标志”,那数据包将被丢弃,然后收到一份ICMP不可达差错,告诉你,需要分片!
           测试方法
这个网络中最小的MTU值,被称为路径MTU,我们应该有一种有效的手段,来发现这个值,最笨的方法或许是用traceroute查看所有节点,然后一个节点一个节点ping 大字段1500  即根据所有传输列出的节点ping  *.*.*.*  size 1500  以下回到BGP

BGP协议是传输层TCP协议,TCP协议有一个最大报文段长度MSS,最大值的限制,BGP建立连接双方都要告知各自的MSS,也就是说,它说是与TCP的SYN标志在一起的。当然,对于传输来讲,总是希望MSS越大越好,但是MSS最气吗有个限制,以太网就是  MTU-IP头-TCP头=1500-20-20,也就是为什么bgp最常见的MSS为1460了,为了避免分片,IP层本身没有超时重传机制------由更高层(比如TCP)来负责超时和重传。当来自TCP报文段的某一片丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(而不是一个分片),没有办法只重传数据报中的一个数据分片。即:即使只丢失一片数据也要重新传整个数据报!---------
bgp 的tcp 重传,一旦UPdate报文数据过大,超过了MSS,则在传输层会对TCP包进行分段,例如刚才1460,TCP是如何实现分段的呢?
因为每个TCP数据报在组成前其大小就已经被MSS限制了,所以TCP数据报的长度是不可能大于MSS的,当然由它形成的IP包的长度也就不会大于MTU,自然也就不用IP分片了。大部分邻居建立不起来都是MTU惹的祸!说道MTU每个厂商都不一样,但是以太网1500比较正常的,听说最奇葩的就是MX960,MTU分三种:一种IP层面MTU,一种链路层面MTU,一种端口MTU,具体怎么想各位客官,自己协商,因为MTU的故障不仅仅是BGP,更关键的是TCP 层面影响上层的故障和相关 HTTP层面故障

 

你可能感兴趣的:(异网络厂商对接BGP,MTU惹的祸)