链路层
在tcp/ip协议族中,链路层主要有三个目的:
- 为ip模块发送和接收ip数据报
- 为arp模块发送请求和接收arp应答
- 为rarp模块发送请求和接收rarp应答
tcp/ip支持多种不同的链路层协议,如以太网,令牌环网,FDDI(光钎分布式数据接口)及RS-232串行线路。
详细介绍以太网链路层协议,两个串行接口链路层协议(SLIP和PPP),以及大多数实现都包含的环回(loopback)驱动程序
有RFC894和RFC 1042两种封装格式的分组
- 两种帧的格式采用48bit的目的地址和源地址(802.3允许使用16bit的地址)。这就是硬件地址。
- arp和rarp协议对32bit的ip地址和48bit的硬件地址进行映射
以太网的封装格式
- 802的标准定义的帧格式中,长度字段是指它后续数据的字节长度,但是不包括CRC检验码
- 以太网的类型字段定义了后续数据的类型。
- 802标准定义的帧格式中,类型字段则由后续的子网接入协议(Sub-network Access Protocol,SNAP)的首部给出。
- 在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是用于帧后续字节差错的循环冗余码校验(校验和)(CRC也叫做帧校验序列)
SLIP:串行线路IP
SLIP的全称是Serial line IP。它是一种在串行线路上对IP数据包进行封装的简单形式。SLIP适用于家庭中每台计算机几乎都有的 RS-232串行端口和高速调制解调器接入Internet。
SLIP协议定义的帧格式:
- IP数据包以一个称作END(0xc0)的特殊字符结束。为了防止数据报到来之前的线路噪声,大多数的数据报在开始处也传一个END字符(如果有线路噪声,那么E N D字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)
- 如果IP报中的某个字符为END,那么要传连续的两个字节0xdb和0xdc来取代它。
- 如果要传0xdb这个字符,那么需要连续传2个字节的0xdb和0xdd取代它。
SLIP是简单的帧封装方法,有缺陷如下:
- 每一端必须知道对方的IP地址。没有办法把本端的IP地址通知另一端。
- 数据帧中没有类型字段。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
- SLIP没有在数据帧中加入校验和。如果有线路噪声影响数据,只能通过上层协议来发现或者新型的调制解调器来检测并纠正错误报文。这种情况下上层的CRC就尤其重要。
尽管存在这些缺点,SLIP仍然是一张广泛使用的协议
压缩的SLIP
- 串行线路的速率通常很低,通信是交互式的,SLIP上有许多小的TCP分组进行交换,为了传送一个1个字节的数据需要20个字节的IP首部和20个字节的TCP首部。
- 应对这些性能上的缺陷,提出了CSLIP的协议(压缩的SLIP),对一些首部进行压缩。大多数SLIP产品都支持CSLIP
PPP点对点协议
PPP,点对点协议修改了SLIP协议中的缺陷。PPP包括以下三部分
- 在串行链路上封装IP数据报的方法。PPP支持数据为8bit和无奇偶校验的异步模式,支持面向bit的同步链接。
- 建立,配置及测试数据链路的链路控制协议(Line control protocol)。协商不同的选项。
- 对不同网络层协议的网络控制协议(Network control protocol)。定义的网络层有(网络层有IP,OSI网络层DECnet以及AppleTalk)
标志位处理
标志的值是0x7E,在同步链路中处理是用比特填充(bit shuffing)的硬件技术来完成的
在异步链路中使用0x7d作为转移字符。规则:当PPP的数据帧中出现标志值,那么紧接着的字符的第6比特位取其补码
- 遇到0x7E时,则传输两个字符:0x7d0x5e
- 遇到0x7d时,则传输两个字符:0x7d0x5d
- 默认情况下,如果字符的值小于0x20,一般要进行转义处理。(串行接口驱动程序或调制解调器会把这些字符解释成特殊含义)
ppp协议比slip协议具有以下优点
- 可以在串行线路上运行多种协议,因为有协议字段
- 每一帧都有CRC校验位,数据完成性有保障
- 通信双方进行IP地址的动态协商
- 与CSLIP类似,对tcp和ip首部进行压缩
- 链路控制协议可以对多个数据链路选择进行设置
PPP有望最终取代SLIP协议
环回接口-Loopback Interface
作用:允许运行在同一台主机上的C/S程序通过TCP/IP进行通信。地址是127.0.0.1 名称是localhost
- 传给环回地址(一般是127.0.0.1)的任何数据均作为IP输入。
- 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义(第12章)包含主机本身。
- 任何传给该主机IP地址的数据均送到环回接口。
- BSD系统定义了变量useLoopback,初始化为1.如果时0,以太网驱动程序(硬件的驱动程序)会把本地分组送到网络。
- 个人理解是:ip输出函数发现是环回ip则把数据报发送到环回驱动程序
MTU:最大传输单元
- MTU是逻辑限制,为交互使用提供足够块的响应速度。非物理特性。
- 如果IP层的数据报的长度比链路层的MTU要大,则进行IP分片
路径MTU
- 当两台主机进行通信时经过多个网络,重要的是两台通信主机路径中的最小 MTU,称作路径MTU
- 两台主机之间的路径MTU不是常数,取决于当时所选择的路由。
- RFC 1191描述了路径MTU的发现机制
串行线路吞吐量计算
- 一般来说:串行链路的等待时间是发送时间的一半。
- 其他我看不懂