网络层与数据链路层协议

网络层用来处理在网络上流动的数据包(数据包:网络上传输的最小数据单位)。网络层规定在众多选项中通过怎样的路径(传输线路)到达对方的计算机,把数据包传输给对方。

该层中最突出的协议是 Internet Protocol(IP),因此该层也称为 IP 层。IP 的核心是两个主要功能:地址路由

IP 协议是 TCP / IP 协议的核心,所有的 TCP、UDP、IMCP、IGMP 的数据都以 IP 数据格式传输。要注意的是,IP 不是可靠的协议,这是指 IP 协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP 或 UDP 要做的事情。

网络层功能:

  • IP 寻址
  • 选路
  • 封装打包
  • 分片

数据链路层功能:

  • 逻辑链路控制
  • 媒体访问控制
  • 封装链路层帧
  • MAC 寻址
  • 差错检测与处理
  • 定义物理层标准

IPv4 分类地址

在数据链路层中我们一般通过 MAC 地址来识别不同的节点,而在 IP 层我们也要有一个类似的地址标识,这就是 IP 地址。

32 位 IP 地址(IPv4 地址的点分十进制表示)分为网络位和地址位,这样做可以减少路由器中路由表记录的数目,有了网络地址,就可以限定拥有相同网络地址的终端都在同一个范围内,那么路由表只需要维护一条这个网络地址的方向,就可以找到相应的这些终端了。

当互联网规律很小时,类别信息被编码进 IP 地址:

IP 地址类别首字节网络号 Bit 数主机号 Bit 数理论地址范围预期用途
A 类地址0xxx xxxx8241.0.0.0 ~ 126.255.255.255特大网络的单播传输
B 类地址10xx xxxx1616128.0.0.0 ~ 191.255.255.255数千台中大型网络的单播传输
C 类地址110x xxxx248192.0.0.0 ~ 223.255.255.255250 台主机以下小型网络的单播传输
D 类地址1110 xxxxn/an/a224.0.0.0 ~ 239.255.255.255IP 多播
E 类地址1111 xxxxn/an/a240.0.0.0 ~ 255.255.255.255预留实验用

CIDR 子网掩码

无类别域间路由(Classless Inter-Domain Routing,CIDR)是一个用于给用户分配 IP 地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。

表示方法:A.B.C.D/N(N 的范围 [0, 32]

链路层 MAC 地址

  • 链路层地址 MAC(Media Access Control Address)
    • 实现本地网络设备间的直接传输
  • 网络层地址 IP(Internet Protocol address)
    • 实现大型网络间的传输

查看 MAC 地址:

# Window
ipconfig / all
# Linux
ifconfig

地址解析协议 ARP

动态地址解析协议(Address Resolution Protocol,ARP)是根据 IP 地址获取 MAC 地址的一种协议。

简单的来说 ARP 的作用就是把 IP 地址映射为物理地址,而与之相反的 RARP(逆向 ARP)就是将物理地址映射为 IP 地址。

NAT 地址转换

网络地址转换(Network Address Translation,缩写:NAT;又称网络掩蔽、IP 掩蔽)在计算机网络中是一种在 IP 数据包通过路由器或防火墙时重写来源 IP 地址或目的 IP 地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有 IP 地址访问互联网的私有网络中。它是一个方便且得到了广泛应用的技术。当然,NAT 也让主机之间的通信变得复杂,导致了通信效率的降低。

IPv6

网际协议第 6 版(英语:Internet Protocol version 6,缩写:IPv6)是网际协议的最新版本,用作互联网的协议。用它来取代 IPv4 主要是为了解决 IPv4 地址枯竭问题,同时它也在其他方面对于 IPv4 有许多改进。

IPv6 目的:

  • 更大的地址空间:128 位长度
  • 更好的地址空间管理
  • 消除 NAT 等寻址技术
  • 更简易的 IP 配置管理
  • 优秀的选路设计
  • 更好的多播支持
  • 安全性
  • 移动性

格式

IPv6 二进位制下为 128 位长度,以 16 位为一组,每组以冒号 : 隔开,可以分为 8 组,每组以 4 位十六进制方式表示。

例如:2001:0db8:86a3:08d3:1319:8a2e:0370:7344 是一个合法的 IPv6 地址。

类似于 IPv4 的点分十进制,同样也存在点分十六进制的写法,将 8 组 4 位十六进制地址的冒号去除后,每位以点号 . 分组。

例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344 则记为 2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4,其倒序写法用于 ip6.arpa 子域名记录 IPv6 地址与域名的映射。

同时 IPv6 在某些条件下可以省略:

  1. 每项数字前导的 0 可以省略,省略后前导数字仍是 0 则继续,例如下组 IPv6 是等价的。
2001:0DB8:02de:0000:0000:0000:0000:0e13
2001:DB8:2de:0000:0000:0000:0000:e13
2001:DB8:2de:000:000:000:000:e13
2001:DB8:2de:00:00:00:00:e13
2001:DB8:2de:0:0:0:0:e13
  1. 可以用双冒号 :: 表示一组 0 或多组连续的 0,但只能出现一次:
  • 如果四组数字都是零,可以被省略。遵照以上省略规则,下面这两组 IPv6 都是相等的。
2001:DB8:2de:0:0:0:0:e13
2001:DB8:2de::e13
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:0000:0000:0000:0000:25de:0000:cade
2001:0000:0000:0000:25de:0000:0000:cade
2001:0000:0000:25de:0000:0000:0000:cade
2001:0000:25de:0000:0000:0000:0000:cade

如果这个地址实际上是 IPv4 的地址,后 32 位可以用 10 进制数表示;因此 ::ffff:192.168.89.9 相等于 ::ffff:c0a8:5909。 另外,::ffff:1.2.3.4 格式叫做 IPv4 映射地址。

IPv4 位址可以很容易的转化为 IPv6 格式。举例来说,如果 IPv4 的一个地址为 135.75.43.52(十六进制为 0x874B2B34),它可以被转化为 0000:0000:0000:0000:0000:FFFF:874B:2B34 或者 ::FFFF:874B:2B34。同时,还可以使用混合符号(IPv4-compatible address),则地址可以为 ::ffff:135.75.43.52