「计算机网络」课程笔记 —— 网络层
网络层
网络层负责从源主机到目的主机之间单独分组的传输。
网络层上的通信是端到端的,网络层的头部包含了发送方和目的方之间的逻辑地址,需要寻址系统来识别源与目的地址
逻辑寻址
IPv4 地址
-
分类寻址
分类寻址由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
$$
IP地址 = <网络号>,<主机号>
$$
-
子网划分
通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。注意,外部网络看不到子网的存在。
$$
IP地址 = <网络号>,<子网号>,<主机号>
$$
要使用子网,必须配置子网掩码。例如:一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
-
无类寻址 CIDR (Classless Inter-Domain Routing)
无类别域间路由 Classless Inter-Domain Routing
CIDR 用 13-27 位长的前缀 取代了原来地址结构对地址网络部分的限制(3类地址的网络部分分别被限制为8位、16位和24位)。在管理员能分配的地址块中,主机数量范围是 32-500,000,从而能更好地满足机构对地址的特殊需求。
CIDR 地址中包含标准的 32 位 IP 地址和有关网络前缀位数的信息。以 CIDR 地址 222.80.18.18/25 为例,其中 “/25” 表示其前面地址中的前25位代表网络部分,其余位代表主机部分。
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
-
特殊的 IPv4 地址
- 本地地址
10.x.x.x,172.16.x.x至172.31.x.x 和192.168.x.x供本地网使用,这些网络连到互连网上需要对这些本地网地址进行转换(NAT)
-
广播地址
-
有限广播地址
32 位全一的IP地址 (255.255.255.255) 叫做有限广播地址,用于本网广播。如果采用标准的IP编址,那么有限广播将被限制在本网络中,如果采用子网编址,那么有限广播将被限制在本子网中。
-
直接广播地址
直接广播地址包含一个有效的网络号,和一个全 1 的主机号,其作用是因特网上的主机向其他网络广播信息
- 回送地址
回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回之,不进行任何网络传输。
- 网络地址
网络地址包含一个有效的网络号,和一个全 “0” 的主机号,用来表示一个具体的网络。例如,一个具有IP地址为 202.93.120.44 的主机所处的网络为 202.93.120.0 , 主机号是 44。
网络地址转换 NAT (Network Address Translation )
专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。
-
使用一对一 IP 地址
为每个用户分配一个单一且固定的本地 IP 地址和全球 IP 地址
-
IP 地址池
-
网络地址与端口转换 NAPT
NAT 转换表把运输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址
IPv6 地址表示
IPv6地址为128位长,但通常写作8组,每组为四个十六进制数的形式。例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344
是一个合法的IPv6地址。
-
0 位压缩
如果四个数字都是零,可以被省略。例如:
2001:0db8:85a3:0000:1319:8a2e:0370:7344
等价于2001:0db8:85a3::1319:8a2e:0370:7344
-
双冒号压缩
遵从这些规则,如果因为省略而出现了两个以上的冒号的话,可以压缩为一个,但这种零压缩在地址中只能出现一次。因此:
2001:0DB8:0000:0000:0000:0000:1428:57ab 2001:0DB8:0000:0000:0000::1428:57ab 2001:0DB8:0:0:0:0:1428:57ab 2001:0DB8:0::0:1428:57ab 2001:0DB8::1428:57ab
都是合法的地址,并且他们是等价的。但
2001::25de::cade
是非法的。(因为这样会使得搞不清楚每个压缩中有几个全零的分组)。同时 前导的零可以省略,因此:2001:0DB8:02de::0e13
等价于2001:DB8:2de::e13
如果这个地址实际上是IPv4的地址,后32位可以用10进制数表示;因此:ffff:192.168.89.9
等价于::ffff:c0a8:5909
, 但不等价于::192.168.89.9
和::c0a8:5909
。 -
IPv4 的表示
ffff:1.2.3.4格式叫做IPv4映像地址,是不建议使用的。而::1.2.3.4格式叫做IPv4一致地址。
IPv4 地址可以很容易的转化为IPv6格式。举例来说,如果IPv4的一个地址为135.75.43.52(十六进制为0x874B2B34),它可以被转化为0000:0000:0000:0000:0000:0000:874B:2B34或者::874B:2B34。同时,还可以使用混合符号(IPv4-compatible address),则地址可以为::135.75.43.52。
IP协议
IP 数据报(datagram)的格式
在 TCP/IP 标准中,各种数据格式通常以 32位 (4字节)为单位进行描述
-
版本 : 有 4(IPv4)和 6(IPv6)两个值;
-
首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,有多少行 也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
-
区分服务 : 用来获得更好的服务,一般情况下不使用。
-
总长度 : 包括首部长度和数据部分长度,单位为字节。
数据报的最大长度为: $2^{16}-1 = 65535$ 字节 (64KB),但实际使用的最大长度很少超过 1500 字节,当数据报的总长度超过了 MTU 值的时候,必须进行分片
-
生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
-
协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
-
首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
计算 IP 首部检验和的算法如下:
- 把IP数据包的校验和字段置为0;
- 把首部看成以16位为单位的数字组成,依次进行二进制求和(注意:求和时应将最高位的进位保存,所以加法应采用32位加法)
- 将上述加法过程中产生的进位(最高位的进位)加到低16位(采用32位加法时,即为将高16位与低16位相加,之后还要把该次加法最高位产生的进位加到低16位)
- 将上述的和取反,即得到校验和。
与分段有关的字段
-
标识 : 这是一个计数器,在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。最后组装成原来的数据报
给分段再分段之后,此标识仍相同
-
标志:占 3 bit,目前只有前两个比特有意义
- 标志最低位为 MF (More Fragment) MF=1 表示后面 还有分片
- 标志字段中间的一位为 DF (Don't Fragment) 表示 不允许分片
- 片偏移 : 和标识符一起,用于发生分片的情况。表示该片在原分组中的相对位置。片偏移的单位为 8 字节。
最大传输单元 MTU
MTU 的值取决于物理网络协议,IPv4数据报的最大长度等于最大传输单元,其目前定义值是 65535 字节,根据物理网络的不同,其 MTU 值不同程度的减小,以太网的 MTU 为 1500
IPv4 到 IPv6 的过渡
- 双协议栈
- 隧道技术
- 头部转换
IP 地址与物理地址
物理地址(MAC 地址)是数据链路层和物理层使用的地址,IP 地址是网络层和以上层使用的地址,是一种逻辑地址
IP 地址放在 IP 数据报的首部,而物理地址则放在 MAC 帧的首部,数据链路层看不到 IP 地址,在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
从逻辑到物理:地址解析协议 ARP(Address Resolution Protocol)
ARP 用于解决 同一个局域网内 主机或路由器的 IP 地址和物理地址的映射问题
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
ARP 分组格式:
从物理到逻辑
反向地址解析协议 RARP
创建一个 RARP 请求,并在本地网络上广播。在本地网络上知道所有IP地址的另一个机器就用 RARP 回答来响应。
引导程序协议 BOOTP
BOOTP报文被封装在UDP分组中, UDP分组本身被封装在IP分组中。可以使用中继代理
动态配置协议 DHCP
从地址池中分配一个 IP 地址,并添加到动态数据库中
IP协议的其他功能
网际控制报文协议 ICMP (Internet Control Message Protocol)
ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
ICMP 报文的种类:差错报告报文、ICMP 询问报文
应用:
- 分组间探测 PING 用来测试两个主机之间的连通性
- Traceroute 踪一个分组从源点到终点的路径
IP 数据报的转发
将分组路由到它的目的端的方法:转发
转发技术 (简化路由表的方法)
-
下一跳方法与路由方法
-
特定网络方法与特定主机方法
-
默认方法
默认路由 用网络前缀 0.0.0.0/0 来表示
路由表
掩码 | 网络地址 | 下一跳地址 | 接口 |
---|---|---|---|
内部网关协议 (Interior Gateway Protocol ,IGP)
在一个自治系统内部使用的路由选择协议
自治系统 (AS): 在单一的技术管理下的一组路由器,表现一个单一的和一致的路由选择策略
路由信息协议 RIP (Routing Information Protocol)
RIP 是一种基于距离向量的路由选择协议
距离是指跳数,直接相连的路由器跳数为 1,跳数最多为 15,超过 15 表示不可达
RIP 按固定的时间间隔 仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
- 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;
- 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
- 否则:若原路由表中下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目(信任最新消息);否则:
- 若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新)(信任最短路径);否则什么也不做。
- 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。
RIP协议使用运输层的 UDP 进行传送,端口 80
开放最短路径优先 OSPF (Open Shortest Path First)
OSPF 具有以下特点:
-
向本自治系统中的 所有路由器发送信息,这种方法是 洪泛法。
OSPF 使用 可靠洪泛, 收到更新分组后要向上游确认(确认不洪泛)
-
发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。基于不同的服务类型有不同的度量,有不同的路由表
- 当链路状态发生变化时,路由器发送信息。周期性的洪泛状态信息在 30min 以上
所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
OSPF 直接使用 IP 数据报传送,其 IP 数据报收不的协议字段值为 89
OSPF 的优点:
- 对不同的业务类型可计算使用不同的路由
- 允许多路径间的负载平衡
- 路由器之间交换的分组具有鉴别功能
外部网关协议
边界网关协议 BGP (Border Gateway Protocol)
BGP 采用 路径向量 路由选择算法, 只能寻找一条比较好的路由,而不是最佳路由。
每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。每个 BGP发言人还必须运行该 AS 所使用的内部网关协议
多播
多播数据报采用 D 类 IP 地址作为目的地址,多播地址只能用于目的地址,不能用于源地址, 若 PING 多播地址,永远得不到响应
多播需要的两种协议
- 网际组管理协议 IGMP
- 多播路由选择协议
_(:3 」∠)_