Skip to content

Latest commit

 

History

History
127 lines (81 loc) · 6.21 KB

网络-TCP-IP详解-链路层.md

File metadata and controls

127 lines (81 loc) · 6.21 KB

TCP-IP 详解:链路层

TCP/IP 分层

在 TCP/IP 协议族中,有很多协议,下图给出了文章中会用到的一些协议:

TCP/IP 协议族

可以从上图看出,在 TCP/IP 协议族中,链路层主要有三个目的:

  1. 为 IP 模块发送和接收 IP 数据报
  2. 为 ARP 模块发送 ARP 请求和接受 ARP 应答
  3. 为 RARP 发送 RARP 请求和接受 RARP 应答

后续介绍的是链路层所使用的一些协议。

以太网和 IEEE 802 标准

以下展示了两种封装格式:

  1. IEEE 802.2/802.3(RFC 1042)封装格式:IEEE 电子电器工程师协会公布的标准集
  2. 以太网封装格式:数字设备公司,英特尔公司和 Xerox 公司联合公布的一个标准,是 TCP/IP 采用的主要的局域网技术

图中每个方框下面的数字是它们的字节长度。

以太网帧格式

分别介绍一下格式的细节:

  • 目的地址和源地址:采用 48bit(6字节) 的目的地址和源地址,这里的地址指的是硬件地址(MAC 地址),ARP 和 RARP 协议对 32bit 的 IP 地址和 48bit 的硬件地址进行映射。
  • 长度:指后续数据的字节长度,不包括 CRC 校验码。
  • 类型:以太网的类型字段定义了后续数据的类型。802 标准中,类型字段由后续的子网接入协议(SNAP)的首部给出。
  • 数据:在以太网格式中,类型字段之后就是数据。在 802 标准中,跟随在后面的是 3 字节的 LLC 和 5 字节的 SNAP。
  • CRC:用于帧内后续字节差错的循环冗余码校验(校验和)。

SLIP:串行线路 IP

SLIP(Serial Line IP)是一种在串行线路上对 IP 数据报进行封装的简单形式。

SLIP 帧格式

下面的规则描述了 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:点对点协议

PPP 修复了 SLIP 协议中的所有缺陷,包括以下三个部分:

  1. 在串行链路上封装 IP 数据报的方法。PPP 既支持数据为 8 位和无奇偶校验的异步模式,还支持面向比特的同步链接。
  2. 建立,配置及测试数据链路的链路控制协议(LCP:Link Control Protocl),它允许通信双方进行协商,以确定不同的选项。
  3. 针对不同网络层协议的网络控制协议(NCP:Network Control Protocol)体系。

PPP 帧格式

下面介绍一下帧的细节:

  • 开始/结束:每一帧以标志字符 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 地址的数据均送到环回接口

最大传输单元 MTU

以太网和 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。

它有如下特性:

  • 两台主机之间的路径 MTU 不一定是个常数,它取决于当时所选择的路由。
  • 选路不一定是对称的(从 A 到 B 的路由可能与从 B 到 A 的路由不同),因此路径 MTU 在两个方向上不一定是一致的。

思维导图

思维导图