目录
数据链路层
介绍
也属于网卡驱动层
- 负责与实际硬件(网卡)通信,执行数据的发送和接收操作
- 两者并不相同,网卡驱动层属于计算机操作系统的一部分,不在OSI模型中
因为网卡不支持一次接收过大的数据
- 所以它倒逼上层一次不能交付过大的报文
所以上层在通信时,如果收到了大数据,需要将大数据分割成小的报文
- eg:tcp层的滑动窗口需要分段,而不是把整个窗口的数据发送过去
MTU
介绍
MTU(Maximum Transmission Unit,最大传输单元) ,是指网络接口一次可以传输的最大字节数
- 网络接口 -- 指计算机或网络设备与网络进行通信的硬件或软件接口
- 最常见的物理网络接口就是网卡
不同的数据链路协议(如以太网、Wi-Fi、PPP)可能具有不同的 MTU 值
- 对于以太网,通常的 MTU 是1500字节
如果上层协议生成的报文(如 TCP 报文)比 MTU 大,则需要将其分片以适应网络接口的 MTU 限制
- 因为链路层一旦交付给下层,网卡就会直接发送数据了,所以相当于在链路层就要有MTU规定,同样它也会影响上层
- 注意,这里说的"上层协议生成的报文"也就是Mac帧里的有效载荷部分,所以实际上MTU规定的是Mac帧里的有效载荷的大小(网络层交付的报文大小)
- (这些都会在下面详细介绍)
在哪一层分片
虽然下层这么规定了,但是传输层(也就是tcp层)发送的数据就是特别大怎么办?
- 所以,ip层(网络层)需要对报文分片
为什么不是在数据链路层呢?
- 还记得吗,网络数据都是广播发送的,传到链路层后判断是否是发给自己的,不是就丢弃
- 报文一路上都要经过多个设备,如果每经过一个设备就要进行组装和分片(要保证数据的完整性),太麻烦了
- 所以放在ip层,等数据包收全后再进行组装,然后交付给上层最好
本身分片就需要针对不同网络的MTU进行
- 网络层可以根据网络的需求对数据包进行分片
- 但链路层只处理直接相连的网络节点之间传输数据帧,不会涉及MTU的变化
- 所以放在网络层分片最合理
IP报文的分包与组装
也就是报头的第二行,是有关分片和组装的字段
报头中其他字段的介绍 --