粉丝服务

如何学好计算机网络?

昨天晚上群里有位同学提了工作中遇到的问题,如下所示:
 

遇到这样一个问题。就是协商的mss 是1460。但服务只收到1461- 1645之间的数据。  运维反馈是调低了mtu值后,问题未重现。
 
如果坚持阅读公众号写过关于TCP、IP分片的文章,仔细看这副图片就能还原问题的现场。
 
Alice有1645字节需要传输给Bob,由于使用了MSS=1460,所以1645字节被分成两个包裹1、2:
 
  • 包裹1,对应图片中的第4行(1514),对应字节数1-1460字节,Pia! 包裹扔出去了。
  • 包裹2,对应图片中的第5行(238),对应字节数1461-1645字节,Pia! 包裹又扔出去了。
 
通过第6行可以看出,ACK=1,说明两件事:
 
  • 包裹1没有到达Bob,否则ACK = 1461。
  • 包裹2已经安全抵达Bob,否则不会弹射出第6行这个ACK报文。
 
为何包裹2可以到达并获得ACK,而包裹1没有呢?
 
因为包裹1的尺寸(1460)> 包裹2 的尺寸(184)。
 
很显然,是由于包裹1的尺寸 + 20字节IP头+ 20字节TCP头 = 1500 >互联网上某条链路的MTU! 大概率 IP报文头的DF= 1,所以被互联网该网络设备丢弃了。
 
接下来Alice一直在尝试重传6次,到达重传上限值,发送Reset将TCP连接重置。当然抵达Bob的第二个包裹最后也没有什么用,一旦Bob接收到Reset指令,立马释放包裹2。
 
当然互联网不光有三层的路由器设备,还有二层的交换机设备。如果交换机设备的MTU <1500,且包裹1会途径该交换机,无论DF= 0还是DF=1,�
�裹1都会被丢弃
。
 
群里还有一个BGP问题,是这样的:
中国电信AS号假设 = 10,中国联通AS号假设=20,问:中国电信BGP路由器将BGP路由,发给中国联通,中国联通会将中国电信的路由,再发给中国电信吗?是否启用水平分割原则?
 
当然不会发,当然也会启用水平分割原则,且水平分割原则比普通的路由协议还要严格。
 
  • 中国电信发给中国联通的BGP路由,都会携带一个AS-Path =10的属性值。同时中国电信还会将凡是携带as-path =20过滤掉(Filter Out)。换句话说,凡是携带联通AS= 20的路由,都不会发给中国联通,这是第一道保险(Out-Bound Filter)。

  • 联通又不傻,对于电信发给自己的路由启用入向过滤(In-Bound Filter)。凡是路由携带AS-Path = 20(联通自己的AS号)的统统扔掉,这是第二道保险。
 
有了以上两道保险,可以有效防止路由的环路。
 
  • 联通将BGP路由表发给电信时,和电信一样的操作,凡是携带中国电信AS号的(10),全部过滤掉,不能发给电信。

  • 电信接收联通BGP路由时,首先过滤掉携带自己AS号(10)的路由表,丢弃处理。接收其它所有路由表。
 
即使联通将电信BGP路由(AS-PATH =10)发给中国移动(AS= 30)。那么中国移动向中国电信分享BGP表时,一样会将携带电信AS号(AS-PATH =10)的路由过滤掉。
 
电信入向过滤掉AS-Path =10 的所有路由,这就是BGP大名鼎鼎的双保险组合。即使其中一个节点出现问题,也有另外一个保险防止路由的环路。
 
至于如何学好计算机网络,首先要坚持阅读文章。多思考,带着问题去学习。深度学习要阅读RFC文档、协议白皮书。另外,计算机网络是一门有科技含量的学科,不要妄自菲薄,淡泊明志才是真!

本栏目精选

热门推荐

频道导航