链路层
把书读薄(TCP/IP详解 卷一 第二章)
链路层是做什么的?
- 为IP模块发送和接收IP数据报
- 为ARP模块发送ARP请求和接收ARP应答
- 为RARP发送RARP请求和接收RARP应答
什么是以太网?
局域网采用的通信协议标准,封装格式详见 RFC 894。
以太网链路层协议:SLIP(Serial Line IP 串行线路IP)、PPP(点对点协议)
什么是IEEE 802?
IEEE制定的局域网和城域网通信协议标准,封装格式详见 RFC 1042。
SLIP协议是怎么封装IP信息的?
帧格式的规则为:
- 在IP数据报的开头和结尾增加一个0xC0(称作END),如果报文中有0xc0,连续传两个字符0xdb(它被称作SLIP的ESC字符)和0xdc来取代
- 如果报文中有ESC字符,那么连续传两个0xdb和0xdd来取代
缺点是:
- 发送的端必须知道对方的IP,它没有办法把自己的IP传给另一端
- 如果当前线路已经用了SLIP,由于SLIP没有类型标志,这条线路就不能同时使用其它协议
- 没有校验和导致数据发生噪声传播错误信息无法感知
如果只传1个字节数据它需要额外包装20个IP首部20个TCP首部,为了节省,提出CSLIP(压缩),能将这40个字节压缩到3到5个,详见 RFC 1144
ppp协议是怎么封装IP信息的?
点对点是指1条链路上就一个通信端和接收端,比如两个路由器通过串口相连
帧格式规则为:
- 开始和结束都用0x7E,在同步链路中,通过零比特填充的硬件技术完成转义,异步链路是连续输出0x7d(转义字符)0x5e做转义(遇到了0x7d就连续输出0x7d0x5d)
转义字符:防止某些通信双方的串行接口驱动程序或者调制解调器吧控制字符解释成特殊字符,另外用链路控制协议指定是否要对某些值(小于0x20)进行转义。一般情况下,字符值小于0x20都会转义
同步链路:以帧为单位传输(每帧大小不固定)
异步链路:以字符为单位传输(传输大小是固定的,比如8字节),传输的首尾分别增加起始符合结束符
零比特填充技术:边界符0x7E二进制表示为 01111110,每当接受到5个1时就插入1个0,接收的时候遇到5个1再把后面的0删掉
- 地址符固定不变为0xFF,控制字段无实际意义
- 协议类型占据2个字节,作为当前数据报锁承载的信息类型
- CRC(帧检查序列)是一个循环冗余检验码
相对SLIP的优点:
- 单串行线路支持多种协议
- 每一帧都有循环冗余检验
循环冗余检验:把原始的数据当做一个二进制,接收方和发送方选定一个除数,假定除数有4位,在原始数据二进制后添加3个0当做被除数,将除的结果余数(位数必须等于除数的位数减1,少了高位补0)替换掉原来增加的3个0,作为信息发送出去,接收方使用相同的除数去除(摸2除法,不借位不进位),如果发现余数为0,认为信息传递没有问题
- 使用IP网络控制协议可以对IP地址进行动态协商
动态协商IP:一端(端A)手动配置IP地址,并允许给另一端(端B)配置IP地址,另一端(端B)接收动态分配的地址
- 链路控制协议可以对多个数据链路选项进行设置
设置:身份验证、压缩等等
环回接口是如何处理IP数据报的?
与环回驱动交互影响的主要是流程1-7
- 网络层输出IP数据
- 输出函数发现目的地是环回地址则交给环回驱动程序处理
- 环回程序又将IP数据报为IP输入函数进入网络层
- 广播和多播的数据报必须复制一份给环回接口
- 广播和多播的数据同时上传以太网
- 任何给主机IP的数据均送到环回接口
- 通过以太网发送到目的主机
环回驱动使得同一台机器上的服务端和客户端能通过TCP/IP进行通信。
什么是MTU?
最大传输单元。链路层[以太网(1500字节)和802.3(1492字节)]对数据帧的长度存在限制。
路径MTU:两台主机中的路由不同,而每个网络链路层的MTU可能不同,这样的通信主机之间的最小MTU为路径路由