zoukankan      html  css  js  c++  java
  • 网络基础协议之ARP

    ARP 报文格式

     

    • 硬件类型:16位字段,用来定义运行ARP的网络类型。每个局域网基于其类型被指派一个整数。例如:以太网的类型为1。ARP可用在任何物理网络上。
    • 协议类型:16位字段,用来定义使用的协议。例如:对IPv4协议这个字段是0800。ARP可用于任何高层协议
    • 硬件长度:8位字段,用来定义物理地址的长度,以字节为单位。例如:对于以太网的值为6。
    • 协议长度:8位字段,用来定义逻辑地址的长度,以字节为单位。例如:对于IPv4协议的值为4。
    • 操作码:16位字段,用来定义报文的类型。已定义的分组类型有两种:ARP请求(1),ARP响应(2)。
    • 源硬件地址:这是一个可变长度字段,用来定义发送方的物理地址。例如:对于以太网这个字段的长度是6字节。
    • 源逻辑地址:这是一个可变长度字段,用来定义发送方的逻辑(IP)地址。例如:对于IP协议这个字段的长度是4字节。
    • 目的硬件地址:这是一个可变长度字段,用来定义目标的物理地址,例如,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址。
    • 目的逻辑地址:这是一个可变长度字段,用来定义目标的逻辑(IP)地址,对于IPv4协议这个字段的长度为4个字节。

    ARP报文总长度

    首先要知道帧的概念,帧是在数据链路层传输的数据格式,比如以太网v2,以太网IEEE802.3和PPP等。Wireshark抓到的帧是包含帧头的,即包含以太网v2的帧头,长14 bytes;而ARP数据包的长度固定为28 bytes;

    正常应用数据包帧总长度 = 帧头 + 网络层包头 + 传输层报文头 + 应用数据;

    而ARP请求中ARP包已经是最高层,之上没有传输层和应用层,所以总长度为:
    帧总长度 = 帧头 + ARP包头 = 14 + 28 = 42 bytes;

    而真正发包时为了保证以太网帧的最小帧长为64 bytes,会在报文里添加一个padding字段,用来填充数据包大小。但wireshark抓包时,抓到的包为60 bytes。比以太网帧的最小帧长少了4 bytes,原因是因为wireshark抓包时不能抓到数据包最后的CRC字段。
    CRC字段是为了校验以太网帧的正确性。在数据包填充完成后,回去通过算法计算一个值放到数据包的CRC字段中。当接受端收到数据包后,会同样使用算法计算一个值,然后和CRC字段的值进行对比,查看是否相同。如果不同则证明数据包被更改,如果相同则证明数据包并未被更改。

    参考文档

    • https://blog.csdn.net/ever_peng/article/details/80008638
    • https://en.wikipedia.org/wiki/Ethernet_frame#Header
    • https://blog.csdn.net/weixin_42531128/article/details/112713286
    心若向阳,无谓悲伤!
  • 相关阅读:
    BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)
    HDU5838 Mountain(状压DP + 容斥原理)
    HDU4787 GRE Words Revenge(AC自动机 分块 合并)
    HDU5909 Tree Cutting(树形DP + FWT)
    HDU5456 Matches Puzzle Game(DP)
    SPOJ DQUERY D-query(主席树)
    POJ2104 K-th Number(主席树)
    Tsinsen A1493 城市规划(DP + CDQ分治 + NTT)
    BZOJ3438 小M的作物(最小割)
    BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)
  • 原文地址:https://www.cnblogs.com/guge-94/p/14518801.html
Copyright © 2011-2022 走看看