链路层 ∞
theory链路层主要有三个目的:
(1)为IP模块发送和接收IP数据报;
(2)为ARP模块发送ARP请求和接收ARP应答
(3)为RARP发送RARP请求和接收RARP应答
以太网和IEEE 802封装:
以太网是指数字设备公司、英特尔公司和Xerox公司在1982年联合公布的一个标准,它是当今TCP/IP采用的主要的局域技术。采用CSMA/CD的媒体接入方法,指带冲突检测的载波侦听多路接入,速率10Mb/s,地址为48bit。它的IP数据报的定义在RFC894里面。
几年后IEEE 802委员会公布了一个稍有不同的标准,802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网。可是802.2和802.3定义了一个与以太网不同的帧的格式。
如图,怎么区分这两种数据报?很幸运,802定义的长度的有效值和以太网的有效类型值无一相同,这样就可以很容易对它们进行区分。
SLIP:串行线路IP
serial line IP,它是一种在串行线路上对IP数据报进行封装的简单形式,在RFC1055中有详细描述。
IP数据报以一个称作END(0xc0)的特殊字符结束。开始处也有一个END,防止噪音干扰。
如果IP报文中某个字符为END,那么就要连续传输两个字节:0xdb和0xdc,这两字节是SLIP的ESC字符
如果IP报文中某个字符为SLIP的ESC字符,那么就要连接传输两个字节:0xdb和0xdc来取代它。
但这种帧封装以一奉百些缺陷:
1、没法把本端地址通知给对方
2、没有类型字段,如果一条串行线路用于SLIP,那么它就不能用于其它协议。
3、没有检验和,如CRC。它的安全性只能由上一层来保证。
尽管这样,SLIP还是一种广泛使用的协议。
压缩的SLIP(CSLIP)
一般地为了传输一个字节的数据需要20个字节的IP首部和20个字节的TCP首部,总数超过了40个字节。这时人们提出了一个CSLIP协议。在RFC 1144中描述。它把上面说到的40个字节压缩成3或5个字节,它能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。
PPP:点对点协议。
它修改了SLIP协议中所有的缺陷:
1、支持数据为8位的无奇偶检验的异步模式,还支持面向比特的同步链接。
2、建立、配置及测试数据控制协议,可双方协商协议。
3、针对不同网络层协议的网络控制协议。
每一帧都以0x7e开关和结束,接着是一个地址字节,始终0xff,接着是一个控制字节0x03。然后就是协议字段,类似于以太网中的类型字段。值0x0021时,表示信息字段是一个IP数据报;值0xc021时,表示信息字段是链路控制数据;值 0x8021时,表示信息字段是网络控制数据。然后是2个字节的CRC。
这里,当0x7e出现在信息字段中时,需要转义,需传输两个字符:0x7d和0x5e;出现0x7d时,传输两个字符:0x7d和0x5d;另外,当遇到字符小于0x20时,如0x01,需传输0x7d和0x21。最后一点这么做是为了防止它们出现在双方的主机串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要对这32个字符中的某一些值进行转义。默认是32都转。
总之,它和SLIP比有以下优点:
1、PPP支持在单根串行线路上运行多种协议,不只是IP协议。
2、每一帧都有CRC
3、通信双方可以进行通信地址的动态协商
4、与CSLIP类似,对TCP和IP报文首部进行压缩
5、链路控制协议可以对多个数据链路选项进行设置。
不过目前SLIP的用户还是比PPP多,但慢慢地PPP就会取代SLIP
MTU,最大传输单元
以太网和802.3都对数据帧的长度有一个限制,前者是1500byte,后者是1492byte,而点对点PPP低延时的为296byte。
大于这些值就要切片传。
当多条线路要进行通信时,MTU取决于最小的那一个。
串行线路的吞吐量
如线路速率是9600bit/s,一个字节有8bit,再加上2bit的起止比特,那么实际的速率是960byte/s,若要传输一个1024byte的数据,则需要1066ms。
对于交互式的通信,如Telnet、FTP的控制命令等,数据分片的取舍就很重要。如在SLIP上运行一个交互式应用,同时 还用FTP传输1024字节的数据,那么FTP控制命令的交互一般得等533ms,但这是不能接受的,交互响应的时间应该在100~200ms之间。
如果 把SLIP的MTU缩短到256,则等待时间就变成133ms,这勉强可以接受,但不是最好的。MTU太小了,也不利于大块数据的传输。