数据链路层

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

数据帧格式

数据帧在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请求来获得目的主机的硬件地址

相关推荐
斯~内克22 分钟前
鸿蒙网络通信全解析:从网络状态订阅到高效请求实践
网络·php·harmonyos
傻啦嘿哟44 分钟前
HTTP代理:网页加速的隐形引擎
网络·网络协议·http
傻啦嘿哟1 小时前
开发者视角:应用程序中HTTP代理的集成指南
网络·网络协议·http
爱写代码的小朋友1 小时前
IP 地址规划中的子网划分:/18 网络容纳 64 个 C 段(/24)的原理与应用解析
网络·网络协议·tcp/ip
十五年专注C++开发2 小时前
WebSocket原理详解(二)
网络·websocket·网络协议
JhonKI2 小时前
从零实现Json-Rpc框架】- 项目实现 - 服务端registry&discovery实现
网络协议·rpc·json
蜗牛沐雨2 小时前
MCP协议的Streamable HTTP:革新数据传输的未来
网络·网络协议·http
金丝猴也是猿3 小时前
如何在Flutter上实现高性能的动态模板渲染
websocket·网络协议·tcp/ip·http·网络安全·https·udp
swift开发pk OC开发3 小时前
Flutter性能优化细节
websocket·网络协议·tcp/ip·http·网络安全·https·udp
网络抓包与爬虫3 小时前
Flutter 环境搭建、常用指令、开发细节
websocket·网络协议·tcp/ip·http·网络安全·https·udp