1. 链路层简述
下图可以看出链路层主要有三个作用
- 为IP模块发送和接收数据报
- 为ARP发送请求和接收应答
- 为RARP发送请求和接收应答
ARP和RARP是地址(逆)解析协议,后续会讲到。
链路层作为最下层,它的协议也由使用的硬件支持。
2. 以太网&IEEE 802
这是两个最常见的封装标准,它们对应了不同的局域网硬件或者说类型。
- 以太网(RFC894)——以太网
- IEEE802——令牌环网
简述一下这两种局域网类型的区别。
- 以太网:
- 每台主机都可以像主干发送信息串
- 它们会监听主干上是否有人发言,有就等一会,没有就发言
- 如果发言时冲突,则冲突的两台主机会分别随机等待不同的时间。
- 其他的电脑在读取数据包时会通过IP和端口检查是不是发给自己的。
- 令牌环网: 主机组成环形,环形中有一令牌,由一号机向下传递,每个主机有令牌时才能向主干发送信息。
令牌环网的主要缺点在于强依赖令牌,每个局域网都要节点去监控和管理,所以现在我们的局域网类型基本都是以太网。
这也导致了规定每台Internet主机必须能发送和接收以太网(RFC894)标准封装的帧。
3. SLIP:串行线路IP
这是一种封装很简单的协议,早期的拨号上网就是用的这种协议。
它具有如下规则
- 结尾加上END特殊字符,为了防止噪声被当作数据报,在开始也传一个END。
- 如果IP报文含有END,则连续传0xdb和0xdc来取代,0xdb被称作SLIP的ESC字符,和ASCII码的不同。
- 如果IP报文含有ESC字符,则连续传0xdb和0xdd取代。
同时它还具有以下缺陷
- 无法通知本端IP到另一端
- 帧没有类型字段,如果线路使用SLIP,则不能同时使用其他协议。
- 没有校验码,如果被噪声影响,只能由上层纠错,
4 PPP:点对点协议
由于PPP改进了缺陷,逐渐取代了SLIP,我们现在上网用的链路层协议就是PPP封装在以太网框架中的PPPoE协议。
PPP修改了SLIP协议的缺点:
- 支持数据校验
- 建立链路控制协议(LCP逻辑子层),允许双方协商,确定不同选项。
- 针对不同网络层协议的网络控制协议(NCP)体系。
5 环回接口
我们平常写程序,本地调试使用的127.0.0.1以及localhost就是用这个接口。
图中有三个关键点
- 传给环回地址的任何数据均作为IP输入
- 传给广播或多播地址的数据报复制一份传给环回接口,然后送至以太网。
- 任何传给主机IP地址的数据均送到环回接口。
环回接口可以被当作另一个链路层,所以使用传输层和网络层来处理环回数据可以很大程度简化设计。
6 最大传输单元MTU
以太网对数据帧长度又一个限制,链路层的这个特性称作MTU,不同类型的网路基本都有上限。
如果IP层的一个数据报比MTU还要大,那么IP层要对数据报分片,保证每一片小于MTU。
我们可以使用netstat -in的命令查看每个接口的MTU,图中eth0就是以太网。
7 路径MTU
两台主机通信要通过多个网络,而每个网络可能有不同的MTU,所以重要的是它们之间最小的MTU,称作路径MTU。
路径MTU不一定是常数,因为选路不一定对称,A到B和B到A的路由不一定相同,所以路径MTU在两台主机的不同方向上可能会不同。