1. 基础概念
1.1 名词概念:
网络分层:
OSI中的层 | 功能 | TCP/IP协议族 |
---|---|---|
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 |
传输层 | 提供端对端的接口 | TCP,UDP |
网络层 | 为数据包选择路由 | IP,RIP, ICMP,OSPF,EIGRP,IGMP |
数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
IP地址:
IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来表示,而且,用点分开的每个字节的数值范围是0~255,如202.116.0.1
二进制:00000000.00000000.00000000.00000000
十进制:0.0.0.0
二进制:11000000.10101000.00000001.00001010
十进制:192.168.1.10
IP地址分类:
类别 | 网段 | 区分 | 地址范围 | 备注 |
---|---|---|---|---|
A | 0~127 | 二进制首位为0 | 1.0.0.1~127.255.255.254 | |
B | 128~191 | 二进制首位为10 | 172.16.0.0~172.31.255.254 | |
C | 192~223 | 二进制首位为110 | 192.168.0.1~192.168.255.254 | |
D | 224~239 | 二进制首位为1110 | 224.0.0.0~239.255.255.254 | 不区分网络地址和主机地址。目前D类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。 |
E | 240~255 | 二进制首位为1111 | 240.0.0.0~255.255.255.255 | 不区分网络地址和主机地址,E类地址是保留地址用于以后使用。 |
特殊地址:
0.0.0.0
严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。
255.255.255.255
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。如果翻译成人类的语言,应该是这样:“这个房间里的所有人都注意了!”这个地址不能被路由器转发。
127.0.0.1
本机地址,主要用于测试。用汉语表示,就是“我自己”。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。
165.254.x.x
如果你的主机使用了DHCP功能自动获得一个IP地址,那么当你的DHCP服务器发生故障,或响应时间太长而超出了一个系统规定的时间,Wingdows系统会为你分配这样一个地址。
224.0.0.0 ~ 239.255.255.254
所有D类地址。224.0.0.1特指所有主机, 224.0.0.2特指所有路由器。这样的地址多用于一些特定的程序以及多媒体程序。如果你的主机开启了IRDP(Internet路由发现协议,使用组播功能)功能,那么你的主机路由表中应该有这样一条路由。
私有地址
A类地址的私有地址是:10.0.0.0~10.255.255.255
B类地址的私有地址是:172.16.0.0~172.31.255.255
C类地址的私有地址是:192.168.0.0~192.168.255.255
这些地址不会被Internet分配,他们再Internet上也不会被路由,虽然它们不能直接和Internet网连接,但通过技术手段仍旧可以和 Internet通讯(NAT技术)
子网掩码(Mask):
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
说白了子网掩码就是将网络上的主机划分到不同的子网中。
比如我的电脑是:
IP:192.168.2.67,二进制:11000000.10101000.00000010.01000011
子网掩码:255.255.255.0,二进制:11111111.11111111.11111111.00000000
两者进行与运算的到:
11000000.10101000.00000010.00000000,十进制:192.168.2.0
可以看到目前所处的网段是:192.168.2.X 网段,其中:192.168.2 为网络地址,X为主机地址。这个网段最大容纳的主机数为:2^8-1 = 255个
对于A类地址来说,默认的子网掩码是255.0.0.0;
对于B类地址来说默认的子网掩码是255.255.0.0;
对于C类地址来说默认的子网掩码是255.255.255.0。
网关(Getway):
可以理解成一个房子的门就是一个网关,如果A房子要到B房子,你要从A房子的门出去,经过B房子的门进入B房子!
而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络A向网络B转发数据包的过程。这里的网管就设置的两个路由器R1和R2。其中R1是192.168.1.X子网网关,R2是192.168.2.X子网网关。
image.png
在我们本机网络设置中:
image.png
这个路由器就是我所在局域网的网关,其地址是192.168.2.X网段中的一个地址(一般DHCP自动分配的都是当前网络段的第一个地址:192.168.2.1)
1.2 相关协议:
IP协议:
8bit(位)=1Byte(字节)
版本号:
4个bit,用来标识IP版本号。这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6。目前使用的IP协议版本号是4。
首部长度:
4个bit。指明IPv4协议包头长度的字节数包含多少个32bit。由于IPv4的包头可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5。占4位。由于它是一个4比特字段,因此首部最长能代表:60个字节,但实际上目前最多仍为24个字节。
服务类型:
占 8 bit,用来获得更好的服务.这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过.1998年IETF把这个字段改名为区分服务 DS(Differentiated Services).只有在使用区分服务时,这个字段才起作用.
总长度:
占 16 bit,指首都及数据之和的长度,单位为字节.因为总长度字段为 16位,所以数据报的最大长度为 2^16-1=65 535字节.在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit).当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值,否则要分片.
由于该字段长16比特,所以IP数据报最长可达65535字节。尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分段。而且,主机也要求不能接收超过576字节的数据报。由于TCP把用户数据分成若干段,因此一般来说这个限制不会影响TCP。UDP的应用(如RIP、TFTP、BOOTP、DNS、SNMP等),都限制用户数据报长度为512字节,小于576字节。但是,事实上现在大多数的实现允许超过8192字节的IP数据报。
总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为46个字节,但是IP数据可能会更短。如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。
标识:
占 16bit,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段.但这个"标识"并不是序号,因为 IP是无连接的服务,数据报不存在按序接收的问题.当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中.相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报.
标志:
3个bit。用于标识数据报是否分片。第1位没有使用,第2位是不分段(DF)位。当DF位被设置为1时,表示路由器不能对数据包进行分段处理。如果数据包由于不能分段而未能被转发,那么路由器将丢弃该数据包并向源发送ICMP不可达。第3位是分段(MF)位。当路由器对数据包进行分段时,除了最后一个分段的MF位被设置为0外,其他的分段的MF位均设置为1,以便接收者直到收到MF位为0的分片为止。
片偏移:
13个bit,当数据包的长度超过它所要去的那个数据链路的MTU时,路由器要将它分片。数据包中的数据将被分成小片,每一片被封装在独立的数据包中。在接收方进行数据报重组时用来标识分片的顺序。用于指明分段起始点相对于报头起始点的偏移量。由于分段到达时可能错序,所以位偏移字段可以使接收者按照正确的顺序重组数据包。
接收端使用标识符
,分段偏移
以及标记域
的MF位来进行重组。
生存时间:
8个bit。TTL域防止丢失的数据包在无休止的传播。该域包含一个8位整数,此数由产生数据包的主机设定。TTL值设置了数据报可以经过的最多的路由器数。TTL的初始值由源主机设置(通常为32或64),每经过一个处理它的路由器,TTL值减1。如果一台路由器将TTL减至0,它将丢弃该数据包并发送一个ICMP超时消息给数据包的源地址。
协议:
8个bit。协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程.ICMP为1,IGMP为2,TCP为6,UDP为17,GRE为47,ESP为50。
首部检验和:
占 16bit.这个字段只检验数据报的首部,但不包括数据部分.这是因为数据报每经过一个路由器,都要重新计算一下首都检验和 (一些字段,如生存时间,标志,片偏移等都可能发生变化),不检验数据部分可减少计算的工作量.
源地址:
占32bit.
目的地址:
占 32bit.
选项部分(可选部分):
IP首部的可变部分就是一个可选字段.选项字段用来支持排错,测量以及安全等措施,内容很丰富.此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目.某些选项项目只需要1个字节,它只包括1个字节的选项代码.但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍.
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的.这就增加了每一个路由器处理数据报的开销,实际上这些选项很少被使用.新的IP版本IPv6就将IP数据报的首部长度做成固定的.
下面是一个TCP的SYN数据包,大家可以分析一下:
4500002C2A690000-4006B7580A616750-7CACAAAD
24DE0E89-12DE958000000000-60023908EA4D0000-020405B4
版本:4,即IPv4;
首部长度:5,即5*4=20B,说明没有可变部分;
服务:00;
总长度:002C,44B;
标识:2A69;
标志+片偏移:0000;
生存时间:40,即64;
协议:06,传输控制协议,也就是TCP;
首部校验和:B758;
源地址:0A616750;
目的地址:7CACAAAD.
TCP协议:
源端口号(Source Port)
长度为16位,指明发送数据的进程。
目的端口号(Destination Port)
长度为16位,指明目的主机接收数据的进程。
序号(seq)
32位,发送的TCP的序号,从0开始,实际中这个值就是发送的数据报中内容的字节数。是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。
确认序号(ack)
32位,即ACK指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,报文的ACK标志位为0。
(比如我收到一个数据报的seq=0,数据报内容20字节,那么我的ack就应该是21,用来标明我sq=0,内容为20字节的数据报已经收到,我接下来期望收到的是sq=21的数据报。)
数据偏移(首部长度)
和IP头部的长度域类似,这个域用来标明TCP头部的长度,单位也是Byte。
TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。
保留(Reserved)
:4位,这些位必须是0。为了将来定义新的用途所保留
控制位:
URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。
URG:
紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
ACK:
确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
PSH:
push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
RST:
重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
SYN:
同步序号,用于建立连接过程,在连接请求中,SYN=1时表示建立连接时,这时候TCP数据部分不带数据。
FIN:
finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
窗口大小(Window Size):
16位,该值指示了从Ack Number开始还愿意接收多少byte的数据量,也即用来表示当前接收端的接收窗还有多少剩余空间,用于TCP的流量控制。
校验位(Checksum):
16位TCP头。发送端基于数据内容计算一个数值,接收端要与发送端数值结果完全一样,才能证明数据的有效性。接收端checksum校验失败的时候会直接丢掉这个数据包。CheckSum是根据伪头+TCP头+TCP数据三部分进行计算的。
优先指针(紧急,Urgent Pointer):
16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。
选项(Option):
长度不定,但长度必须以是32bits的整数倍。常见的选项包括MSS、SACK、Timestamp等等。
因为,TCP报文还得传给下层网络层,封装成IP包,而一个IP包最大长度为65535,同时IP包首部也包含最少20B,所以一个TCP包可以包含的数据部分最大长度为65535-20-20=65495B。
TCP报文中数据部分是可选的,即TCP报文可以不包含数据(同理IP包也可以不包含数据)。不含数据的TCP报文通常是一些确认和控制信息类的报文,如TCP建立连接时的三次握手和TCP终止时的四次挥手等。
三次握手
三次握手过程.png
1,客户端向服务端发起链接请求想建立连接SYN=1
,TCP规定SYN=1时不能携带数据,但要消耗一个序号, 所以Client随机选取一个初始序号seq=111。这里没ACK
什么事,就认为ACK=0
2,服务端收到像客户端发送确认信息,表示可以建立连接,所以SYN=1
,因为这时候服务端响应了Client,所以ACK=1
。TCP规定SYN=1时不能携带数据,但要消耗一个序号, 所以Server随机选取一个初始序号seq=222,又因为这时候Server已经响应了客户端刚才的请求,所有ack=111+1,即ack=112
,告诉Client我下一个需要的到的数据是112,即下一步seq=112
3,Client这时候已经和Server建立了连接,这时候要发送数据了,所以SYN=0
,ACK=1
表示上一步建立连接Client已确认。seq=112
是表示上一步应Server要求,Client开始给Server 112 开始的数据了。ack=223
表示第二步时client已经收到Server的序号为222数据,下一步可以开始给我序号222+1即ack=223
的数据了
为什么不两次握手?
有人会困惑为什么要进行三次握手呢(两次确认)?这主要是为了防止已失效的请求连接报文忽然又传送到了,从而产生错误。
假定A向B发送一个连接请求,由于一些原因,导致A发出的连接请求在一个网络节点逗留了比较多的时间。此时A会将此连接请求作为无效处理 又重新向B发起了一次新的连接请求,B正常收到此连接请求后建立了连接,数据传输完成后释放了连接。如果此时A发出的第一次请求又到达了B,B会以为A又发起了一次连接请求,如果是两次握手:此时连接就建立了,B会一直等待A发送数据,从而白白浪费B的资源。 如果是三次握手:由于A没有发起连接请求,也就不会理会B的连接响应,B没有收到A的确认连接,就会关闭掉本次连接。
四次挥手
image.png
1,客户端告诉服务端,我这么没有数据要发送了标识FIN=1
,序号 seq=111
(举个例子,具体值是上一次客户端收到ack值+数据偏移)。
2,服务端收到这个消息,要对客户端说我知道了,确认序号标识ACK=1
,确认序号ack=112
是上个发送序号seq=111
加上这次服务器发送个客户端数据包的偏移值,这里默认是1(没有数据要发送,当然也可能这次还有数据发送,因为这时候服务器还可以继续给客户端发送数据包,客户端还是可以接受的)
3,服务端数据发完了,告诉客户端我这里以后没有数据了,标识FIN=1
,序号seq=222
(同1也是举个例子,具体值是上一次服务端收到ack值+数据偏移)
4,客户端收到了这个消息,要对服务端说我知道了,确认序号标识ACK=1
,确认序号ack=223
,这时候确认序号ack
只能是seq=222 + 1
。因为客户端之前已经告诉服务器,它的数据发完了,这时候发送的包数据部分就是空,所以只是消耗了一个序号,没有数据偏移。至此,客户端和服务端都告诉对方我的数据发完了,ok,我们就愉快的断开连接了!
这里思考为什么是四次挥手了?
其实上面过程就说明了问题,因为TCP是全双工模式,当A告诉B我要结束了,这时只是A不在发数据了,A还可以收,B还可以发!只有B告诉A我也结束了,A和B才能真正的歇下来,全部结束!
UDP协议:
是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。
UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等
在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的QQ就是使用的UDP协议。
UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(广播)
UPD广播 和 单播
广播和单播的处理过程是不同的,单播的数据只是收发数据的特定主机进行处理,而广播的数据整个局域网都进行处理。
例如在一个以太网上有3个主机,主机的配置如表。
主 机 | A | B | C |
---|---|---|---|
IP地址 | 192.168.1.150 | 192.168.1.151 | 192.168.1.158 |
MAC地址 | 00:00:00:00:00:01 | 00:00:00:00:00:02 | 00:00:00:00:00:03 |
单播流程:主机A向主机B发送UDP数据报,发送的目的IP为192.168.1.151,端口为 80,目的MAC地址为00:00:00:00:00:02。此数据经过UDP层、IP层,到达数据链路层,数据在整个以太网上传播,在此层中其他主机会 判断目的MAC地址。主机C的MAC地址为00:00:00:00:00:03,与目的MAC地址00:00:00:00:00:02不匹配,数据链路层 不会进行处理,直接丢弃此数据。
主机B的MAC地址为00:00:00:00:00:02,与目的MAC地址00:00:00:00:00:02一致,此数据会经过IP层、UDP层,到达接收数据的应用程序。
广播的流程: 主机A向整个网络发送广播数据,发送的目的IP为192.168.1.255,端口为 80,目的MAC地址为FF:FF:FF:FF:FF:FF。此数据经过UDP层、IP层,到达数据链路层,数据在整个以太网上传播,在此层中其他主机会 判断目的MAC地址。由于目的MAC地址为FF:FF:FF:FF:FF:FF,主机C和主机B会忽略MAC地址的比较(当然,如果协议栈不支持广播,则 仍然比较MAC地址),处理接收到的数据。
主机B和主机C的处理过程一致,此数据会经过IP层、UDP层,到达接收数据的应用程序。
ICMP协议:
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping
命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
DHCP协议:
动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网网络协议,使用UDP协议工作,主要有两个用途:用于内部网或网络服务供应商自动分配IP地址;给用户用于内部网管理员作为对所有计算机作中央管理的手段。
ARP协议:
地址解析协议,即ARP(Address Resolution Protocol),是根据[IP地址]获取[物理地址]的一个[TCP/IP协议]。[主机]发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
- 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
- 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
- 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
- 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。实例http://www.cnblogs.com/csguo/p/7527303.html
NAT协议:
2. 路由转发
Internet中使用的是动态路由选择协议,在Internet的概念中,将整个互联网划分为许多个小的自治系统(AS)。AS的最主要的特征:一个AS对其他AS表现出的是一个单一 和一致的路由选择策略。
由于AS的存在,路由选择协议又分为两种:
内部网关协议(IGP):即在一个AS内部使用的路由选择协议,而这与互联网中其他AS选用什么路由协议无关。比如:OSPF
外部网关协议(EGP):若源主机和目的主机不再同一个AS中,就需要使用一种协议将路由选择信息传递到另一个AS中,这就是EGP。比如:BGP。
2.1 路由表
在计算机网络中路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的[拓扑]信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。
可以理解为一个路由表包含:
目的主机号 | 下一跳 | 距离 |
---|---|---|
10.0.0.1 | 20.0.0.1 | 2 |
2.1.1 静态路由表
由系统管理员是先设置好固定的[路由表]称之为静态路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。
2.1.2 动态路由表
动态路由是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发报文。
动态路由机制的运作依赖路由器的两个基本功能:路由器之间适时的路由信息交换,对路由表的维护:
-
路由器之间适时地交换路由信息。
动态路由之所以能根据网络的情况自动计算路由、选择转发路径,是由于当网络发生变化时,路由器之间彼此交换的路由信息会告知对方网络的这种变化,通过信息扩散使所有路由器都能得知网络变化。 -
路由器根据某种路由算法(不同的动态路由协议算法不同)把收集到的路由信息加工成路由表,供路由器在转发IP报文时查阅。
在网络发生变化时,收集到最新的路由信息后,路由算法重新计算,从而可以得到最新的路由表。需要说明的是,路由器之间的路由信息交换在不同的路由协议中的过程和原则是不同的。交换路由信息的最终目的在于通过路由表找到一条转发IP报文的“最佳”路径。每一种路由算法都有其衡量“最佳”的一套原则,大多是在综合多个特性的基础上进行计算,这些特性有:路径所包含的路由器结点数(hop count)、网络传输费用(cost)、带宽(bandwidth)、延迟(delay)、负载(load)、可靠性(reliability)和最大传输单元MTU(maximum transmission unit)。 -
常见的动态路由协议有:RIP、OSPF、IS-IS、BGP、IGRP/EIGRP。每种路由协议的工作方式、选路原则等都有所不同。
RIP
路由信息协议(RIP) 是内部网关协议IGP(Interior Gateway Protocol)中最先得到广泛使用的协议。RIP是一种分布式的基于距离矢量
的路由选择协议,是因特网的标准协议,其最大优点就是实现简单,开销较小。
距离矢量路由协议:
每隔30秒,距离向量路由协议就要向相邻站点发送整个路由选择表,使相邻站点的路由选择表得到更新。这样,它就能从别的站点(直接相连的或其他方式连接的)收集一个网络的列表,以便进行路由选择。距离向量路由协议使用跳数作为度量值,来计算到达目的地要经过的路由器数。
例如,R I P使用B e l l m a n - F o r d算法确定最短路径,即只要经过最小的跳数就可到达目的地的线路。最大允许的跳数通常定为1 5。那些必须经过1 5个以上的路由器的终端被认为是不可到达的。
image.png
OSPF
OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议IGP的一种。是基于链路状态路由选择协议
,它比距离矢量
复杂得多,但基本功能和配置却很简单,甚至算法(著名的迪克斯加算法(Dijkstra)被用来计算最短路径树。
)也容易理解。
路由器的链路状态的信息称为链路状态,包括:接口的IP地址和子网掩码、网络类型(如以太网链路或串行点对点链路)、该链路的开销、该链路上的所有的相邻路由器。
IS-IS
IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)路由协议最初是ISO(the International Organization for Standardization,国际标准化组织)为CLNP(Connection Less Network Protocol,无连接网络协议)设计的一种动态路由协议。
BGP
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。
BGP用于在不同的自治系统(AS)之间交换路由信息。当两个AS需要交换路由信息时,每个AS都必须指定一个运行BGP的节点,来代表AS与其他的AS交换路由信息。这个节点可以是一个主机。但通常是路由器来执行BGP。两个AS中利用BGP交换信息的路由器也被称为边界网关(Border Gateway)或边界路由器(Border Router)
由于可能与不同的AS相连,在一个AS内部可能存在多个运行BGP的边界路由器。同一个自治系统(AS)中的两个或多个对等实体之间运行的BGP 被称为 IBGP(Internal/Interior BGP)。归属不同的AS的对等实体之间运行的BGP称为EBGP (External/Exterior BGP)。在AS边界上与其他AS交换信息的路由器被称作边界路由器(border/edge router)。在互联网操作系统(Cisco IOS)中,IBGP通告的路由的距离为200,优先级比EBGP和任何内部网关协议(IGP)通告的路由都低。其他的路由器实现中,优先级顺序也是EBGP高于IGP,而IGP又高于IBGP。
BGP属于外部网关路由协议,可以实现自治系统间无环路的域间路由。BGP是沟通Internet广域网的主用路由协议,例如不同省份、不同国家之间的路由大多要依靠BGP协议。BGP可分为IBGP(Internal BGP)和EBGP(External BGP)。BGP的邻居关系(或称通信对端/对等实体)是通过人工配置实现的,对等实体之间通过TCP(端口179)会话交互数据。BGP路由器会周期地发送19字节的保持存活keep-alive消息来维护连接(默认周期为30秒)。在路由协议中,只有BGP使用TCP作为传输层协议。
3. 数据链路层传递
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
设计数据链路层的主要目的就是在原始的、有差错的物理传输线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,向网络层提供高质量的服务。从网络参考模型的角度看,物理层之上的各层都有改善数据传输质量的责任,数据链路层是最重要的一层。
网友评论