本章纲要
- 网络层的功能:
- (1)异构网络的互连
- (2)路由转发
- (3)拥塞控制
- 路由算法:
- (1)静态路由和动态路由
- (2)距离和向量算法
- (3)链路状态路由算法
- (4)层次路由
- IPv4:
- (1)分组
- (2)IPV4和NAT
- (3)子网划分和子网掩码
- (4)CIDR
- (5)路由聚集ARP协议
- (6)DHCP协议和ICMP协议
- IPv6:ipv6的特点,ipv6地址
- 路由协议:
- (1)自治系统
- (2)域内路由和域间路由
- (3)RIP路由
- (4)OSPF路由协议
- (5)BGP路由协议
- IP组播:组播的概念,IP组播地址
- 移动IP:移动IP的概念,移动IP通信
- 网络层设备:
- (1)路由器的组成和功能
- (2)路由表和路由转发
关键:重点关注到IPV4和路由的知识,对于ip组播,移动ip,ipv6也要了解。
1. 网络层的功能
1.1 异构网络互联
世界上有千千万万的网络,我们能够使得这些网络能够通信,我们需要解决很多问题:不同的设备的寻址方案,不同网络的节如方案,不同的差错处理的方法,不同的路由选择机制,因此,我们需要中继的设备:
- 物理层的中继系统:中继器,集线器(Hub)
- 链路层的中继系统:网桥和交换机
- 网络层的中继系统:路由器
- 网络层以上的中继系统:网关
在链路层和物理层的时候我们仅仅是在把网络扩大了,我们并不看作是网络互联,路由器相当于一台计算机。
TCP/IP体系在网络互联上采用的做法是在网络层(IP层)采用标准化协议,也就是说在一个网络体系里我们的每一台设备都使用IP进行通信,我们看不到网络异构下的编址方案和路由选择协议。
1.2 路由和转发
路由器主要完成两个功能:
【1】路由选择(确定是哪一条路径)
【2】分组转发(根据路由转发表把用户的IP数据报从合适的端口发出去)
- 路由表:根据路由选择算法得到。
- 转发表:由路由表得到的。
我们在讨论路由选择原理的时候就不去区分哪个是转发表和路由表了。
1.3 拥塞控制
当带宽越接近满载的时候,导致的时延会有指数型的增长。
(R为满载的带宽)
我们可以通过观察网络的吞吐量来进行判断是否拥塞。(假如网络的吞吐量变成了0的话,网络可能变成了死锁状态)
流量控制和拥塞控制的区别:流量控制的是发送端的数据的速率。而拥塞控制控制的是确保子网能传输数据,是全局性的。
拥塞控制的方法:
- 开环控制:静态预防,在设计网络的时候就确定好各种意外的发生,做拥塞控制决定的时候无需考虑当前的网络状态。
- 闭环控制:动态预防。利用检测网络监视,然后把拥塞的信息传输到合适的地方。
2. 路由算法
所谓的路由算法就是我们的分组数据通过路由表来进行转发的,我们的路由表是怎样得到的呢?就是通过路由算法得到的。
静态路由算法:就是转发表是人为确定的,静态的转发表。
动态路由算法:每一个路由器上的路由表通过互联的路由器之间彼此交换信息然后得到结果优化出来的。常用的动态路由算法:距离向量和链路状态。
2.1 距离向量路由算法
典型:RIP协议
每一个路由选择表里面包含每一条路径到达目的地的代价(距离)。
我们计算距离会抽象化,在RIP协议里面,距离是跳数。就是到达目的端口需要经过的路由的个数。
2.2 链路状态路由算法
典型:OSPF协议
每一个参与这个网络的节点都有完整的网络拓扑信息。首先,主动测试所有直接相邻节点的状态,然后定期把链路状态传播给其他的节点。
然后利用Dijsktra算法得到源地址到达目的地址的最短路径。
关于Dijsktra 算法讲解参见我的:用Dijsktra算法解决某点到其他顶点最短距离的问题
我们所说的链路状态:费用,距离,时延,带宽。
向本自治:所有的路由器都获取他自己相邻之间的边的信息,然后广播出去。
链路状态算法可以便于排查故障,而且更有可伸展性。
2.3 层次路由
像我们上面所提到的路由选择算法使用的协议(例如RIP和OSPF)我们管叫:内部网关协议(IGP),也叫做域内路由选择。
但万一两个自治系统需要通信的时候,我们就需要到外部网关协议(EGP)。
这个外部的协议负责的是两个自治系统区域之间的通信,此时,我们的节点就是一个自治系统了。这样你就可以理解为什么叫做层次了吧。
典型的层次路由协议有:BGP
3. IPV4
3.1 IP数据报的格式
我们先看下IPV4分组数据的格式:
我们看首部的格式:(二维的角度去看)
- 版本:就是IP协议的版本
- 首部长度:长度以(4Byte)作为单位
- 总长度:指首部+数据,长度以(1Byte)作为单位
- 标识:是一个计数字段,假如我们的IP数据报要分段的时候使用
- 标志:是一个控制字段,控制允许和不允许分片
- 片偏移:数据报分片的时候的偏移量,用(8Byte)作为单位
- 首部校验和:仅仅校验首部部分
- 生存时间:表示分组的寿命,我们是不允许一个分组在网络里面永远存在的,一旦寿命耗尽就会丢弃。
- 协议:指出分组携带的数据是哪一种协议的是TCP还是UDP。6表示TCP,17表示UDP
- 源地址和目的地址都是IP地址
虽然上面的IP数据报的格式我们不需要记住,但是我们需要熟悉每一个字段的功能,并且需要记住长度的基本单位,因为会考到长度之间的换算和加减。
注意!我们需要区分哪一种的长度和偏移所使用的单位的大小,首部长度是4B,总长度是1B,偏移用的是8B。
IP数据报的分片
在链路层里,我们最大的传送单元叫做MTU,因此,我们的IP数据报受到MTU的限制,以太网的MTU限制为1500B,当我们的IP数据报太大的时候就需要分片。
我们需要到三个工具:标识,标志(Flag用来控制),偏移字段来完成对片的重组
当我们的IP数据报创建的时候,就会带有一个原始的标识,以后我们对数据报进行分片的时候,每一个数据报的片都带有原始的标识。
目的机器就会根据每一个数据报的标识对数据报进行重组。
标志位用来控制是否允许切片,有两个位(Bit)有意义,MF位用来告知目的机器当前数据报是否是最后一个片。DF = 0 那么代表这个数据报是允许被分片的。
偏移字段用来确定分片的顺序。注意,他的单位是8B。
看下面分片的例子:
分组转发的过程:路由器从IP数据报的首部找到目的主机的IP地址,然后计算得到目的网络地址,假如目的网络地址的机器直接和他相连的话,那么直接转发交付,否则转发到有目的网络地址的下一跳路由器,循环这个步骤。
我们在得到IP地址之后,我们会将IP地址转化得到的MAC地址重新放入到MAC帧首部中。但IP地址是不变的,我们转发的时候不改变IP目的地址,但会改变源IP地址。
但如果是网桥转发帧不改变IP源地址。
就好比车票我们的目的地(目的的IP地址)是不变的,然后我们每到一个站的时候就在车票上标注一下下一个站去哪里(MAC)。
3.2 IP地址分类和NAT(网络地址转换)
IP地址的分类:IP地址分为ABCDE五类。
无论哪一类的IP地址都可以分为:网络号+主机号。
网络号标志的是主机所在的唯一网络标识,主机号是在当前的网络范围内唯一的
我们利用前缀来标识IP地址的类别:
上面的表分布的是以二进制位作为分割的,我们平常更多见到的IP地址是:——.——.——.——
为了方便我们自己理解,把#作为网络号,$作为主机号。
- A类:(1-126)#.$.$.$
- B类:(128-191)#.#.$.$
- C类:(192-223)#.#.#.$
- D类:(224-239)用于多播
- E类:(240-255)保留的IP地址
需要注意的一些特别的IP地址:
- 主机号全是0代表网络本身,比如:C类的202.98.174.0
- 主机号全是1代表该网络号下的广播地址,意思就是就是网络上的所有的主机,比如:202.98.174.255。发到这个地址就是全部人都收到。
- 网络号的首段为127的代表改主机本身,用于环路自检。
- 0.0.0.0代表网络本主机
- 255.255.255.255 代表在整个TCP、IP网络的广播地址
我们更多关注的是ABC三类地址。
(下面的表格需要记住!!!!)
类别 | 最大可用的网络数 | 每个网络中最大的主机数 | 网络号可用范围[min,max] |
---|---|---|---|
A | 2 7 − 2 2^7-2 27−2 | 2 24 − 2 2^{24}-2 224−2 | 1 → \rightarrow → 126 |
B | 2 14 − 1 2^{14}-1 214−1 | 2 16 − 2 2^{16}-2 216−2 | 128.1 → \rightarrow → 191.255 |
C | 2 21 − 1 2^{21}-1 221−1 | 2 8 − 2 2^{8}-2 28−2 | 192.0.1 → \rightarrow → 223.255.255 |
-
为什么A类要减2?因为第一个排除掉网络段全0和127的回环测试地址。
-
为什么B类和C类要减1?因为128.0和19.0.0不可指派
转发器和网桥连接起来的LAN的话仍然属于通过一个广播域,因此,他们的网络号一样,主机号不一样。
路由器总是有两个或者两个以上的IP地址(因为IP地址是分配到端口的,至少有一个出的端口和一个进的端口)
NAT网络地址转换:
内网和公网的转换,NAT技术就使得IP地址的损耗变小了。
我们思考一下,我们如何在只有一个IP公有地址的时候允许四台主机同时连上公有的网络呢?
所谓连上公有的网络的意思是我们的主机在网络上作为一个可以被探知到的实体存在。
我们把这个公有的地址接入到我们的路由器,我们的路由器具有NAT转换表,如下,有如下的映射:
那么从我们的局域网内的某台主机的2233端口发出的信息:192.168.0.2:2233就会映射到上一级公共网络的:138.76.29.7:5001端口发出,我们在公共网络层看到的138.76.39.7是一台主机,但是实际上他背负着多台私有局域网主机的转发人。
我们分配私有局域网地址的时候,只能用下面的网段:
- A类(1个网段):10.0.0.0 → \rightarrow → 10.255.255.255
- B类(16个网段):172.16.0.0 → \rightarrow → 172.31.255.255
- C类(256个网段):192.168.0.0 → \rightarrow → 192.168.255.255
我们现在可以设想一个真实的过程:我在宿舍的IP是:172.18.92.244,这是一个典型的B类私有IP地址,这个私有的IP是学校内校园网内分配的IP,因此我所在的是校园网内的局域网,假如我的信息需要发送到不在校园网内的服务器,比如访问百度的服务器:14.215.177.39
假如我们运营商的公网IP是:125.88.24.83
那么我的信息分组会发送到我们运营商的NAT路由器上,他就会通过NAT转发表里面的这个映射记录发送给出去:
WAN | LAN |
---|---|
125.88.24.83:5001 | 172.18.92.244:2233 |
那么当前我这条请求信息在公网上被临时映射的公网IP端口地址就是:125.88.24.83:5001。
虽然当前我有一台主机,但是在公网上我是仅仅被认可为一条消息实体的存在,是一个转瞬即逝的存在,可能下一次在学校我换了一个上网地方被动态分配到的校园网局域网IP不一样的时候,那么我在NAT上映射的出口就不一样了。
以上的过程:
上网主机 → \rightarrow → …[局域网内多个网段的路由转发]… → \rightarrow → 有入户IP的的主机(学校的校园网网关路由器) → \rightarrow → …[局域网内多个网段的路由转发]… → \rightarrow →运营商的公网IP → \rightarrow → 目的的公网IP
入户IP是二级运营商IP,运营商做二次的NAT的IP的地址。是公网IP的保留段。
我们家里真实的上网的时候转发情况:
上网主机 → \rightarrow → …[局域网内多个网段的路由转发]… → \rightarrow → 有入户IP的100.64.x.x的主机(比如你家里的路由器) → \rightarrow → …[局域网内多个网段的路由转发]… → \rightarrow →运营商的公网IP → \rightarrow → 目的的公网IP
更多请看:NAT网络地址转换实践
我们可以总结一下,出现NAT的地方:私有地址转公有地址 的地方,比如,我们的主机转到入户IP的地方,这里发生了一次的NAT,我们从入户地址转到运营商公网IP的地方,这里发生了二次的NAT。
这就是我们常说的所谓的二次NAT。
3.3 子网划分和超网合并
划分子网详解可以参考:子网划分详解
超网合并详解可以参考:超网合并CIDR详解
子网掩码:
子网掩码的作用是用来进行子网划分和超网合并的。我们使用子网掩码能够得到当前子网、超网的真实网络号。
使用方法很简单:以二进制形式和源IP地址的二进制形式进行逐位AND运算。
我们简便的标识IP+掩码的方法:
- A类源:x.x.x.x/8
- B类源:x.x.x.x/16
- C类源:x.x.x.x/24
3.3.1 子网划分
IPv4地址如果只使用有类(A、B、C类)来划分,会造成大量的浪费或者不够用,为了解决这个问题,可以在有类网络的基础上,通过对IP地址的主机号进行再划分,把一部分划入网络号,就能划分各种类型大小的网络了。
子网划分的原理:
例子:
①、等分为两个子网
将192.168.0.0 255.255.255.0这个网络等分成2个子网,并写出每个子网的地址信息?
分析:
该网络子网掩码为/24,要划分为2个子网,要借用主机位1位作为子网位。
因为二进制数0和1按一位排列组合,只有这2种,分别为:0,1,如下图所示。
0是A子网,1是B子网
借用主机1位,所以子网掩码+1位,由原来的255.255.255.0 (/24)变为255.255.255.128(/25)
结论:C类网络等分成2个子网,子网掩码往右移动1位,就能等分成2个子网,即2^1。
最终结果:
A子网的网络地址:192.168.0.0/25,可用地址(192.168.0.1~192.168.0.126),广播地址:192.168.0.127。
B子网的网络地址:192.168.0.128/25,可用地址(192.168.0.129~192.168.0.254),广播地址:192.168.0.255。
②、等分为四个子网
同样将192.168.0.0 255.255.255.0 这个网络等分成4个子网
分析:要想分成4个子网,需要将子网掩码往右移动两位
这样第1位和第2位就变为网络位,就可以分成4个子网
因为二进制数0和1按两位排列组合,只有这4种,分别为:00,01,10,11,如下图所示。
00是A子网
01是B子网
10是C子网
11是D子网
借用主机2位,所以子网掩码+2位,由原来的255.255.255.0 (/24)变为255.255.255.192 (/26)
结论:C类网络等分成4个子网,子网掩码往右移动2位,就能等分成4个子网,即2^2。
最终结果:
A子网的网络地址:192.168.0.0/26,可用地址(192.168.0.1~192.168.0.62),广播地址:192.168.0.63/26。
B子网的网络地址:192.168.0.64/26,可用地址(192.168.65~192.168.0.126),广播地址:192.168.0.127。
C子网的网络地址:192.168.0.128/26,可用地址(192.168.129~192.168.0.190),广播地址:192.168.0.191。
D子网的网络地址:192.168.0.192/26,可用地址(192.168.193/26~192.168.0.254),广播地址:192.168.0.255。
3.3.2 超网合并
超网,也称无类别域间路由选择(CIDR),它是集合多个同类互联网地址的一种方法。与子网划分(把大网络分成若干小网络)相反,它是把一些小网络组合成一个大网络,就是超网。
判断一个网段是超网还是子网:
如果该网段的子网掩码比默认子网掩码长,就是子网,如果该网段的子网掩码比默认子网掩码短,则是超网。
合并超网的例子:
示例:某企业有一个网段,该网段有200台主机,使用192.168.0.0 255.255.255.0网段。
后来计算机数量增加到400台,为后来增加的200台主机使用192.168.1.0 255.255.255.0网段,如下图:
在路由器配置了192.168.0.1的IP地址接口,再添加192.168.1.1地址后,这样192.168.0.0和192.168.1.0这两个网段内的主机就通过路由器转发来实现通信了。
那么有没有更好的办法,让这两个C类网段的计算机认为在一个网段?
这就需要将192.168.0.0/24和192.168.1.0/24 两个C类网络合并。
网段合并:子网掩码向前移动1位,使得网络部分保持前部分相同。
注:子网掩码往左移1位,能够合并2个连续的网段,但不是任何连续的网段都能合并。
合并网段之后,如下图,这样所有主机相互通信就不再经过路由器转发了。
①、合并之后网段为:192.168.0.0/23,IP分配如下图:
②、合并之后IP地址192.168.0.255/23也是可以给计算机使用的,因为主机部分往左增加了一位0(并不是全1),如下图:
3.4 ARP,DHCP,ICMP
3.4.1 地址解析协议 ARP
首先我们在链路层上是看不到IP地址的,我们利用的是MAC地址进行广播的,在网络层我们用的是IP地址经广播。
ARP协议在网络层工作,他所完成的工作是IP地址到MAC地址的映射。
工作流程:当A向B要发送一个IP数据报的时候,就会预先在ARP缓存里面看有没有B主机的IP地址,如果有的话就查出他的硬件地址,并且发送给B。假如没有的话, 就会用FF-FF-FF-FF-FF-FF的MAC地址进行广播ARP请求分组,局域网内所有的主机都能知道这个ARP请求了,如果是B接收到了,那么就会向A发出ARP分组,这个分组数据包含了他的IP和MAC地址的映射,A就会把这个MAC地址写进自己的ARP缓存里面。
ARP协议因为他只看到了IP地址,因此他是工作在网络层的,但是NAT路由器看到了端口号,因此他工作在传输层。
我们也要考虑这样一种情况:如果ARP广播之后,不存在这个IP的主机呢?
我们将会转发给某个路由器,然后这个路由器再发送ARP广播,问他所连接的主机和路由器,如此类推,直到到达为止。
3.4.2 动态主机配置协议 DHCP
DHCP工作在应用层,他是基于UDP的。作用是动态给主机分配IP地址。
需要IP地址的主机在启动的时候向DHCP服务器申请,申请的时候用的是广播机制,也就是所有的网络主机都能听到,但是只有DHCP才能应答。
DHCP提供的应答信息里面包含了客户机的IP地址和相关配置。
DHCP 分配出动态IP的这段时间叫做租用期
我们在一开始广播的时候因为不知道的IP地址,因此我们使用的是UDP的连接方式。
3.4.3 网际控制报文协议 ICMP
ICMP是工作在网络层的协议。他的作用是报告一些主机和路由器异常的问题。
ICMP 最常见的两个应用就是:Ping和tracert
PING命令工作在应用层,直接使用网络层的ICMP协议,没有用TCP和UDP,可以测试两个主机在IP层的连通性。TRACERT工作在网络层,用来测试ICMP的超时
ICMP的差错报告报文包括:
- 终点不可到达:当路由器不能交付成功的时候
- 源点抑制:当路由器因为拥塞而丢失了数据报的时候
- 时间超过:超过了TTL的生存时间
- 参数问题:数据报的头部不正确的时候
- 改变路由:发现更好的路由
我们不能向特殊地址发送ICMP差错报文
4. IPV6
由于IPV4地址数量的稀缺,我们能采取的措施:采用CIDR的超网,采用多分级的NAT,还有就是采用IPV6
- v4的地址是32位,v6的地址是128位。
- v6地址和v4地址不能兼容。
- v6不允许分片,但v4可以
- 更加安全
我们可以使用双协议栈和隧道技术对v4和v6进行兼容。
双协议就是一部分主机装有两个协议,然后使用这些主机进行转换。
隧道技术就是把v6的数据报重新封装为v4的数据报
5. 路由协议
AS:自治系统,也就是使用路由间的选择是域内路由选择的。
5.1 域内路由和域间路由
我们之前提到过内部网关协议(IGP)和外部网关协议(EGP)的区别。
内部网关协议的路由选择协议无非就是RIP和OSPF这两种。
外部网关协议就是当目的站点和源站点分别在两个不同的域内的时候,我们就需要到EGP了,比较典型的是BGP(边界网关协议)。
5.1.1 RIP 路由协议
距离向量路由选择协议。比OSPF简单。
- 他规定每一个域内路由维护一个表包含他自己到达每一个目的地的距离记录。
- 距离用跳数进行衡量
- RIP只允许每一条路径最多15个路由器,因此RIP 仅适用于小的互联网。如果是跳数等于16则默认不可到达。
- 每30秒进行广播一次RIP路由更新信息
- RIP2才支持子网掩码和CIDR
- 仅和自己相邻的路由器交换信息,过程:一开始的广播他只能知道他相邻的路由器的路由表的信息,第二次广播的时候就能知道相邻的相邻的路由的路由表信息,若干次广播之后,就收敛了,这样一来每一个路由都知道了整个网络的路由表的信息。
- RIP是应用层协议,他使用的是UDP进行传送数据(端口520)
- RIP选择的不一定是时间最短的路径,但是一定是经过路由器最少的路径。
5.1.2 OSPF 路由协议
OSPF的全称是 开放最短路径优先协议,分布式链路状态路由算法的典型代表。
- 路由器是向在本网络里面所有的路由器进行发送信息广播,而不是单单和自己相邻的路由器交换(RIP只和相邻的交换)
- 发送信息包括自己和相邻的路由器的链路状态信息。RIP交换的是该路由知道的全部信息
- RIP是定时广播更新,OSPF是只有当链路状态变化的时候才进行广播更新。因此不会因为网络出现故障而导致更新缓慢的问题。
- OSPF是网络层协议,因此他使用的直接用IP数据报进行传送。
- OSPF支持子网划分和CIDR
- OSPF能做多条路径的负载均衡
- 对于链路状态而言,序号越大状态越新
对于某路由他只知道下一跳路由的代价,不会存储完整的路径。
UDP传送:把该信息作为UDP报文的数据部分。IP数据报传送:把该信息作为IP数据报的数据部分
5.1.3 BGP 路由协议(域间路由协议)
BGP 叫做边界网关协议,属于外部网关协议,
- BGP是应用层的协议,基于TCP的
- BGP也是路径-向量路由选择,RIP是距离向量的路由选择
路由协议比较:
RIP | OSPF | BGP | |
---|---|---|---|
类型 | 内部 | 内部 | 外部 |
路由算法 | 距离-向量 | 链路状态 | 路径向量 |
选择偏向 | 跳数最少 | 代价最少 | 较好,非最佳 |
传送 | UDP报文 | IP报文 | TCP报文 |
工作在 | 应用层 | 网络层 | 应用层 |
交换节点 | 和本节点相邻的 | 网络中的全部 | 和本节点相邻的 |
交换内容 | 相邻路由知道的全部信息(整个路由表) | 交换路由相邻的路由的链路状态 | 首次交换整个路由表,之后交换的是有变化的部分 |
6. 其他技术
6.1 IP组播
- 单播:一对一通信
- 多播(组播):一对多通信
为什么我们需要使用组播?
因为我们想利用一次发送就完成多次重复信息的发送,这样就能节省很多资源,组播是应用在UDP的,TCP是建立在建立连接的基础上的,因此是一对一的发送的。
IP组播使用的是D类IP地址,D类每一个IP地址标志一个组播组
主机使用IGMP(网络组管理协议)加入到组播组
- 组播使用最尽最大努力交付,不可靠
- 组播数据报不会产生ICMP差错报文,因此我们用PING组播组的地址永远不会有回应
- 并非所有的D类地址都能作为组播地址
- IGMP协议用来管理组播组
- IGMP作为的是TCP\IP协议的一部分。
6.2 移动IP
所谓移动IP目的是为了解决:当一台主机从一个网段转移到其他网段而不改变他自己IP地址
可以理解为IP地址漫游
移动节点:具有永久IP地址的移动节点a
移动IP的通信过程:
【1】在本地网的时候使用传统的TCP\IP方式进行通信
【2】当漫游到一个外地网络的时候,移动节点需要向本地代理注册当前的位置地址,本地代理接收到转交地址的注册之后就会建立一条转交地址的隧道,并且将发送到移动节点的IP分组转交到转交地址处
我们的VPN技术在一定程度上用到了移动IP的技术
7. 网络层设备
7.1 路由器
路由器实现的功能分为:路由选择和分组转发两部分,实现了:物理层,数据链路层和网络层。
网桥和高层协议无关,路由器是面向协议的。