以太网以及ARP协议

本文介绍了以太网的基本概念,包括以太网帧结构、MTU(最大传输单元)及其对IP和TCP数据包的影响。此外,还详细阐述了ARP协议的工作流程及其在地址解析中的作用,以及RARP(反向地址转换协议)的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以太网:

以太网是一种局域网技术。当一个数据报到达数据链路层时,会对数据报进行以太网封装,形成以太网帧。

目的地址和源地址是6字节48位的mac地址,mac地址是用来识别链路层中相连的节点,也叫网卡的硬件地址,这个地址一般在网卡出厂时就固定了,不能修改(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡⽀持⽤户配置mac地址)。mac地址常用十六进制加冒号表示:08:00:27:03:fb:19。
2字节8位类型一共有三种,分别对应IP、ARP、RARP。
帧末尾是32位CRC校验码,用来检验数据传输是否损坏。

MTU

MTU是指最大传输单元,不同类型网络有不同的最大传输单元,以太网MTU一般为1500字节。如果一个数据包长度大于MTU,则需要被分片。
MTU对IP数据包的影响:
假如有一个IP数据报文长度为3008字节,在IP层封装一个IP协议头,一共为3028字节。因为3028>1500所以需要对IP数据包进行分片。但是分片时仅对上层的数据报分片,首部不需要分片。分片过程如下:
1.首先计算最大的IP包中IP净荷的长度 =MTU-IP包头长度=1500-20= 1480字节。
2.然后把3008字节按照1480字节的长度分片,将要分为3片,3008= 1480+1480+48。
3. 最后发送者将为3个分片分别添加IP包头,组成3个IP包后再发送,3个IP包的长度分别为1500字节、1500字节和 68字节。
每个小的IP数据包中头部16位标识都一样,每个小包的3位标志字段中第二位置为0,最后一个小包的第三位置1。
MTU对TCP数据包的影响:
TCP的一个数据包也不能无限长度,还是受制于MTU,一个TCP的单个数据段最大长度,称为MSS(Max Segment Size)。
TCP在建立连接时,双方会对MSS进行协商。最理想的情况下, MSS的值正好是在I

### ARP协议在网络通信中的角色 ARP(Address Resolution Protocol)协议用于将IP地址映射到对应的硬件地址(即MAC地址)。这一转换对于局域网内的设备间直接通信至关重要。当主机A要向同一子网内的另一台主机B发送数据时,需要知道目标机器的MAC地址来构建以太网帧头部[^1]。 ### ARP请求响应机制 在执行ARP查询的过程中,源节点会广播一个包含目的IP地址的信息给整个本地网络上的所有其他成员。接收到此消息后,只有拥有该特定IP地址的目标设备才会回应其自身的MAC地址作为确认回复。这种交互方式确保了即使是在不知道对方物理位置的情况下也能建立有效的连接路径[^2]。 ### ARP报文格式及其字段说明 ARP报文由多个部分组成,具体如下: - **硬件类型 (Hardware Type)**:指明使用的底层链路层技术; - **协议类型 (Protocol Type)**:表示高层传输协议,默认情况下为IPv4; - **硬件地址长度 (Hardware Address Length)** 和 **协议地址长度 (Protocol Address Length)** :定义各自类型的地址占用字节数量; - **操作码 (Operation Code, opCode)** : 表示当前动作是请求还是应答; - **发送方硬件地址 (Sender Hardware Address)** 及 **发送方协议地址(Sender IP Address)** ; - **目标硬件地址(Target Hardware Address)** 以及 **目标协议地址(Target IP Address)** 。这些信息共同构成了完整的ARP包头结构[^3]。 ```python # Python伪代码展示如何创建一个简单的ARP请求 import struct def create_arp_request(src_mac, src_ip, dst_ip): # 构建基本的ARP请求报文 arp_packet = b''.join([ struct.pack('!HHBB', 1, 0x800, 6, 4), # 硬件类型、协议类型、硬件地址长度、协议地址长度 struct.pack('!H', 1), # 操作码(1=请求) bytes.fromhex(':'.join([src_mac[i:i+2] for i in range(0, len(src_mac), 2)]).replace(':', '')), # 发送者硬件地址 socket.inet_aton(src_ip), # 发送者的IP地址 b'\x00' * 6, # 目标硬件地址未知填充为空白 socket.inet_aton(dst_ip) # 目标的IP地址 ]) return arp_packet ``` ### 使用Wireshark进行数据分析的方法 为了更好地理解上述理论概念,在实践中可以借助像Wireshark这样的工具来进行实时流量捕捉并仔细审查其中涉及的具体细节。启动程序之后设置过滤器仅显示感兴趣的事件比如`arp`或者更具体的条件如`(eth.src == XX:XX:XX:XX:XX:XX)`以便专注于某一台特定客户端发出的数据流。这有助于观察不同阶段下发生的活动模式,并加深对整体工作流程的认识程度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值