系列之TCP/IP协议-链路层

367 阅读6分钟
原文链接: mp.weixin.qq.com

一、引言

  • 在 TCP/IP 协议簇中,链路层的作用主要有:(1). 为 IP 模块发送 / 接受 IP 数据包;(2). 为 ARP 模块发送 ARP 请求与接收 ARP 应答;(3). 为 RARP 模块发送 RARP 请求与接收 RARP 应答。

  • 根据所使用的网络硬件不同,TCP/IP 协议簇使用不同的链路层协议。不同的网络硬件包括以太网、令牌环网、光纤分布式数据接口(FDDI)、RS-232 串行线路等等。

  • 该文将说明一下链路层协议:

  • 协议 - 以太网:事实上的协议(RFC 894 封装格式)、标准组织协议(IEEE 802.2/802.3,即 RFC 1042 封装格式);

  • 协议 - 串行线路:SLIP/CSLIP 与 PPP。

二、以太网协议(RFC 894)与 IEEE802 协议(RFC 1042)

  图中,各个数字的单位是字节(Byte)。这两种协议,都是以太网上的。以太网协议是事实上的协议,IEEE802 协议是标准组织根据以太网协议发布的标准参考协议。这两种协议都有相似的结构(如图)。两种帧格式都是采用 48bit(6 字节)的目的地址与源地址。 这些地址就是我们常说的物理地址(Media Access Control Address,MAC)

1. 以太网帧格式(如图 1 下半部分)

  • 目标 MAC 地址,6 字节长度;

  • 源 MAC 地址,6 字节长度;

  • 类型区域,2 字节长度,用于表示该帧是什么协议帧;

  • 当区域值为 0x0800,表示该帧是一个 IP 数据包,其后的数据区域长度是 46~1500 字节;

  • 当区域值为 0x0806,表示该帧是一个 ARP 请求或 ARP 应答包,其后数据长度是固定的 28 字节 + 18 字节填充字节(PAD);

  • 当区域值为 0x8035,表示该帧是一个 RARP 请求或 RARP 应答包,其后数据长度是固定的 28 字节 + 18 字节填充字节 (PAD)。

  • 数据区域,其长度如上;

  • CRC ,差错循环冗余校验码,4 字节长度。校验范围:除 CRC 以外的其他数据。

以太帧最小数据区域是46字节,因此,ARP与RARP包不够这么长,需要填充PAD(填充字节)。用 wireshark 抓取一帧,可以看到:

  蓝色部分为目的 MAC 地址;黑色部分为源 MAC 地址;红色部分为帧类型部分,指明这是一个 IPv4 数据包;黄色为填充字节部分;其余为数据部分。没有看到 CRC 校验码是应为抓包工具抓不到。

2.IEEE802 帧格式(如图 1 上半部分)

  • 目标 MAC 地址,6 字节长度;

  • 源 MAC 地址,6 字节长度;

  • 长度区域,2 字节长度,指明其后除去 CRC 校验码的数据长度。这个长度值与以太帧的类型区域值不重合(以太帧类型最小 0x0800[2048], 数据长度范围又是 46~1500,不冲突), 可以使用该区域区分是以太帧还是IEEE802帧

  • 逻辑链路控制(Logical Link Control ,802.2 LLC),3 字节长度;

  • 子网访问协议(Sub-network Access Protocol, 802.2 SNAP),5 字节长度;

  • 数据区域,38~1492 字节长度;

  • CRC ,差错循环冗余校验码,4 字节长度。

IEEE802最小数据区域是38字节

三、串行线路 IP(SLIP) 协议与点对点协议(PPP)

  这两个协议都是对串行线路网络的协议。SLIP(Serial Line IP), 是一种串行线路上对 IP数据包进行封装的简单形式。PPP(Point to Point Protocol)是 SLIP 的代替协议

1. SLIP

  • IP 数据包以一个字节(0xc0)的特殊字符结束。为了防止噪音,通常也会在首部加上一个 0xc0 字符;

  • 如果 IP 数据包中有 0xdb 字节,使用 0xdbdd 替换该字节;

  • 如果 IP 数据包中有 0xc0 字节,使用 0xdbdc 替换该字节。

SLIP 缺点:a. 没有类型字段,无法传输其他类型的上层协议;b. 数据帧中,没有 CRC 校验码,无法保证传输正确性,除非上层协议保证校验。

2. PPP

  • 标记(ox7e),1 个字节,标记开始;

  • 广播地址,1 个字节;

  • 控制字,1 个字节;

  • 数据包中所使用的协议,2 个字节,0x0021 表示 IP 数据包等等;

  • 数据区域,0~1500 字节,存放数据,这是逻辑上限制了最大字节数;

  • CRC 校验码,2 个字节;

  • 标记(ox7e),1 个字节,标记结束。

PPP 比 SLIP 具有下面这些优点: (1) PPP 支持在单根串行线路上运行多种协议,不只是 I P 协议;(2) 每一帧都有循环冗余检验;(3) 通信双方可以进行 I P 地址的动态协商 (使用 I P 网络控制协议);(4) 与 C S L I P 类似,对 T C P 和 I P 报文首部进行压缩; (5) 链路控制协议可以对多个数据链路选项进行设置。

四、环回接口

  环回接口(Lookback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过 TCP/IP 进行通信。 A 类网络号 127 就是为环回接口预留的。多数系统将 127.0.0.1 分配给该接口,并命名该接口 host 为 localhost。传给环回接口的 IP 数据包是不会出现在网络上的。它是当 IP 数据包离开网络层时候,返回给了它自己。可以想象环回接口是一个链路层。

  • 传给环回地址(一般为 127.0.0.1)的任何数据均作为 I P 输入;

  • 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义,包含主机本身;

  • 任何传给该主机 IP 地址的数据均送到环回接口。

五、MTU 与路径 MTU

  通过以太帧和 IEEE802 帧,我们看到 一个帧能够传输的数据是有大小限制的,其最大值分别是 1500 字节与 1492 字节。 这种特性叫最大传输单元(Maximum Transmission Unit,MTU),单位是字节(Byte)。以下是不同网络的 MTU。

  路径MTU是指两台通信主机间的最小MTU。两台主机通信,中间可能经过了 n 个网络,不同的网络有不同的 MTU,根据木桶原理,其中最小的 MTU 为整个链路的路径 MTU。由于所选路由不同,MTU 也可能跟着变。

都看到这里了,要不要长按二维码关注一下微信公众号林湾村龙猫