本文主要是介绍软件开发速学计网:网络层,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言,要完整的学计网看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了。网络层的知识比较多,有错请指出,谢谢
文章目录
- 1. 虚拟互连网络
- 2. IP协议
- 2.1 IP地址
- 2.2 IP协议的组成(重要)
- 3. IP协议的转发流程
- 3.1 路由表
- 3.2 IP协议的转发流程
- 4. ARP协议
- 5. RARP协议
- 6. IP地址的子网划分
- 6.1 IP地址的分类
- 6.2 划分子网
- 6.3 无分类编址CIDR
- 7. 内网和外网
- 8. 网络地址转换NAT技术
- 9. ICMP协议
- 10. ICMP协议的应用
- 10.1 Ping应用(诊断工具)
- 10.2 Traceroute应用(诊断工具)
- 11. 路由
- 11.1 自治系统AS
- 11.2 距离矢量(DV)算法
- 11.3 内部网关路由协议RIP协议
- 11.4 Dijkstra(迪杰斯特拉)算法
- 11.5 链路状态(LS)协议
- 11.6 OSPF协议的过程
- 11.7 外部网关路由协议BGP协议
- 12 总结
1. 虚拟互连网络
因为实际的物理网络是非常复杂的,可能连接不同家庭,不同地区,不同城市,不同国家,这其中的互连就非常复杂,如果要准确的说数据传输的路径是不可能的,所以我们不需要关注这些细节,只管发送数据包即可。所以提出了虚拟互连网络。
转载:虚拟互连网络的意义是什么?
所谓虚拟互连网络也就是逻辑互连网络简称为IP 网。它的意思就是利用IP 协议屏蔽互连起来的各种物理网络的异构性使这些性能各异的网络看起来好像是一个统一的网络。使用虚拟互连网络的好处是当互联网上的主机进行通信时就好像在一个网络上通信一样而看不见互连的各具体的网络异构细节。
主机A只需要接入网络,主机B也只接入网络,其中主机A发送的数据包是如何传输的并不需要知道,然后主机B等着接收主机A的数据包即可,当然这是利用IP协议来达成这效果的。
所以可以先看到IP协议的作用:
- IP协议使得复杂的实际网络变成一个虚拟互连的网络。
- IP协议也可以使得网络层可以屏蔽底层细节而专注网络层的数据转发。就当作物理层和数据链路层不存在,直接传输数据到对方的网络层。
- IP协议解决了在虚拟网络中数据报传输路径的问题。
2. IP协议
百度百科
IP协议,它的英文是Internet Protocol,即网际互连协议。负责Internet上网络之间的通信,并规定了将数据从一个网络传输到另一个网络应遵循的规则。因特网看起来好像是真实存在的,但实际上它是一种并不存在的虚拟网络,只不过是利用IP协议把全世界所有愿意接入因特网的计算机局域网连接起来,使得它们彼此之间都能够通信。正如人类进行有效交流需要使用同一种语言一样,计算机之间的通信也要使用同一种“语言”,而IP协议正是这种语言。
首先先了解IP地址:
2.1 IP地址
IP地址也跟MAC地址一样,类似身份证的存在。IP地址长度为32位,常分成4个8位,一般使用点分十进制来表示。范围是:0.0.0.0~255.255.255.255。一共可以表示2^32个IP。
IP和MAC的区别:360百科
- IP地址是基于网络拓扑设计出的,同一台设备或计算机上,IP地址是可以改动的(但必须唯一),而MAC则是生产厂商烧录好的,一般不能改动。 如果拿着本机的网卡去装在另一台计算机上则MAC地址还是原来网卡那个。
- 长度不同。IP地址的长度为32位,MAC地址的长度为48位。
- 分配依据不同。IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商。
- 寻址协议层不同。IP地址应用于网络层,而MAC地址应用于数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(指相邻,通过MAC地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。
2.2 IP协议的组成(重要)
IP协议的组成如图,最后两行我们不关心,只看前面5行。因为前5行是IP协议必须需要的,每一行都是32位,即4个字节。一共有20个字节。
- 版本:占4位,指的是IP协议的版本,通信双方的版本必须一致,当前主流的版本是4,即IPv4,也有IPv6。
- 首部长度:占4位,表示的是IP首部长度(包括一些可选的首部数据,看图)。最大数值用十进制表示为15(即首部最大有15行,每行4个字节),换成字节表示为15*4=60字节(即固定首部长度加上可选首部长度),而最小值就是前面说的20个字节(固定首部长度)。
- 服务类型:不关心这个。
- 总长度:占16位,最大数值用十进制表示为65535,表示的是IP数据报总长度(IP首部+IP数据)。在数据链路层中提到MTU,即数据链路层的最大数据传输长度,如果IP数据报的总长度比MTU大时(我们常说的IP数据报其实包含首部和IP数据),数据链路层会把IP数据报拆分成多个数据帧进行传输,即分片。
- 标识:不关心这个。
- 标记:占3位,目前只有2位是有意义的,标志IP报文是否可以分片。
- 片偏移:较长的数据报在分片后,某片在原数据报中的相对位置。就上面说的如果IP数据报的总长度比MTU大时就会把数据报分片成多个数据帧,这时候就需要在每个数据帧的片偏移中保存是第几个偏移的IP数据报,这方便接收方组合数据帧。
- TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备,TTL减1,当TTL=0时,网络设备必须丢弃该报文。这是为了防止报文找不到终点时在网络中无限传输,如果网络中有很多这样的报文存在,那网络的效率就会受影响(消耗带宽)。
- 协议:占8位,表明IP数据所携带的具体数据是什么协议的,如UDP,TCP等。以便使目的主机的IP层知道应将数据部分上交给哪个处理。
- 首部校验和:占16位,校验IP首部是否有出错。如果出错直接丢弃数据报。
- 后面的两个看名字就知道。
3. IP协议的转发流程
逐跳(hop-by-hop):数据报在发送出去时经过可能经过多个网络或路由,每次经过我们就说数据报跳到这里。即数据报在传输中是一跳一跳的传输到目的主机。这是转发过程逐跳的概念。
3.1 路由表
参考数据链路层中的MAC地址表:
老师回答的一些问题:
- 路由器也有网络协议程序在工作,路由器的数据链路层也是工作的,和计算机的工作原理一样。路由表在计算机和路由器上都存在。其实路由器只不过是一个统称了,凡是具备路由功能的设备都可以叫做路由器,计算机也可以路由的。
- 数据链路层的MAC地址是自发现的,当数据链路层不知道某个IP的具体MAC地址时,就会通过广播去询问相邻的设备。
3.2 IP协议的转发流程
拿出数据链路层中遇到跨节点传输的问题,单从网路层来看,我们屏蔽掉数据链路层和物理层:IP协议的转发流程
通过这张图可看到路由中也有3层。
现在网路层和数据链路层结合来看:IP协议的转发流程
- 数据帧每一跳的MAC地址都在变化。
- IP数据报每一跳的IP始终不变。
- 至于网路层知道下一跳IP地址,但为什么告知给数据链路层的却是目的MAC地址?这是因为有两个协议:ARP,RARP协议来进行IP和MAC之间的转换。
4. ARP协议
ARP:Address Resolution Protocal,地址解析器,主要作用是把网路层中32位的IP地址转为数据链路层48位的MAC地址。至于怎么转换的,是根据一张名为ARP缓存表来寻找IP地址映射的MAC地址。
这就会有两种情况:
- ARP缓存表有IP地址和MAC地址的映射关系。那就直接拿去用。
- ARP缓存表没有IP地址和MAC地址的映射关系。那如下图的情况:
ARP缓存表是ARP协议和RARP协议的关键,ARP缓存表缓存了IP地址到硬件地址之间的映射关系。ARP缓存表中的记录并不是永久有效的,有一定的期限,因为可知IP地址是会变化的,所以映射关系会随着IP的变化而变化。
在CMD中输入下面的命令,来查看本机的ARP缓存表。
ARP -a
ARP协议是直接封装到数据链路层的数据帧里面的,因为涉及到IP地址,所以它属于网路层的协议。
(PAD是填充信息)
所以对于IP协议的流程中,在查询路由表后,会使用ARP协议把IP地址转换成MAC地址。
5. RARP协议
RARP:Reverse Address Resolution Protocal,逆地址解析器,即把MAC地址转换为IP地址。
ARP协议和RARP协议是TCP/IP协议栈里面基础的协议,它们的操作对程序员是透明的,也就是在编程中不需要使用这具体的协议,了解即可,有助于理解网络分层的细节。
6. IP地址的子网划分
IP地址一共有2^32个,那么IP地址如果在世界上是随机分配的,那么每次从一个主机发送数据报到目的主机时,都需要去查询全世界网络的IP来找到目的主机,这种耗时就非常非常慢了,因此需要对IP地址进行规划和分配,以便于寻址。
IP地址的编址方法共经历了3个过程:
- 分类的IP地址:最基本的编址方法。
- 子网的划分:对基本编址方法的改进。
- 构成超网:比较新的无分类编址方法(CIDR)。
6.1 IP地址的分类
为了便于寻址以及层次化构建网络,每个IP地址包含网络号和主机号。即IP地址 = 网络号 + 主机号。也称为两级IP地址。
- 网络号(net-id):它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。
- 主机号(host-id):它标志该主机(或路由器)。一个主机号在它前面的网络号所指明的网络范围内必须是唯一的(这句话不懂看下图)。
IP地址根据网络号的不同分为5种类型:A类地址、B类地址、C类地址、D类地址和E类地址。
- A类网络号少,网络内主机号多,通常是比较大的网络,如一个国家或者地区的网络。
- B类,网络号逐渐增多,但每个网络内的主机号逐渐减少,B类通常适用于中型网络
- C类,是我们常用的。比如我们某个学校或者公司的网络,可以容纳的数量有限。
- D类和E类属于比较特殊的网络,分别用于广播和备用。
(主要记住A、B、C类的网络号:A类网络号固定位为0,B类网络号固定位为10,C类网络号固定位为110,D、E类不管)
上面表的数据我参考慕课网老师给的和《计算机网络第七版(谢希仁)》的120页。我也有看到网上的数据可能会跟表不一样,因为有些博文的地址范围是包括特殊地址的,那么自己就要排除掉特殊地址,上图的地址范围是排除好了的
私有地址了解即可,记住也不难,有规律。私有地址不在互联网上使用,是在局域网中使用的IP地址。并且私有网络要跟位于公网的主机进行通信时必须将其私有地址转换为合法公网地址才能对外访问。想知道如何转换请看百度百科的简介
- A类地址的私有地址:10.0.0.0~10.255.255.255(记10)
- B类地址的私有地址:172.16.0.0~172.31.255.255(记172.16和172.31)
- C类地址的私有地址:192.168.0.0~192.168.255.255(记192.168)
额外:C类中每个网络段都有2^8-2个主机号,指的是比如公司申请一个C类网络段为:192.2.5.0,那么该IP地址可以分配给公司中2^8-2台计算机。A类也是,B类也是。
6.2 划分子网
前面的IP分类在今天的需求来看设计得不是很好:IP地址空间的利用率有时很低。比如为某公司256名员工每人配备计算机,那在申请网络段时只能申请B类地址,因为C类地址容不下256个主机号。但申请B类地址分配了256个主机号后,还剩下2^16-2-256个,这非常浪费,即使未来扩招是1w人也还有很多没用。
在划分子网中,原先的两级IP地址划分成3级IP地址,在IP地址中添加子网号,即IP地址 = 网络号 + 子网号 + 主机号。通过划分子网,我们可以按照我们的需要将网络分割成小网络。这样也有助于降低流量和隐藏网络的复杂性。
因为子网号多少位是不确定的,所以不能直接知道网络号,需要引入子网掩码进行计算,子网掩码告知路由器,IP地址的前多少位是网络地址,后多少位(剩余位)是主机地址,使路由器正确判断任意IP地址是否是本网段的,如果相同,那么可以把数据包直接发送到目标主机,否则就需要路由将数据包转发送到目的地。
子网掩码:
- 子网掩码和IP地址一样,都是32位。
- 子网掩码由连续的1和连续的0组成。
- 其对应网络号的所有位置都为1,对应于主机号的所有位置都为0。
- 如果把子网掩码中末尾连续0的总数设为m,则2^m-2可计算出划分的子网可分配给多少台计算机。(-2是因为排除主机号全为0和全为1的)
- 根据子网掩码中除255段外的段,转为二进制,看看有多少个连续1,把连续1的总数设为m,根据公式2^m即可求出划分的子网数量。
- 子网增量是根据主机数和公式2^m来计算,注意这里不减2。
A类网络的默认子网掩码是255.0.0.0,B类网络的默认子网掩码是255.255.0.0,C类网络的默认子网掩码是255.255.255.0。
主机A的IP地址为193.10.10.6,子网掩码为255.255.255.128,网络号是?有多少个子网?每个子网可容纳多少台主机?子网增量是?合法子网有哪些?每个子网的范围?
解:
- 主机A的IP地址转为二进制:11000001.00001010.00001010.00000110
- 子网掩码转为二进制:11111111.11111111.11111111.10000000
- 可知该IP地址是C类地址,则11000001.00001010.00001010这三段字节为网络号,即网络号为193.10.10
- 子网掩码最后一段10000000中,前一位用于子网号,后7为用于主机号。则有1个连续1,根据公式2^1=2,则有2个子网。
- 子网掩码最后一段10000000中,可以看到末尾连续0有7个,根据公式:2^7-2=126。即划分的子网可容纳126台计算机。
- 子网增量是根据主机数和公式2^m来计算,即可得:该子网中的增量为128。
- 合法子网根据子网增量可得有:0,128。
- 根据合法子网,得,第一个子网范围为:193.10.10.0~193.10.10.127(其中193.10.10.0 和193.10.10.127不能用,因为排除全为1和全为0的主机号,但是是合法的);第二个子网范围为:193.10.10.128~193.10.10.255(其中193.10.10.128和193.10.10.255不能用,但是是合法的)。
下面例题参考:IP地址和子网划分
还可以根据公式来推出合适的子网掩码:
一个公司有530台电脑,组成一个对等局域网,子网掩码设多少最合适?
解:
- 看到530台,就只能分配B类网络的地址,但是B类网络可容纳6w多台计算机,太多了,需要进行划分子网,根据公式:2^m=530,可得m=10最合适,即子网掩码中后面连续0有10个,可得子网掩码二进制的表示:11111111.11111111.11111100.00000000,转为十进制:255.255.252.0。
将子网掩码和IP地址按位进行逻辑“与”运算,得到IP地址的网络地址(网络标识),剩下的部分就是主机地址,从而区分出任意IP地址中的网络地址和主机地址。根据网络标识是否相同来判断两个IP是属于同一个网段。
主机A的IP地址为193.10.10.6,子网掩码为255.255.255.128;主机B的IP地址为193.10.10.129,子网掩码为255.255.255.128,两台主机的IP地址是否属于同一个网段?
解:
对于主机A:
- 主机A的IP地址转为二进制:11000001.00001010.00001010.00000110
- 子网掩码转为二进制:11111111.11111111.11111111.10000000
- 两者进行逻辑“与”操作,得:11000001.00001010.00001010.00000000
- 将结果转为十进制:193.10.10.0,即网络标识:193.10.10.0
对于主机B:
- 主机A的IP地址转为二进制:11000001.00001010.00001010.10000001
- 子网掩码转为二进制:11111111.11111111.11111111.10000000
- 两者进行逻辑“与”操作,得:11000001.00001010.00001010.10000000
- 将结果转为十进制:193.10.10.128,即网络标识:193.10.10.128
主机A的网络标识跟主机B的网络标识不一样,说明不是属于同一个网段。
小技巧:对于子网掩码为255的段,直接把对应段的IP地址写下来,因为任何数和255进行逻辑“与”操作还是原数,所以子网掩码转二进制时转那些不是255的段就行。比如上面的,其实就判断第4段是否相同就行。
注意:判断两IP地址是否属于同一段不要单单看两IP地址前面的段是否相同,比如第一眼看上面例子的两个IP:193.10.10.6和193.10.10.129看起来好像是差不多的,但其实是完全属于两个网络内的ip地址。其实还有另一种方法,你也可以根据子网掩码计算出子网范围来判断是否属于同一个网段,比如子网掩码为255.255.255.128的主机号的数目为7,根据公式2^m求出子网增量,那么193.10.10.0到193.10.10.127都是属于同一个网段(其中主机号全为1和全为0不能用),而193.10.10.128到193.10.10.255是属于同一个网段的的(其中主机号全为1和全为0不能用)。结合上面第一个例子来看。
6.3 无分类编址CIDR
因为子网划分还是太复杂了,先要知道网络号在进行子网的划分,所以提出CIDR。
无分类编址CIDR:简称超网,CIDR中没有A、B、C类网络号和子网划分的概念。CIDR把网络前缀相同的IP地址称为一个“CIDR地址块”。对于网络前缀是任意位数的。现在通常是使用CIDR来规划我们的IP地址。
通常使用斜线记法来表示CIDR,比如193.10.10.129/25,斜杆后面的25表示它的网络前缀有25位,主机号有7位,那么它的子网掩码也是可以求出的,即前面有25个连续1和后面7个连续0,即子网掩码为11111111.11111111.11111111.10000000,转为十进制为255.255.255.128。
(图中的点分十进制是掩码点分十进制,不用记,向上面的例子,可以推的)
/8-/15只能用于A类网络,/16-/23可用于A类和B类网络,而/24-/30可用于A类、B类和C类网络。
子网掩码的使用和地址的计算都是跟前面一样的,还有特殊网络号和特殊的主机号也是一样的。
某公司拥有100名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?
像前面学习的分类,可知要分配C类的网络段给他们,但是C类的网络段可分配254台主机,这里只有100个人,还浪费了154个IP地址。而现在学了CIDR,只需要分配网络前缀25位,即/25,那么可分配的主机数为2^(32-25)-2=126台,仅浪费26个IP地址。
很多的例题可以请看看这篇
7. 内网和外网
IP地址还可分为内网IP地址和外网IP地址。
外网:也可叫做公网,也就是可以对外通信的,是在Internet使用的,是全球唯一的一个IP地址,仅分配给一个网络设备。即全球使用的IP地址。
内网:也可叫做私网,是内部机构所使用的,比如一个公司内部或者家庭内部,即局域网内。内部网络使用的IP地址。
参考:内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的,而内网的IP地址每个人的都不一样,Internet上的用户也无法直接访问到内网用户。简单来说呢,外网IP就是标示了您在整个互联网上的地址,就相当于小区的地址,而内网IP呢,就是标识着您在局域网里面的地址,也就是小区内的几栋几楼几号房子。
内网地址有3类:这三类就是上面IP地址分类中说的私有地址。
- 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(支持万数量级设备)
这时候就会有个疑问:内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的? 这就需要一个叫做网络地址转换NAT技术。
8. 网络地址转换NAT技术
百度百科:引入前先了解端口(port)号:可以认为是设备与外界通讯交流的出口,有两种:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等;二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。
反正端口号就是用来区分的,解决冲突的情况,比如:http://localhost:3000和http://localhost:4000是不一样的。这点在配置云服务器时部署多个网站就可以体现到。
网络地址转换NAT技术:Network Address Translation,用于让多个主机通过一个公有IP访问互联网的私有网络。
解释:
- 内网的地址,会自己带上端口号,当到达本地路由器时,路由会转成新的地址,即在公网IP添加一个新的端口号,然后记录在一张名为NA表中。跟前面了解的路由表,MAC表一样。
- 当外部想对内部网络通信时,也会将地址根据NAT表转为对应的内部网络地址。
NAT技术减缓了IP地址的消耗,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机,但是增加了网络通信的复杂度。不过带来的好处值得付出这代价。现在我们也是经常使用这个技术。
反正知道:内网中的主机们使用一个公网IP要跟外部网络通信时或者外部网络要跟内网中的主机通信时,借助NAT技术来完成通信。不需要理内网中主机的端口是什么,自动分配自动转换。
可以登录自己的路由器网站,来查看当前的NAT表。
划分子网那的例子中说为一个公司分配一个网段,每一百台设备都分别对应一个网络ip,那时候全分配的是外网地址。现在有了内网就可以直接给一个公司分配一个外网ip。这里说下,分配外网是要跟ISP申请的,如果要多个就要申请多个,而内网是不需要申请的。
百度百科:NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad:(了解)
- 另外两种看百度百科。
- 端口多路复用(Port address Translation,PAT) 是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation),采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式,也就是上面说的那个。
9. ICMP协议
ICMP协议:网际控制报文协议(Internet Control Message Protocal),用来报告错误信息或异常信息。
(ICMP协议是封装在IP数据报的数据里面的)
ICMP协议的组成:
在前面IP的构成图中,IP首部有一个8位协议,该协议就可以来放ICMP协议的。
ICMP有两个种类,分别为:差错报告报文和询问报文。
10. ICMP协议的应用
10.1 Ping应用(诊断工具)
当ping一个IP地址时,会发出ICMP的询问报文,类型值为0或8。比如:
其中:
- 字节就是IP报文的长度,已知首部至少有20个字节,那么剩下的12个字节就是IP数据报的数据,该数据指的ICMP的询问报文。
- 时间为往返时间。
- TTL为该报文在传输中的生存时间。
当我们自己的网络出现问题:
- 第一步可以ping回环地址127.0.0.1,如果得不到返回,则可能说明我们主机的协议栈出现问题,可能需要安装协议栈或者重装系统。
- 如果第一步ping通,那么进行第二步ping网关地址,即我们的路由器的地址,如果计算机处于内网,则路由器的地址可能为192.168.0.1或 192.168.1.1,不同品牌的路由器,默认的IP访问地址也是不一样的,想要知道正确的默认路由器地址就看路由器背面的文字地方,而且一般还允许用户修改默认地址。如果ping得通,说明本机到路由器的通路是没问题的,如果ping不同,那么网线连接或WIFI有问题。
- 如果第二步成功,则ping远端地址,比如ping www.baidu.com。如果ping得通说明没问题,否则自己的网络可能到ISP之间的网络有问题,需要联系ISP客服。
路由器的地址:上面说的192.168.0.1或192.168.1.1这些,大家都是一样的,为什么不会冲突,因为是内网啊,不会与外界有关系,路由器对外有一个地址,对内会自动分配IP地址,这个自动分配可以自己改成固定IP。
10.2 Traceroute应用(诊断工具)
Traceroute可以探查IP数据报在网络中走过的路径。
原理:像前面IP数据报中首部数据的TTL,当TTL=0时会被丢弃,这时就会发出ICMP终点不可达差错报文。会告诉发送方传输发生错误,发送方就可能需要重新发送报文。
所以Traceroute利用TTL和ICMP终点不可达差错报文来记录传输路径每一个设备的IP地址。比如主机A发送报文,第一次时,设置TTL为1,当到达第一个网络或者路由器时,TTL=0,则返回ICMP终点不可达差错报文,然后就记录IP地址;第二次时,将TTL增为2,当到达第二个网络或者路由器时,TTL=0,则返回ICMP终点不可达差错报文,然后就记录IP地址,以此类推,直到目的主机。这样就得出了传输路径。
在CMD中使用命令tracert并且跟上一个IP地址就可查看路径,查时间比较久。比如 tracert www.baidu.com。也可以使用该命令来跟踪我们自己路由IP地址,看看有没有错误。
额外:我自己tracert www.baidu.com,第二个ip地址居然是美国的??疑惑疑惑,可能是我pa过墙??
11. 路由
网络其实是可以看成是一张无向图,每个顶点表示一台计算机或路由器或一个网络,边就是他们的网络路径。那么像路由表的计算,路由如何选择最佳路径是根据图论的算法来计算的。不过实际上网络环境复杂,还得考虑其他因素,比如网络抖动,网线被破坏了等。
11.1 自治系统AS
因为网络环境非常复杂,所以也需要对互联网进行划分,提出了自治系统(Autonomous System ),是处于一个管理机构(公司,学校)控制之下的路由器和网络群组,有权自主地决定在本系统中应采用何种路由协议的小型单位。AS内部网络自行管理,对外部提供一个或者多个出(入)口。
AS也可以是一个国家,一个城市。前面了解的网络的层次:主干网,地区网这些也算是AS。
自治系统可以将互联网的路由选择协议分为两种:
- 自治系统内部路由的协议称为:内部网关协议(RIP、OSRF)
- 自治系统外部路由的协议称为:外部网关协议(BGP)
11.2 距离矢量(DV)算法
距离矢量算法的工作原理:每个路由器维护一张表(即一个矢量),表中列出了当前已知的到每个目标的最佳距离,以及所使用的链路。这些表通过邻居之间互相交换信息而不断被更新,最终每个路由器都了解到达每个目的地的最佳链路。
参考:每隔一段时间,路由器会向所有邻居结点发送它到每个目的结点的矢量表,同时它也接收每个邻居结点发来的矢量表。这样以此类推,经过一段时间后便可将网络中各路由器所获得的距离矢量信息在各路由器上统一起来,这样各路由器只需要查看这个距离矢量表就可以为不同来源分组找到一条最佳的路由。
距离矢量算法有时也被称为分布式Bellman-Ford路由算法(根据设计者来命名)。
每个路由中的矢量表,需要维护两个部分:
- 当前节点到别的节点的最小距离。
- 是当前节点到别的节点需要经过的第一个节点。
来看个例子:
能够理解上面的过程就行,并且记住在计算过程中各路由是异步计算的。
- 每个节点与相邻的节点交换矢量Di和Si的信息。
- 每个节点根据交换的信息更新自己的节点信息。
其实该表就是前面说的路由表。
11.3 内部网关路由协议RIP协议
RIP(Routing Information Protocal)协议,该协议的核心是利用DV算法。RIP协议把网络的**跳数(hop)**作为DV算法的度量单位。前面了解了网络中的数据是一跳一跳进行转播的(专业术语)。RIP协议每隔30s交换一次路由信息(即路由表),并且认为跳数>15的路由则为不可达路由。
RIP协议的过程:
- 路由器初始化路由信息(两个向量𝐷𝑖和S𝑖)
- 对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
- 检索本地路由,将信息中新的路由插入到路由表里面
- 检索本地路由,对于下一跳为X的,更新为修改后的信息
- 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
- 如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
对于第2步中的三小步的例子:
RIP的缺点:
RIP协议的实现简单,开销很小,但是也限制了网络的规模,比如跳数大于15的不管可不可达,都是算成不可达的,所以只能在规模较小的网络内使用。对于”坏消息“传递慢,更新收敛时间过长。
11.4 Dijkstra(迪杰斯特拉)算法
这个算法是图论中的算法。主要是解决有权图中从一个节点到其他节点的最短路径问题。
算法的过程:不理解等下看例子
- 初始化两个集合(S, U)(S表示已求出最短路径的顶点集合,S初始时只有起始顶点。U为其余未确定最短路径的顶点集合,若顶点与起点不是相邻先把距离设为无穷)
- 如果U不为空, 对U集合顶点进行距离的排序,并取出距离起始点最近的一个顶点D
- 将顶点D的纳入S集合
- 更新通过顶点D到达U集合所有点的距离(如果距离更小则更新,否则不更新)
- 重复2步骤
- 知道U集合为空,算法完成
例子:
11.5 链路状态(LS)协议
该协议需要记住以下三个特点。
- 向所有的路由器发送消息
-
消息描述该路由器与相邻路由器的链路状态。对比于RIP协议,RIP协议只能描述跳数。
-
只有链路状态发生变化时,才发送更新信息。对比于RIP协议,RIP协议每隔30s交换路由信息。
11.6 OSPF协议的过程
OSPF(Open Shortest Path First,开放最短路径优先):它的核心利用Dijkstra算法。LS协议定义规则,而OSPF协议则实现LS定义的规则。即LS协议三个特点都由OSPF协议实现的。
- 向所有的路由器发送消息。会获取网络中所有信息,每个路由器就可以得到”网络的完整拓扑“。”网络的完整拓扑“也称为”链路状态数据库“,保存的是网络中每一跳的链路状态是怎么样的。整个网络的”链路状态数据库“都是一致的,并且使用的是Dijkstra算法。
- 消息描述该路由器与相邻路由器的链路状态。比原来的RIP协议更加客观、先进。
- 只有链路状态发生变化时,才发送更新信息。减少了数据的交换,更快收敛。
OSPF协议的五种消息类型
- 问候消息(Hello):长度短,维护路由器与相邻路由器的可达性。
- 链路状态数据库描述信息:向相邻路由器发送自己的”链路状态数据库“。
- 链路状态请求信息:向相邻路由器请求”链路状态数据库“。
- 链路状态更新信息:因为网络状态是时时发送变化的,所以每个路由器有可能更新链路状态。经常使用。对于更新消息,路由器会广播到整个网络中。
- 链路状态确认信息:用于对链路更新的确认。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-noqzNp68-1582362854743)(D:/%E6%9C%89%E9%81%93%E4%BA%91%E6%9C%AC%E5%9C%B0%E5%AD%98%E6%94%BE/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%BD%91%E7%BB%9C%E5%B1%82/OSPF.png)]
11.7 外部网关路由协议BGP协议
BGP(Border Gateway Protocol,边际网关协议):BGP协议是运行在AS之间的一种协议。需要知道两点:
- BGP协议能够找到一条到达目的比较好的路由
- AS之间通过BGP发言人来进行路由信息的交换
因为AS内部使用不同的路由协议所以外部通信需要一个统一的协议。
BGP并不关心内部网络拓扑,AS之间通过BGP发言人(speaker)交流信息,BGP Speaker可以人为配置策略。配置策略可过滤一些敏感信息。比如中国与国外的网络。
结合到网络中的层次结构上:
12 总结
- IP协议的组成要懂,理解IP协议的转发流程。
- 理解ARP协议,了解RARP协议。
- IP地址的划分要懂。
- 了解内网和外网,并理解NAT技术。
- 了解ICMP协议的组成,知道它的作用。
- 了解ping和tracert命令。
- 路由知识是重点,主要理解掌握Dijkstra算法,RIP协议和OSPF协议的区别。知道BGP协议中的两点。
这篇关于软件开发速学计网:网络层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!