[TCP/IP] 数据链路层协议: 以太网帧协议格式、局域网内部通信原理、ARP协议...
TCP/IP
协议栈 四层模型, 应用层、传输层、网络层 以及数据链路层, 分别在网络通信中担任不同的角色-
应用层协议
应用层协议, 通常是用户最需要关注的内容, 因为它关系着用户数据实际的格式, 决定了对端能否正确的解析出真实有效的数据, 以及数据的加密等内容
常用的有
HTTP
、HTTPS
等 -
传输层协议
传输层协议的使用, 更多与通信的场景有关, 数据传输是否需要保障可靠性, 通信是否需要建立连接等等
常用的有
UDP
、TCP
协议等 -
网络层协议
网络层协议, 主要作用是要实现网络的构建, 并且为数据提供跨网络传输的能力
常用的有
IP
协议等
以太网帧协议
MAC
地址, MAC
地址是硬件出场时就设定好的, 通常是全球唯一的(实际上并总是需要, 一般情况下只需要在所在网络内保持唯一就可以了)MAC
地址的长度为48位, 一般用16进制加上:
表示, 比如:d8:80:83:21:02:95
MAC
地址是用来确定局域网内唯一的网络设备的IP
协议已经能让主机在网络中唯一了, 为什么还要用MAC
地址确定局域网内的唯一设备呢?IP
的作用除了能够确定网络中的唯一主机之外, 最主要的作用其实是路由IP
的网络号, 可以快速排除非目标网络, 进而实现数据的在不同网络中的快速路由IP
地址确定局域网内的主机, 而是会通过IP
查询局域网内对应设备的MAC
地址, 获取到MAC
地址之后, 才会向此MAC
地址的设备 发送数据MAC
地址, 实现同一局域网内设备之间的通信以太网帧格式
实际, 前边(左边)还存在两个字段7字节的前导码和1字节的帧开始界定符
这两个字段内容是固定的, 用户不用考虑
-
6
字节 目的MAC
地址即, 目标局域网内 目标主机的
MAC
地址 -
6
字节 源MAC
地址即, 发送端主机的
MAC
地址 -
2
字节 类型此字段用于区分以太网帧的数据类型
以太网帧数据是存在不同类型的:
IP
ARP
RARP
0x0800
表示IPv4
数据类型0x0806
表示ARP
数据类型0x8035
表示RARP
数据类型 -
46~1500
字节 数据这里就是上层协议交付下来的数据 或
ARP
RARP
数据具体要根据上一个字段 判断
-
4
字节CRC
即, 数据校验码
MAC
地址定位唯一的设备, 所以 以太网帧又被称为MAC
帧MAC
帧的非数据字段是固定的: 6Byte DestMAC + 6Byte SourceMAC + 2Byte DataType + 4Byte CRC
MAC
帧的封装和解包的问题数据在局域网内的传输**
MAC
地址确定的MAC
地址和目的MAC
地址 和 数据 之后, 将数据发送到局域网中, 局域网中的设备就能根据以太网帧中的目的MAC
地址接收数据MAC1
要向MAC7
发任意数据, 则MAC1
会填充以太网帧:MAC1
主机 将封装完成的MAC
帧发送到总线上, 就相当于发送到了局域网中MAC7
设备如何知道这数据是发给它的呢?MAC7
要想知道这个MAC
帧是给它发送的, MAC7
就要接收这个MAC
帧 然后读取其中的目的MAC
地址, 然后进行对比 才能确认. MAC7
也确实是这样接收到数据的MAC
帧的目的MAC
地址, 如果MAC
地址对比正确, 就解包并向上层交付, 否则 就丢弃MAC1
向总线中发数据的时, 已经有其他设备向总线中发送了数据MAC
帧的形式传输的, 确定唯一主机的依据是MAC
地址MAC
地址?MAC
地址是网络设备的物理地址, 发送方明显是无法默认已知对方设备的MAC
地址的MAC
地址如何获取呢?ARP
协议进行询问ARP
协议
ARP
协议全称为: Address Resolution Protocol
地址解析协议, 是用来将IP
地址解析为MAC
地址的IP
地址本身进行解析, 而是通过IP
地址进行MAC
地址询问IP
地址, 在局域网内是唯一的, 即 可以表示局域网内的唯一主机ARP
协议, 就是用IP
地址找局域网内的唯一主机, 并询问目标主机的MAC
地址, 以获取目标主机的MAC
地址ARP
协议格式
以太网帧中表示帧类型的字段填充不同值, 表示的帧类型不同
0x0800
表示IPv4
数据类型
0x0806
表示ARP
数据类型
0x8035
表示RARP
数据类型
APR
帧数据格式:-
2字节 硬件类型
用于表示 数据链路层的网络类型,
1
表示以太网 -
2字节 协议类型
用于表示 网络层的协议类型, 即 要被转换的地址类型,
0x0800
表示IPv4
地址 -
1字节 硬件地址长度
与第一个字段对应, 以太网地址长度为
6
字节 -
1字节 协议地址长度
与第二个字段对应,
IP
地址长度为4
字节 -
2字节
OP
填充操作类型,
1
表示ARP
请求,2
表示ARP
响应 -
6字节 发送端
MAC
地址发送 此
ARP
帧的设备的MAC
地址 -
4字节 发送端
IP
地址发送 此
ARP
帧的设备的IP
地址 -
6字节 目的端
MAC
地址此
ARP
帧的目的设备的MAC
地址 -
4字节 目的端
IP
地址此
ARP
帧的目的设备的IP
地址
ARP
协议帧格式比较容易理解目的MAC
的获取过程
A (MAC:D8:80:83:21:02:95, IP:192.168.5.131)
B (MAC:08:00:27:03:FB:19, IP:192.168.5.135)
为例A
需要获取主机B
的MAC
地址时, 主机A
就会向局域网中发送ARP
请求, 一般可能会将数据填充为:MAC
地址是未知的, 需要获取的OP
字段, 被填充为1
表示此帧为ARP
请求帧, 是请求硬件地址的B
的IP
, 即 表示要获取哪一个硬件的地址, 此例中为 主机B对应IP
的硬件ARP
帧之后:- 首先, 读取目的MAC地址, 辨别自己是否为目标主机 (广播)
- 然后, 读取帧类型字段, 辨别出是
ARP
帧 - 然后, 读取
ARP
帧的**OP
**字段, 辨别出是ARP
请求 - 然后, 读取
ARP
帧的**目的IP
**字段, 辨别自己是否为目标主机
B
收到此APR
请求帧之后, 就会进行应答, 一般可能会将数据填充为:ARP
应答帧填充的比较完整OP
字段, 被填充为2
表示此帧为ARP
应答帧, 即 此帧中填充有请求结果APR
帧之后:- 首先, 读取目的MAC地址, 辨别自己是否为目标主机
- 然后, 读取帧类型字段, 辨别出是
ARP
帧 - 然后, 读取
ARP
帧的**OP
**字段, 辨别出是ARP
应答 - 然后, 读取
ARP
帧的**发送方IP
和发送方MAC
**字段, 获取到IP
对应的MAC
地址
A
收到此ARP
之后, 就能获取到目标IP
对应的目标MAC
MTU
最大传输单元
IP
协议报头中存在三个字段, 是关于数据分片的IP
协议可能需要对传输层交付下来的数据进行分片IP
协议可能需要进行分片的原因就是 数据链路层存在一个MTU
MTU
是数据链路层中, 传输的单个帧中数据字段的最大字节数[46, 1500]
MTU
为1500
字节, 这是标准规定的, 当数据大小不在此范围内, 数据链路层就会丢弃上层交付下来的数据, 不进行传输1500
字节时, IP
协议就需要对数据进行分片数据链路层存在
MTU
一定是为了传输效率考虑的因为数据链路层主要是负责局域网内通信的, 数据帧在局域网总线中传输时, 可能会发生碰撞, 此时就需要让数据帧保持一个相对合适的长度
如果过长, 为了避免碰撞, 等待数据传输的时间就会过长, 影响传输效率
如果过短, 需要传输的帧数量就会提升, 可能会更高频率的发生碰撞, 同样会影响传输效率
Windows
平台, 可以在Powershell
执行Get-NetIPInterface
查看设备的MTU
:Linux
平台, 则可以通过ifconfig
查看网络设备的MTU
:MTU
对IP
协议的影响
IP
协议来说, IP
协议保证向下交付的数据大小不能超过MTU
, 所以 IP
协议需要对 传输层交付过来的较大的数据进行分片处理MTU
对UDP
协议的影响
UDP
协议是无连接的、不可靠的传输协议UDP
协议向网络层交付的数据包过大, 并且IP
协议没有对UDP
数据包进行分片, 那么UDP
数据包在数据链路层会被直接丢弃UDP
是不可靠的传输协议, 被丢弃的数据包不会进行重传, UDP
数据包丢失就是丢失了MTU
可能会导致UDP
数据包丢失MTU
对TCP
协议的影响
TCP
协议虽然是可靠的传输协议, 但是由于MTU
的存在, 还是不能无限制的大TCP
数据过大, IP
协议就会更多的进行分片, 分片越多分片丢失个概率越大. 单个分片丢失, 就认为整个TCP
数据都丢失了, TCP
协议就会进行重传, 会影响TCP
通信的效率TCP
报头选项中存在一个字段MSS(Max Segment Size)
, 此字段表示TCP
单个数据报的最大长度MSS
字段可以在建立TCP
连接时 协商双方支持的MSS
, 最终选择较小值作为本次连接的MSS
MSS
表示的是 一个完整的TCP
数据报的最大长度, 即 TCP
能交付给IP
协议的最大长度作者: 哈米d1ch 发表日期:2024 年 11 月 29 日