【协议森林】邮差与邮局 (网络协议概观)

2017-08-27 Vamei 码农有道

信号的传输总要符合一定的协议(protocol)。比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号。这样一个“狼烟=敌人入侵”就是一个简单的协议。协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母。比如SOS(***---***,  *代表短信号,-代表长信号)。这样"***= S, ---=O"就是摩尔斯码规定的协议。然而更进一层,人们会知道SOS是求助信息,原因是我们有“SOS=求救”这个协议存在在脑海里。所以"***---***=SOS=求救"是一个由两个协议组成的分层通信系统。

使用Morse Code的电报机

计算机之间的通信也要遵循不同层次的协议,来实现计算机的通信。

物理层(physical layer)

所谓的物理层,是指光纤、电缆或者电磁波等真实存在的物理媒介。这些媒介可以传送物理信号,比如亮度、电压或者振幅。对于数字应用来说,我们只需要两种物理信号来分别表示0和1,比如用高电压表示1,低电压表示0,就构成了简单的物理层协议。针对某种媒介,电脑可以有相应的接口,用来接收物理信号,并解读成为0/1序列。

链路层(link layer)

在链路层,信息以帧(frame)为单位传输。所谓的帧,是一段有限的0/1序列。链路层协议的功能就是识别0/1序列中所包含的帧。比如说,根据一定的0/1组合识别出帧的起始和结束。在帧中,有收信地址(Source, SRC)和送信地址(Destination, DST),还有能够探测错误的校验序列(Frame CheckSequence)。当然,帧中最重要的最重要是所要传输的数据 (payload)。这些数据往往符合更高层协议,供网络的上层使用。与数据相配套,帧中也有数据的类型(Type)信息。链路层协议不关心数据中到底包含什么。帧就像是一个信封,把数据包裹起来。

以太网(Ethernet)和WiFi是现在最常见的链路层协议。通过链路层协议,我们可以建立局域的以太网或者WiFi局域网,并让位于同一局域网络中的两台计算机通信。链路层就像是一个社区的邮差,他认识社区中的每一户人。社区中的每个人都可以将一封信(帧)交给他,让他送给同一社区的另一户人家。

链路层:社区小邮差

网络层(network layer)

不同的社区之间该如何通信呢?换句话说,如何让WiFi上的一台计算机和以太网上的另一台计算机通信呢?我们需要一个“中间人”。这个“中间人”必须有以下功能: 1. 能从物理层上在两个网络的接收和发送0/1序列,2. 能同时理解两种网络的帧格式。路由器(router)就是为此而产生的“翻译”。一个路由器有多个网卡(NIC,Network Interface Controller),每个NIC可以接入多个网络,并理解相应的连接层协议。在帧经过路由到达另一个网络的时候,路由会读取帧的信息,并改写以发送到另一个网络。所以路由器就像是在两个社区都有分支的邮局。一个社区的邮差将信送到本社区的邮局分支,而邮局会通过自己在另一个地区的分支将信转交给另一个社区的邮差手中,并由另一个社区的邮差最终送到目的地。

通过路由连接的WiFi和以太网

整个通信过程如下:WiFi上的计算机1 -> 路由WiFi接口 ->  路由以太网接口 -> 以太网上的计算机2(蓝色表示WiFi网络,绿色表示以太网络)

在链路层,我们的一个帧中只能记录SRC和DST两个地址。而上面的过程需要经过四个地址 (计算机1,WiFi接口,以太网接口,计算机2)。显然,仅仅靠链路层协议无法满足我们的需要。由于链路层协议开发在先,我们无法改动链路层协议,只能在链路层的数据(payload),也就是信纸内部下功夫了。IP协议应运而生。

计算机1,路由器和计算机2都要懂得IP协议。当计算机1写信的时候,会在信纸的开头写上这封信的出发地址和最终到达地址 (而不是在信封上),而在信封上写上要送往邮局。WiFi网的邮差将信送往邮局。在邮局,信被打开,邮局工作人员看到最终地址,于是将信包装在一个新的信封中,写上出发地为邮局,到达地为计算机2,并交给以太网的邮差,由以太网的邮差送往计算机2。

(IP协议还要求写如诸如校验等信息,交通状况等信息,以保护通信的稳定性。)

转交给邮局

在链路层,邮差只负责在本社区送信,所以信封上的地址总是“第一条街第三座房子”或者说“中心十字路口拐角的小房子”这样一些本地人才了解的地址描述,这给邮局的工作带来不便。所以邮局要求,信纸上写的地址必须是一个符合官方规定的“邮编”,也就是IP地址。这个地址为世界上的每一个房子编号(邮编)。当信件送到邮局的时候,邮局根据邮编,就能查到对应的地址描述,从而能顺利改写信封上的信息。

每个邮局一般连接多个社区,而一个社区也可以有多个邮局,分别通往不同的社区。有时候一封信要通过多个邮局转交,才能最终到达目的地,这个过程叫做route。邮局将分离的局域网络连接成了internet,并最终构成了覆盖全球的互联网。

传输层(transport layer)

上面的三层协议让不同的计算机之间可以通信。但计算机中实际上有许多个进程,每个进程都可能有通信的需求。这就好像一所房子里住了好几个人(进程),如何让信精确的送到某个人手里呢?遵照之前相同的逻辑,我们需要在信纸上写上新的信息,比如收信人的姓名,才可能让信送到。所以,传输层就是在信纸的空白上写上新的“收信人”信息。每一所房子会配备一个管理员(传输层协议)。管理员从邮差手中接过信,会根据“收信人”,将信送给房子中的某个人。

管理员

传输层协议,比如TCP和UDP,使用端口号(port number)来识别收信人(某个进程)。在写信的时候,我们写上目的地的端口。当信到达目的地的管理员手中,他会根据传输层协议,识别端口号,将信送给不同的人。

TCP和UDP协议是两种不同的传输层协议。UDP协议类似于我们的信件交流过程。TCP协议则好像两个情人间的频繁通信。一个小情人要表达的感情太多,以致于连续写了好几封信。而另一方必须将这些信按顺序排列起来,才能看明白全部的意思。TCP协议还有控制网络交通等功能。

应用层(applicationlayer)

通过上面的几层协议,我们已经可以在任意两个人(进程)之间进行通信。然而每个人实际上从事的是不同的行业。有的人是律师,有的人外交官。比如说律师之间的通信,会用严格的律师术语,以免产生纠纷。再比如外交官之间的通信,必须符合一定的外交格式,以免发生外交误会。再比如间谍通过暗号来传递加密信息。应用层协议是对信件内容进一步的用语规范。应用层的协议包括用于Web浏览的HTTP协议,用于传输文件的FTP协议,用于Email的IMAP等等。

外交通信

总结

总过网络分层,我们从原始的0/1序列抽象出本地地址(邮差)、邮编(邮局)、收信人(管理员)、收信人行业(用语规范)这些概念。这些概念最终允许互联网上的分布于两台计算机的两个进程相互通信。

写信人必须按照各层的协议,封装好整个信封 (encapsulation);而收信人则按照相反的顺序,来拆开这个信封。整个过程是可读信息 -> 二进制 -> 可读信息。计算机只能理解和传输0/1序列,而计算机的用户则总是输入和输出可读信息。网络协议保证了可读信息在整个转换和传输过程中的完整性。

计算机协议本身还有更多的细节需要深入。这篇文章只是从分层的角度描述各个层次所实现的功能。

学习心得:

1、物理层:传送物理信号真实存在的物理媒介,针对某种媒介,电脑可以有相应的接口,用来接收物理信号,并解读成为0/1序列。(光纤、电缆或者电磁波)。

物理层——莫尔斯电报机

 

2、链路层:信息以帧(frame)为单位传输。所谓的帧,是一段有限的0/1序列。链路层协议的功能就是识别0/1序列中所包含的帧。含收信地址(Source, SRC)和送信地址(Destination, DST),还有能够探测错误的校验序列(Frame CheckSequence)。当然,帧中最重要的最重要是所要传输的数据 (payload),以太网(Ethernet)和WiFi是现在最常见的链路层协议。链路层协议不关心数据中到底包含什么。帧就像是一个信封,把数据包裹起来。

链路层:——社区小邮差

 

3、网络层:

一个路由器有多个网卡(NIC,Network InterfaceController),每个NIC可以接入多个网络,并理解相应的连接层协议。

1). 能从物理层上在两个网络的接收和发送0/1序列,2). 能同时理解两种网络的帧格式。

WiFi上的计算机1 -> 路由WiFi接口 ->  路由以太网接口 -> 以太网上的计算机2

路由器——两个社区都有分支的邮局

 

4、传输层:

计算机中实际上有许多个进程,每个进程都可能有通信的需求,传输层协议,比如TCP和UDP,使用端口号(port number)来识别收信人(某个进程)。

传输层——管理员

 

5、应用层:

对传输内容进一步的用语规范。应用层的协议包括用于Web浏览的HTTP协议,用于传输文件的FTP协议,用于Email的IMAP等等。

应用层——外交通信

原文链接:http://www.cnblogs.com/vamei

【协议森林】02 小喇叭开始广播 (以太网与WiFi协议)

2017-08-29 Vamei 码农有道

“小喇叭开始广播啦”,如果你知道这个,你一定是老一辈的人。“小喇叭”是五十年代到八十年代的儿童广播节目。在节目一开始,都会有一段这样的播音:“小朋友,小喇叭开始广播了!” 听到这里,收音机前的小朋友就兴奋起来,准备好听节目了:这一期的内容是链路层的以太网(Ethernet)协议与WiFi。

我们在邮差与邮局中说到,以太网和WiFi是链路层的两种协议。在链路层,信息以帧(frame)为单位传输。帧像信封一样将数据(payload)包裹起来,并注明收信地址和送信地址。链路层实现了“本地社区”的通信。我们先来看看以太网的帧。

以太网的帧格式

帧本身是一段有限的0/1序列。它可以分为头部、数据(Payload)和尾部三部分:

帧按照上面的顺序从头到尾依次被发送/接收。我们下面进一步解释各个区域。

帧头部

帧的最初7个byte被称为序言(preamble)。它每个byte都是0xAA(这里是十六进制,也就是二进制的10101010)。通常,我们都会预定好以一定的频率发送0/1序列(比如每秒10bit)。如果接收设备以其他频率接收(比如每秒5bit),那么就会错漏掉应该接收的0/1信息。但是,由于网卡的不同,发送方和接收方即使预订的频率相同,两者也可能由于物理原因发生偏差。这就好像两个人约好的10点见,结果一个人表快,一个人表慢一样。序言是为了让接收设备调整接收频率,以便与发送设备的频率一致,这个过程就叫做时钟复原(recover the clock)。

(就像在收听广播之前,调整转钮,直到声音清晰。网卡会在接收序言的过程中不断微调自己的接收频率,直到自己“听到”是...1010...)

时钟调整好之后,我们等待帧的起始信号(SFD, start framedelimiter)。SFD是固定的值0xAB。这个0xAB就好像“小喇叭开始广播啦”一样,提醒我们好节目就要上演了。

Preamble和SFD

SFD之后是6 byte的目的地址(DST, destination)和6 byte的源地址(SRC,source)。这就是我们在邮差和邮局中的介绍一样,为信封写上目的地和发出地。要注意,这里写在信封上的是对地址的“本地描述”,也就是MAC地址。MAC地址是物理设备自带的序号,只能在同一个以太网中被识别 (正如邮差只熟悉自己的社区一样)。

头部的最后一个区域是Type,用以说明数据部分的类型。(比如0x0800为IPv4,0x0806为ARP)

帧数据部分

数据一般包含有符合更高层协议的数据,比如IP包。连接层协议本身并不在乎数据是什么,它只负责传输。注意,数据尾部可能填充有一串0(PAD区域)。原因是数据需要超过一定的最小长度,不同的协议要求的数据最小长度是不一样的,例如:以太网(IEEE 802.3)要求帧的数据部分长度是46-1500个byte。如果数据部分不够46byte,则在数据尾部填充0以达到指定的最小长度。

帧尾部

跟随在数据之后的是校验序列(FCS, Frame Check Sequence)。校验序列是为了检验数据的传输是否发生错误。在物理层,我们通过一些物理信号来表示0/1序列(比如高压/低压,高频率/低频率等),但这些物理信号可能在传输过程中受到影响,以致于发生错误。如何来发现我们的数据是正确的呢?

一个方法是将数据发送两遍,然后对比一下是否一样。但这样就大大降低了网络的效率。

FCS采用了CRC(CyclicRedundancy Check)算法。这就好像是一家饭店的老板雇佣了一个收银员,但他又担心收银员黑钱。可是每天营业额很大,老板即使坐在旁边看,也不能用记住收到的总数。所以他采取了一个聪明的办法:只记住收到钱的最后一位 (比如收到19元,老板记住9)。当有新的进账(比如13,尾数为3),他就将新的尾数和旧的尾数相加,再记住和的尾数(也就是2)。当收银员交给老板钱的时候,老板只用看总额的最后一位是否和自己记的最后一位相同,就可以知道收银员是否诚实了。如果说我们的数据是收银的总额的话,我们的FCS就是老板记录的尾数。如果两者不相符,我们就知道数据在传输的过程中出现错误,不能使用。

有FCS在盯着

上面的比喻实际上是用营业总额不断的除以10,获得最终的尾数。CRC算法也相类似。n位CRC算法取一个n bit的因子,比如下面的1011。数据序列结尾增加n-1个0。因子与数据序列的不断进行XOR运算,直到得到n-1位的余数,也就是100。该余数各位取反(011),然后存储在FCS的位置。

上面例子用的是4位CRC。在Ethernet中使用的因子为32位的,以达到更好的检测效果。

集线器(Hub)vs 交换器(Switch)

以太网使用集线器或者交换器将帧从发出地传送到目的地。一台集线器或交换器上有多个端口,每个端口都可以连接一台计算机(或其他设备)。

集线器像一个广播电台。一台电脑将帧发送到集线器,集线器会将帧转发到所有其他的端口。每台计算机检查自己的MAC地址是不是符合DST。如果不是,则保持沉默。集线器是比较早期的以太网设备。它有明显的缺陷:

1) 任意两台电脑的通信在同一个以太网上是公开的。所有连接在同一个集线器上的设备都能收听到别人在传输什么,这样很不安全。可以通过对信息加密提高安全性。

2) 不允许多路同时通信。如果两台电脑同时向集线器发信,集线器会向所有设备发出“冲突”信息,提醒发生冲突。可以在设备上增加冲突检测算法(collisiondetection):一旦设备发现有冲突,则随机等待一段时间再重新发送。

交换器克服集线器的缺陷。交换器记录有各个设备的MAC地址。当帧发送到交换器时,交换器会检查DST,然后将帧只发送到对应端口。交换器允许多路同时通信。由于交换器的优越性,交换器基本上取代了集线器。但比较老的以太网还有可能在使用集线器。

上面的两个截图来自CISCO的一个视频,这个视频形象的解释了这两种设备,下面是视频的地址,有兴趣的同学可以看看:

http://v.youku.com/v_show/id_XNDgwNTQ5OTI4.html

WiFi

WiFi的工作方式与集线器连接下的以太网类似。一个WiFi设备会向所有的WiFi设备发送帧,其它的WiFi设备检查自己是否符合DST。由于WiFi采取无线电信号,所以很难像交换器一样定向发送,所以WiFi的安全性很值得关注。WiFi采用加密的方法来实现信息的安全性。

(早期的WEP加密方法非常脆弱,建议使用WPA或者WPA2加密方法。隐藏WiFi设备ID的方法不是很有用。)

总结

我们深入了链路层协议的一些细节。链路层是物理与逻辑的接口,它的设计兼顾了物理需求(比如时钟复原,CRC)和逻辑需求(比如地址、数据)。由于链路层处于网络逻辑的底层,有许多基于链路层的攻击手法,这需要我们对链路层的工作方式有一定的了解,以设计出更好的网络安全策略。

原文链接:http://www.cnblogs.com/vamei

【协议森林】03 IP接力赛

2017-09-03 Vamei 码农有道

网络层(network layer)是实现互联网的最重要的一层。正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet。更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息。操作系统也会提供该层的socket,从而允许用户直接操作IP包。

IP数据包是符合IP协议的信息(也就是0/1序列),我们后面简称IP数据包为IP包。IP包分为头部(header)和数据(Data)两部分。数据部分是要传送的信息,头部是为了能够实现传输而附加的信息(这与以太网帧的头部功能相类似,如果对帧感到陌生,可参看小喇叭开始广播(请戳我)一文)。

IP包格式

IP协议可以分为IPv4和IPv6两种。IPv6是改进版本,用于在未来取代IPv4协议。出于本文的目的,我们可以暂时忽略两者的区别,只以IPv4为例。下面是IPv4的格式

IPv4包我们按照4 bytes将整个序列折叠,以便更好的显示

与帧类似,IP包的头部也有多个区域。我们将注意力放在红色的发出地(sourceaddress)和目的地(destinationaddress)。它们都是IP地址。IPv4的地址为4 bytes的长度(也就是32位)。我们通常将IPv4的地址分为四个十进制的数,每个数的范围为0-255,比如192.0.0.1就是一个IP地址。填写在IP包头部的是该地址的二进制形式。

IP地址是全球地址,它可以识别"社区"(局域网)和"房子"(主机)。这是通过将IP地址分类实现的。

每个IP地址的32位分为前后两部分,第一部分用来区分局域网,第二个部分用来区分该局域网的主机。子网掩码(Subnet Mask)告诉我们这两部分的分界线,比如255.0.0.0(也就是8个1和24个0)表示前8位用于区分局域网,后24位用于区分主机。由于A、B、C分类是已经规定好的,所以当一个IP地址属于B类范围时,我们就知道它的前16位和后16位分别表示局域网和主机。

网卡与路由器

邮差与邮局中说,IP地址是分配给每个房子(计算机)的"邮编"。但这个说法并不精确。IP地址实际上识别的是网卡(NIC,Network Interface Card)。网卡是计算机的一个硬件,它在接收到网路信息之后,将信息交给计算机(处理器/内存)。当计算机需要发送信息的时候,也要通过网卡发送。一台计算机可以有不只一个网卡,比如笔记本就有一个以太网卡和一个WiFi网卡。计算机在接收或者发送信息的时候,要先决定想要通过哪个网卡。

NIC

路由器(router)实际上就是一台配备有多个网卡的专用电脑。它让网卡接入到不同的网络中,这样,就构成在邮差与邮局中所说的邮局。比如下图中位于中间位置的路由器有两个网卡,地址分别为199.165.145.17和199.165.146.3。它们分别接入到两个网络:199.165.145和199.165.146。

IP包接力

IP包的传输要通过路由器的接力。每一个主机和路由中都存有一个路由表(routingtable)。路由表根据目的地的IP地址,规定了等待发送的IP包所应该走的路线。就好像下图的路标,如果地址是“东京”,那么请转左;如果地址是“悉尼”,那么请向右。

Areal world routing table

比如我们从主机145.22生成发送到146.21的IP包:铺开信纸,写好信的开头(剩下数据部分可以是TCP包,可以是UDP包,也可以是任意乱写的字,我们暂时不关心),注明目的地IP地址(199.165.146.21)和发出地IP地址(199.165.145.22)。主机145.22随后参照自己的routing table,里面有三行:

这里有两行记录。

第一行表示,如果IP目的地是199.165.145.0这个网络的主机,那么只需要自己在eth0上的网卡直接传送(“本地社区”:直接送达),不需要前往router(Gateway0.0.0.0 = “本地送信”)。

第二行表示所有不符合第一行的IP目的地,都应送往Gateway199.165.145.17,也就是中间router接入在eth0的网卡IP地址(邮局在eth0的分支)。

我们的IP包目的地为199.165.146.21,不符合第一行,所以按照第二行,发送到中间的router。主机145.22会将IP包放入帧的payload,并在帧的头部写上199.165.145.22对应的MAC地址,这样,就可以按照小喇叭中的方法在局域网中传送了。

中间的router在收到IP包之后(实际上是收到以太协议的帧,然后从帧中的payload读取IP包),提取目的地IP地址,然后对照自己的routing table:

从前两行我们看到,由于router横跨eth0和eth1两个网络,它可以直接通过eth0和eth1上的网卡直接传送IP包。

第三行表示,如果是前面两行之外的IP地址,则需要通过eth1,送往199.165.146.8(右边的router)。

我们的目的地符合第二行,所以将IP放入一个新的帧中,在帧的头部写上199.165.146.21的MAC地址,直接发往主机146.21。(在Linux下,可以使用$route-n来查看routing table)

IP包可以进一步接力,到达更远的主机。IP包从主机出发,根据沿途路由器的routing table指导,在router间接力。IP包最终到达某个router,这个router与目标主机位于一个局域网中,可以直接建立连接层的通信。最后,IP包被送到目标主机。这样一个过程叫做routing(我们就叫IP包接力好了,路由这个词实在是混合了太多的意思)。

整个过程中,IP包不断被主机和路由封装入帧(信封)并拆开,然后借助连接层,在局域网的各个NIC之间传送帧。整个过程中,我们的IP包的内容保持完整,没有发生变化。最终的效果是一个IP包从一个主机传送到另一个主机。利用IP包,我们不需要去操心底层(比如链路层)发生了什么。

ARP协议

在上面的过程中,我们实际上假设了,每一台主机和路由都能了解局域网内的IP地址和MAC地址的对应关系,这是实现IP包封装(encapsulation)到帧的基本条件。IP地址与MAC地址的对应是通过ARP协议传播到局域网的每个主机和路由。每一台主机或路由中都有一个ARP cache,用以存储局域网内IP地址和MAC地址如何对应。

ARP协议(ARP介于链路层和网络层之间,ARP包需要包裹在一个帧中,它的工作方式如下:主机会发出一个ARP包,该ARP包中包含有自己的IP地址和MAC地址。通过ARP包,主机以广播的形式询问局域网上所有的主机和路由:我是IP地址xxxx,我的MAC地址是xxxx,有人知道199.165.146.4的MAC地址吗?拥有该IP地址的主机会回复发出请求的主机:哦,我知道,这个IP地址属于我的一个NIC,它的MAC地址是xxxxxx。由于发送ARP请求的主机采取的是广播形式,并附带有自己的IP地址和MAC地址,其他的主机和路由会同时检查自己的ARP cache,如果不符合,则更新自己的ARP cache。

这样,经过几次ARP请求之后,ARP cache会达到稳定。如果局域网上设备发生变动,ARP重复上面过程。

(在Linux下,可以使用$arp命令来查看ARP的过程。ARP协议只用于IPv4。IPv6使用Neighbor Discovery Protocol来替代ARP的功能)

RoutingTable的生成

我们还有另一个假设,就是每个主机和路由上都已经有了合理的routingtable。这个routint table描述了网络的拓扑(topology)结构。如果你了解自己的网络连接,可以手写自己主机的routing table。但是,一个路由器可能有多个出口,所以routingtable可能会很长。更重要的是,周围连接的其他路由器可能发生变动(比如新增路由器或者路由器坏掉),我们就需要routing table能及时将交通导向其他的出口。我们需要一种更加智能的探测周围的网络拓扑结构,并自动生成routing table。

我们以北京地铁为例子。如果从机场前往朝阳门,那么可以采取2号航站楼->>三元桥->>东直门->>朝阳门。2号航站楼和朝阳门分别是出发和目的主机。而三元桥和东直门为中间的两个router。如果三元桥->>东直门段因为维修停运,我们需要更改三元桥的routing table,从而给前往朝阳门的乘客(IP包)指示:请走如下路线三元桥->>芍药居。然后依照芍药居的routing table前往朝阳门(芍药居->>东直门->>朝阳门)。

一种用来生成routingtable的协议是RIP(Routing Information Protocol)。它通过距离来决定routing table,所以属于distance-vectorprotocol。

对于RIP来说,所谓的距离是从出发地到目的地途径的路由器数目(hop number)。比如上面从机场到朝阳门,按照2号航站楼->>三元桥->>东直门->>朝阳门路线,途径两个路由器,距离为2。我们最初可以手动生成三元桥的routing table。

随后,根据RIP协议,三元桥向周围的路由器和主机广播自己前往各个IP的距离(比如到机场=0,团结湖=0,国贸=1,望京西=1,建国门=2)。收到RIP包的路由器和主机根据RIP包和自己到发送RIP包的主机的距离,算出自己前往各个IP的距离。东直门与三元桥的距离为1。东直门收到三元桥的RIP包(到机场的距离为0),那么东直门途径三元桥前往机场的距离为1+0=1。如果东直门自己的RIP记录都比这个远(比如东直门->>芍药居->>三元桥->>机场 = 2)。那么东直门更改自己的routingtable:前往机场的交通都发往三元桥而不是芍药居。如果东直门自身的RIP记录并不差,那么东直门保持routing table不变。

上述过程在各个点不断重复RIP广播/计算距离/更新routingtable的过程,最终所有的主机和路由器都能生成最合理的路径(merge)。

(RIP的基本逻辑是:如果A距离B为6,而我距离A为1,那么我途径A到B的距离为7)

RIP出于技术上的原因(loopinghops),认为距离超过15的IP不可到达。所以RIP更多用于互联网的一部分(比如整个中国电信的网络)。这样一个互联网的部分往往属于同一个ISP或者有同一个管理机构,所以叫做自治系统(AS,autonomoussystem)。

自治系统内部的主机和路由根据通向外部的边界路由器来和其它的自治系统通信。各个边界路由器之间通过BGP(Border Gateway Protocol)来生成自己前往其它AS的routingtable,而自治系统内部则参照边界路由器,使用RIP来决定routingtable。BGP的基本工作过程与RIP类似,但在考虑距离的同时,也权衡比如政策、连接性能等其他因素,再决定交通的走向(routing table)。

总结

我们一开始讲述了IP包根据routing table进行接力的过程。为了顺利实现接力,我们又进一步深入到ARP和RIP/BGP。这三个协议都协助了IP传输。

ARP让每台电脑和路由器知道自己局域网内IP地址和MAC地址的对应关系,从而顺利实现IP包到帧的封装。RIP协议可以生成自治系统内部合理的routing table。BGP协议可以生成自治系统外部的routing table。

在整个过程中,我们都将注意力放在了IP包大的传输过程中,而故意忽略一些细节。而上面的IP接力过程适用于IPv6。

原文链接:http://www.cnblogs.com/vamei

【协议森林】邮差与邮局 (网络协议概观)相关推荐

  1. 协议森林01 邮差与邮局 (网络协议概观)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟 ...

  2. 协议森林08 不放弃 (TCP协议与流通信)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. TCP(Transportation Control Protocol)协议与IP协议是一同产生的 ...

  3. Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述

    Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...

  4. 我刚刚通过 @盛大网盘EverBox 分享了 Web协议与实践HTTP.、网络协议、缓存技术和....pdf, 欢迎大家下载!...

    我刚刚通过 @盛大网盘EverBox 分享了 Web协议与实践HTTP..网络协议.缓存技术和....pdf, 欢迎大家下载! Web协议与实践HTTP..网络协议.缓存技术

  5. 协议森林05 我尽力 (IP协议详解)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP协议的具体细节和设计哲学 ...

  6. 浅谈网络协议(一) 为什么要学网络协议

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习网易研究院云技术部首席架构师刘超先生的趣谈网络协议,开一个系列记录一下. 本系列文章是在原作的基础上修正,并加以自己 ...

  7. 【网络协议】专题总结以及网络协议高频面试题汇总(8篇)

    这是一份超详细的HTTP协议攻略,内容大纲如下: 内容如下(点击即可跳转): 一篇文章带你详解 HTTP 协议(上) 一篇文章带你详解 HTTP 协议之报文首部及字段详解(中) 一篇文章带你详解 HT ...

  8. 禁止服务器的协议,启用或禁用服务器网络协议

    启用或禁用服务器网络协议 06/30/2015 本文内容 所有网络协议都是由 SQL Server 安装程序安装的,可以启用也可以禁用这些网络协议. 本主题介绍如何通过使用 SQL Server 配置 ...

  9. Linux的网络协议族是什么,Linux 网络协议的概述

    网络层协议 网络层协议主要包括 IP.ICMP(网络控制报文协议).ARP(地址解析协议) IP协议 该协议被设计成互联分组交换通信网,以形成一个网际通信环境.它负责在源主机和目的地主机之间传输来自其 ...

最新文章

  1. linux的裁剪过程,让你的小linux更加完善,赶快试试吧!
  2. mysql 优化实例(百万级数据)
  3. 网络营销专员浅析如何判断网络营销中网站优化效果几何?
  4. freemarker.properties的属性文件的配置说明
  5. 秒杀场景_解决秒杀超卖问题_04
  6. excel 字符串拼接_Python|处理字符串
  7. 系统虚拟化与虚拟机的区别
  8. gcc for linux安装失败,安装错误的gcc导致一些错误
  9. 电脑计算机丢失UxTheme,Win7系统电脑开机提示uxtheme.dll丢失的解决方法
  10. 非线性规划的拉格朗日乘子法python编程python包编程
  11. java猜拳程序_Java基础之:猜拳小程序
  12. Linux c 目录操作函数scandir
  13. 苹果电脑视频声音提取的方法
  14. 谷歌X最新开源任务驱动的类级别机器人抓取CaTGrasp!
  15. 紫外功率测试软件,紫外灯253.7nm紫外线辐射功率、电气特性的测量方法
  16. byte[] valu 转 ByteBuffer
  17. Notion-我的最后一款笔记应用
  18. 6-1免疫算法(IA)原理
  19. echarts仪表盘option_ECharts仪表盘属性与使用
  20. 中国城市三级联动数据获取方法

热门文章

  1. Unity数字地球,带高程数据
  2. Git原理详解与实用指南
  3. 终于解决!图片随鼠标移动在FireFox下实现,另附一个好玩的图片随鼠标伸缩效果
  4. html中使用canvas画图
  5. 【机器学习】特征选择与稀疏学习
  6. 给学弟学妹自学Java的一些建议!
  7. Cypress 最佳实践
  8. 循环课后题型整理(二十道)
  9. 三菱 PLC张力控制通用程序模板 采用三菱伺服FX3U的速度与力矩模式,收料采 用锥度与恒张力两种控制模式
  10. signature=a1a8cbc12ecc25262df75626ad57ef1a,VANET环境下的隐私保护技术研究