在TCP/IP协议族中,链路层主要有三个目的:
- 为IP模块发送和接收IP数据报;
- 为ARP模块发送ARP请求和接收ARP应答;
- 为RARP发送RARP请求和接收RARP应答。
以太网和IEEE 802封装
以太网这个术语一般是指DEC、Intel、Xeror公司在1982年联合发布的一个标准,它是当今TCP/IP采用的主要的局域网技术,以太网IP数据报的封装在RFC894中定义,地址是48bit。
IEEE 802 是IEEE(电子电气工程师协会)802委员会公布的一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。
最常用的封装格式是RFC894。
IEEE 802.2/802.3(RFC-1042)和以太网封装格式(RFC-894) (方框下的数字表示占用的字节数):
- 两种帧格式都采用48bit的地址,称为硬件地址。ARP和RARP协议用于对32bit的IP地址和48bit的硬件地址进行映射。
- 802标准的长度指后续数据的字节长度,但不包括CRC校验码;以太网的类型字段定义了后续数据的类型。802定义的有效长度值与以太网的有效类型值无一相同,这样就可以对两种帧格式进行区分。
- 在以太网帧格式中,类型字段之后就是数据;而在802帧格式中,跟随在后面的是3字节的802.2 LLC和5字节的802.2 SNAP。目的服务访问点(Destination Service Access Point, DSAP)和源服务访问点(Source Service Access Point,SSAP)的值都设为0xaa。Ctrl字段的值设为3.随后的3个自己org code都置为0。再接下来的2个字节类型字段和以太网帧格式一样。
- CRC字段用于帧内后续字节差错的循环冗余码校验(校验和)(它也称为FCS或帧校验序列)。
- 802.3标准定义的帧和以太网的帧都有最小长度要求。802.3标准要求至少38字节,以太网要求至少48字节。如果空间不足,则需要填充字节。
SLIP,串行线路IP
SLIP的全称是Serial Line IP。它是一种在串行线路上对IP数据报进行封装的简单形式。SLIP适用于RS-232串行端口和高速调制解调器接入Internet。
SLIP协议定义帧格式的规则:
- IP数据报以一个称作END(0xc0)的特殊字符结束。大多数实现在数据报的开始处传一个END字符。
- 如果IP报文中某个字符为END,那么就要连续传输两个字节
0xdb
和0xdc
来取代它。0xdb
被称作SLIP的ESC字符(转义字符),它的值与ASCII码的ESC字符(0x1b,这是物理按键的值,前者是协议定义的逻辑转义字符)不同。 - 如果IP报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节的
0xdb
和0xdd
来取代它。
SLIP报文封装图解:
SLIP的一些缺陷:
- 每一端必须知道对方的IP地址,没有办法把本端的IP地址通知给另一端。
- 数据帧中没有类型字段。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
- SLIP没有在数据帧中加上校验和。只能通过上层协议发现出错的报文。
压缩的SLIP
由于串行线路的速率通常较低,而且通信经常是交互式的,因此在SLIP线路上有许多小的TCP分组进行交换。
CSLIP(即压缩SLIP)压缩了大多数的IP和TCP首部,因此更高效。
PPP:点对点协议
PPP,点对点协议修改了SLIP协议中的所有缺陷。包括以下三个部分:
- 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶校验的异步模式,还支持面向比特的同步链接。
- 建立、配置以及测试数据链路的链路控制协议(LCP,Link Control Protocol)。允许通信双方进行协商,以确定不同的选项。
- 针对不同网络层协议的网络控制协议(NCP,Network Control Protocol)体系。
PPP帧格式
每一帧都以标志字符0x7e开始和结束,紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03的控制字节。
协议字段类似于以太网中类型的功能。
CRC字段(或FCS,帧校验序列)是一个循环冗余校验码,以检测数据帧中的错误。
由于标志字符的值是0x7e,因此当该字符出现在信息字段中时,PPP需要对它进行转义。
在同步链路中,该过程是通过一种称作比特填充(bit stuffing)的硬件技术来完成的。
在异步链路中,特殊字符0x7d用作转义字符。当它出现在PPP数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:
- 当遇到字符0x7e时,需连续传送两个字符:0x7d和0x5e,以实现标志字符的转义。
- 当遇到转义字符0x7d时,需连续传送两个字符:0x7d和0x5d,以实现转义字符的转义。
- 默认情况下,如果字符的值小于0x20,一般都要进行转义。
环回接口,Loopback Interface
环回接口允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号 127 就是为环回接口预留的。
大多数系统把IP地址 127.0.0.1 分配给这个接口,并命名为 localhost。一个传给环回接口的IP数据报不能在任何网络上出现。大多数产品照样完成传输层和网络层的所有过程,只是当IP数据报离开网络层时把它返回给自己。
环回接口数据报处理过程:
上图有3个关键点:
- 传给环回地址的任何数据均作为IP输入。
- 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。
- 任何传给该主机IP地址的数据均送到环回接口。
用传输层和IP侧过的方法来处理环回数据简化了设计,环回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到IP的输入队列中。
最大传输单元MTU
以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作MTU,最大传输单元。
如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分层若干片,这样每一片都小于MTU。
路径MTU
当两台主机之间的通信要通过多个网络,这两台通信主机路径中的最小MTU就称作路径MTU。
两台主机之间的路径MTU不一定是个常数,它取决于当时所选择的路由。而选路不一定是对称的,因此路径MTU在两个方向上不一定是一致的。
欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。