前言
hello hello💕,这里是洋不写bug~😄,欢迎大家点赞👍👍,关注😍😍,收藏🌹🌹
对于网络通信的解析是按照TCP/IP 五层结构来解析的:应用层、传输层、网络层、数据链路层、物理层
上篇网络通信(四)博客中详细解析了网络层,现在还剩下数据链路层和物理层,物理层是纯硬件内容,程序员是接触不到的,这篇博客就会解析数据链路层,数据链路层的知识铁汁们大概了解下即可,绝大多数Java开发也不会接触到数据链路层
🎆个人主页:洋不写bug的博客
🎆所属专栏:JavaEE学习
🎆铁汁们对于JavaEE的各种常用核心语法,都可以在上面的JavaEE专栏学习,专栏正在持续更新中🏀,有问题可以写在评论区或者私信我哦~
1,协议
最常见的数据链路层协议:
- 以太网(IEEE 802.3)
通过网线/光纤进行传输的网络 - WiFi(IEEE 802.11)
无线信号
IEEE(Institute of Electrical and Electronics Engineers)就是电气和电子工程师协会,网络通信中的很多标准都是这个学会中的大佬制定的
2,数据帧报文格式
在数据链路层这部分不叫数据包/报,一般叫做数据帧,数据帧解析如下:
- 目的地址/源地址(6个字节):表示MAC地址
- 类型(2个字节):表示接收方接收数据时,数据帧的载荷部分要交给网络层的哪个协议来处理(IPv4、IPv6、其他协议)
- 数据部分(46 - 1500个字节):上篇博客提到IP数据报的长度最大为64KB,而这里数据部分的最大存储仅为1500B,当IP数据报的长度大于1500B时,网络层 IP 协议把这个大 IP 数据报切割成多个 IP 分片,每一个分片的总长度 ≤1500 字节,每个分片,各自封装成独立以太网帧发送
- CRC(4个字节):校验比特翻转

这里重点要解析的就是MAC地址,MAC地址的长度是6个字节,也就是48个比特位,IP地址是4个字节,也就是32个比特位,有42亿多种不同的组合
MAC地址的组合数:2 ^ 16 * 42亿 = 65536 * 42亿,这是个非常大的数,足够给每个设备分配个唯一的MAC地址,计算机/手机都有网卡,每台设备的MAC地址在网卡出厂时就已经写死了,因此mac地址也会作为一台机器的身份标识
很多外挂、破解软件、付费脚本就会做设备绑定,这个设备绑定就是通过计算机的MAC地址、主板序列号、CPU序列号…来进行绑定,这样保证卖出去一份只能在一台计算机上使用,防止买家买了之后到处分享、倒卖🐵
在cmd中输入ipconfig /all,无线局域网适配器WLAN部分的物理地址就是当前计算机无线网卡的MAC地址,MAC地址是用十六进制来表示的,两个十六进制数相当于是一个字节,字节之间通常使用"-" 或" :"来分隔开

-
在一些普通路由转发的场景下,是不涉及NAT机制的(例如企业内网之间的互通),这样在中途转发过程中源IP和目的IP是不会改变的,但是源MAC和目的MAC就都会改变,例如规划的路径是A -> B -> C,原来的源MAC和目的MAC分别是A和B,数据发到B之后,源MAC和目的MAC就分别变成了B和C
-
在NAT场景下,IP 头部会被 NAT 修改;同时二层 MAC 地址,依然每一跳路由都改变。两者是两套独立的修改,同时发生
其实理论上数据链路层也可以使用IP地址,网络层用MAC地址,这两套机制各司其职有各司其职的好处,这里就不再详细解析了
因为数据链路层对于绝大多数Java业务开发是完全接触不到的,因此这里铁汁们只是简单了解下数据链路层的相关知识即可🐵
类型部分是两个字节,表示帧里面数据部分封装的是什么协议,这部分表示是用4个十六进制数字表示的,主要有四种:
0800→ IPv4(交给网络层 IPv4 处理)86DD→ IPv6(交给网络层 IPv6 处理)0806→ ARP(已知 IP,查 MAC)8035→ RARP(已知MAC,查IP)
ARP(Address Resolution Protocol,地址解析协议)
也就是已知 IP,查 MAC :要发消息给同局域网另一台电脑,知道对方 IP,但不知道对方网卡 MAC 地址,这时计算机就向局域网中发一个广播包(喊给局域网里所有人:谁是 192.168.1.100?你的 MAC 是多少)
局域网所有机器都收到这个询问,IP匹配的那个机器会进行回复,这样就能得到这个机器的MAC地址,得到后把「IP-MAC 对应关系」存到本机 ARP 缓存表,后面发消息直接用这个 MAC
RARP(Reverse Address Resolution Protocol,逆地址解析协议)
也就是已知MAC,查IP:早期的无盘工作站,机器没有硬盘,开机不能读取本机 IP,就发 RARP 广播:我的 MAC 是 XXX,谁能告诉我我的 IP 是多少?局域网里专门的 RARP 服务器查到记录,回复它对应的 IP
因为几十年前计算机硬盘很贵,在学校机房、网吧中,就是几十台机器,只需要一台服务器装一块大硬盘,所有客户机都无盘启动,现在已经淘汰了,因此RARP协议也很少用到了
ARP 和 RARP报文如下图,报文本身是不携带业务数据的,因为数据帧的数据部分最少是46个字节,而这个ARP请求和应答只占了28个字节,是不够的,因此后面就用PAD来填充18个字节,PAD就是补 0,凑够以太网帧最小长度,纯空填充,没有任何有效数据

3,MAC转发表
MAC转发表中记录的是MAC地址 -> 交换机的网口编号
交换机收到一个数据帧后,就看这个帧从哪个端口进来,接着把【源 MAC】和【入端口】写入 MAC 转发表,这就是自学习,也即是自动记住:这个 MAC 的设备在哪个网口下面(当然,如果转发表中已经有相关记录了,就不写入了)
如果查不到这个目的 MAC:就会进行广播,把这个帧从除了入端口以外所有端口复制一份发出去,希望目标设备收到并回复,交换机就能学到它的 MAC
结语💕💕
- 到这里就把TCP/IP 五层模型就详细解析完成了,这部分涉及到的知识还是比较繁多的,在日常开发中比较重要,也属于面试中的一个高频考点
- 在进行数据通信时,程序员接触到的就是应用层,下篇博客就会开始解析应用层的HTTP协议
以上就是今天的所有内容啦~完结撒花~🥳🎉🎉

🎆个人主页:
2472



被折叠的 条评论
为什么被折叠?



