数据链路层

数据链路层解决的是直接相连的主机之间的数据传输。

数据帧格式

数据帧在IP报文的基础上增加了目的MAC,源MAC,类型和CRC校验的内容

类型有三种,因为数据链路层的数据帧根据有效载荷内容分为三种,IP,ARP和RARP。IP的类型值为0800,ARP是0806,RARP是0835。

数据帧传输过程

最大传输单元MTU

以太网帧中的数据长度规定最小46字节,最大1500字节ARP数据包的长度不够46字节,要在后面补填充位;

最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;

如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片;

MTU对IP协议的影响

如果IP包很大,会将IP报文分成多个包,每个包的标签都是相同的。到达目标主机后,网络层再对小包按照顺序组装成一个大数据包。其中任何一个数据包丢失都会让数据失效,IP没有重传机制,效率很低不建议分包。

MTU对UDP的影响

一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报. 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在 网络层被分片, 整个数据被丢失的概率就大大增加了.

MTU对TCP的影响

TCP的一个数据报也不能无限大, 还是受制于MTU.

TCP的单个数据报的最大消息长度, 称为MSS(Max Segment Size);

TCP在建立连接的过程中, 通信双方会进行MSS协商. 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU). 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值. 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS. MSS的值就是在TCP首部的40字节变长选项中(kind=2);

MSS和MTU的关系;

ARP协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网 络层之间的协议。ARP协议的作用就是建立MAC和IP地址之间的关系。

ARP数据报格式

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况 是多余的,但如果链路层是其它类型的网络则有可能是必要的。

硬件类型指链路层网络类型,1为以太网;

协议类型指要转换的地址类型,0x0800为IP地址;

硬件地址长度对于以太网地址为6字节;

协议地址长度对于和IP地址为4字节;

op字段为1表示ARP请求,op字段为2表示ARP应答。

工作流程

源主机发出ARP请求,询问目标IP主机的MAC地址是多少, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);

目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;

每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

相关推荐
Mogu_cloud1 分钟前
蘑菇云最新arm盒子镜像及装机教程
服务器·网络·arm开发·web安全·云计算·智能路由器
苏十八1 小时前
JavaEE Servlet02
java·服务器·网络·java-ee·json
zy_destiny1 小时前
【YOLOv12改进trick】三重注意力TripletAttention引入YOLOv12中,实现遮挡目标检测涨点,含创新点Python代码,方便发论文
网络·人工智能·python·深度学习·yolo·计算机视觉·三重注意力
想变瘦的测试何同学2 小时前
【网络】实现电脑与笔记本电脑之间的直接网络连接
网络·电脑
写代码的猫眼石3 小时前
并发与IO多路复用(select)(20250306)
linux·服务器·开发语言·网络
木心操作3 小时前
nodejs使用WebSocket实现聊天效果
javascript·网络·websocket·网络协议·node.js
Hacker_Nightrain4 小时前
网络安全中蓝牙攻击有哪些?
网络·安全·web安全
苏十八4 小时前
JavaEE Servlet01
java·开发语言·网络·servlet·java-ee·json·idea
暴怒的代码7 小时前
云原生网络篇——万级节点服务网格与智能流量治理
网络·云原生