在 TCP/IP 协议族中,有很多协议,下图给出了文章中会用到的一些协议:
可以从上图看出,在 TCP/IP 协议族中,链路层主要有三个目的:
- 为 IP 模块发送和接收 IP 数据报
- 为 ARP 模块发送 ARP 请求和接受 ARP 应答
- 为 RARP 发送 RARP 请求和接受 RARP 应答
后续介绍的是链路层所使用的一些协议。
以下展示了两种封装格式:
- IEEE 802.2/802.3(RFC 1042)封装格式:IEEE 电子电器工程师协会公布的标准集
- 以太网封装格式:数字设备公司,英特尔公司和 Xerox 公司联合公布的一个标准,是 TCP/IP 采用的主要的局域网技术
图中每个方框下面的数字是它们的字节长度。
分别介绍一下格式的细节:
- 目的地址和源地址:采用 48bit(6字节) 的目的地址和源地址,这里的地址指的是硬件地址(MAC 地址),ARP 和 RARP 协议对 32bit 的 IP 地址和 48bit 的硬件地址进行映射。
- 长度:指后续数据的字节长度,不包括 CRC 校验码。
- 类型:以太网的类型字段定义了后续数据的类型。802 标准中,类型字段由后续的子网接入协议(SNAP)的首部给出。
- 数据:在以太网格式中,类型字段之后就是数据。在 802 标准中,跟随在后面的是 3 字节的 LLC 和 5 字节的 SNAP。
- CRC:用于帧内后续字节差错的循环冗余码校验(校验和)。
SLIP(Serial Line IP)是一种在串行线路上对 IP 数据报进行封装的简单形式。
下面的规则描述了 SLIP 协议定义的帧格式:
- IP 数据报以一个称作 END(0xc0)的特殊字符结束
- 如果 IP 报文中某个字符为 END,那么就要连续传输两个字节 0xdb 和 0xdc 来取代它。0xdb 这个特殊字符被称作 SLIP 的 ESC 字符,但它的值与 ASCII 码的 ESC 字符(0x1b)不同。
- 如果 IP 报文中某个字符为 SLIP 的 ESC 字符,那么就要连续传输两个字节 0xdb 和 0xdd 来取代它。
SLIP 是一种简单的帧封装方法,还有一些值得一提的缺陷:
- 每一端必须知道对方的 IP 地址,没有办法把本端的 IP 地址通知给另一端。
- 数据帧中没有类型字段,如果一条串行线路用于 SLIP,那么它不能同时使用其他协议。
- SLIP 没有在数据帧加上校验和,如果 SLIP 传输的报文被线路噪声影响而发送错误,只能通过上层协议来发现。
PPP 修复了 SLIP 协议中的所有缺陷,包括以下三个部分:
- 在串行链路上封装 IP 数据报的方法。PPP 既支持数据为 8 位和无奇偶校验的异步模式,还支持面向比特的同步链接。
- 建立,配置及测试数据链路的链路控制协议(LCP:Link Control Protocl),它允许通信双方进行协商,以确定不同的选项。
- 针对不同网络层协议的网络控制协议(NCP:Network Control Protocol)体系。
下面介绍一下帧的细节:
- 开始/结束:每一帧以标志字符 0x7e 开始和结束。
- 地址字节:值始终是 0xff
- 控制字节:值位 0x03
- 协议字段:类似于以太网中类型字段的功能。值为 0x0021 时,表示信息字段是一个 IP 数据报;值为 0xc021 时,表示信息字段时链路控制数据;值为 0x8021 时,表示信息字段是网络控制数据。
- 信息字段:包含了帧里的数据。
- CRC 字段:是一个循环冗余校验码,以检测数据帧中的错误。
总的来说,PPP 比 SLIP 具有下面这些优点:
- PPP 支持在单根串行线路上运行多种协议,不只是 IP 协议
- 每一帧都有循环冗余校验
- 通信双方可以进行 IP 地址的动态协商(使用 IP 网络控制协议)
- 与 CSLIP 类似,对 TCP 和 IP 报文首部进行压缩
- 链路控制协议可以对多个数据链路选项进行设置
大多数产品都支持环回接口(Lookback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过 TCP/IP 进行通信。
根据惯例,大多数系统把 IP 地址 127.0.0.1 分配给这个接口,并命名为 localhost,一个传给环回接口的 IP 数据报不能在任何网络上出现。
下图是环回接口处理 IP 数据报的简单过程:
图中的关键点是:
- 传给环回地址(一般是 127.0.0.1)的任何数据均作为 IP 输入
- 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上
- 任何传给该主机 IP 地址的数据均送到环回接口
以太网和 802 标准对数据帧的长度都有一个限制,其最大值分别是 1500 和 1492 字节。链路层的这个特性称作 MTU,最大传输单元。
如果 IP 层有一个数据报还要传,而且数据的长度比链路层的 MTU 还打,那 IP 层就要进行分片(fragmentation)。
以下是几种常见的最大传输单元:
网络 | MTU 字节 |
---|---|
超通道 | 65535 |
16 Mb/s令牌环(IBM) | 17914 |
4 Mb/s令牌环(IEEE 802.5) | 4464 |
FDDI | 4352 |
以太网 | 1500 |
IEEE 802.3/802.2 | 1492 |
X.25 | 576 |
点对点(低时延) | 296 |
路径 MTU 是两台通信主机路径中的最小 MTU。
它有如下特性:
- 两台主机之间的路径 MTU 不一定是个常数,它取决于当时所选择的路由。
- 选路不一定是对称的(从 A 到 B 的路由可能与从 B 到 A 的路由不同),因此路径 MTU 在两个方向上不一定是一致的。