TCP/IP协议卷学习---基础部分(四 ARP协议)
1 ARP过程(ftp bsdi bsdi一个域名举例)
①通过DNS解析出主机IP地址
②准备与目标地址建立TCP链接,发送TCP数据包并通过IP包装
③如果目标主机在本地网络上,那么数据可以直接发送到目标主机,如果数据不在本地网络上,则通过选路函数先发送给默认路由,再有下一站路由转发
④假定目标机器是本地以太网上的一台机器,则需要知道这台机器的MAC地址才能发送数据,因此首先需要将ARP请求广播到本地网络的每台主机上。包括目标主机的IP,意思为谁为这个IP则回复你的MAC地址
⑤目标主机收到这份广播后判断自己是不是这个IP,如果是则应答ARP请求并附上自己的IP+MAC。
⑥收到ARP应答之后将目标硬件地址与IP缓存到本地的ARP高速缓存中,默认存储20分钟。并发送IP数据包。(通过 arp -a 可以看到高速缓存中的arp地址)。
2 ARP的数据包
①以太网目标地址,目标地址全为1表示广播。源地址表示发起ARR请求主机MAC
②帧类型,表示后面的数据是什么类型的,ARP的帧类型为0X0806
③硬件类型,1表示以太网地址。协议类型,0X0800表示IP地址。因为ARP协议可以适用于多网络类型的多网络类型地址,所以这里区分硬件以及协议。
④硬件地址长度,以太网为6。协议地址长度,IP为4。
⑤op,操作字段。ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
⑥发送端以太地址,IP地址。接收端以太地址,IP地址。字面意思,注意,以太网首部的目的地址与这里的发送端以太网地址是相同的。在ARP请求中,没有的字段都是可以填充的,例如ARP请求中,没有目的以太地址,这里就可以填充占位。
⑦当主机发现自己就是目的以太地址时,只需要把OP改为2,然后写入发送端以太地址,并把目的以太地址换为发送端的以太地址即可。
3 不存在的ARP主机
如果ARP的目的主机不存在,则第1次请求发生后5.5秒进行第2次请求,在24秒
之后又进行第3次请求(后面看T C P的超时和重发算法的细节)。tcpdump命令输出的超时限制为 29.5秒,大多数的超时时间都是75秒。
4 ARP代理
如果A R P请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托 A R P或A R P代理(Proxy ARP)。这样可以欺骗发起A R P请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。
5 免费ARP
在主机启动的时候可以发送一个ARP请求,携带自己的IP地址以及MAC,并且发送端以及接收端IP都是自己的IP,这个时候如果收到一个应答,则说明网络中有一个其他主机IP与自己重复,此时会在终端记录一条错误日志,并交给管理员来处理
主机关机重启可能换了网卡,这个时候其他主机接收到ARP请求之后,必须更新自己ARP高速缓存中的地址。
- TCP/IP协议卷学习---基础部分(十 IP动态选路(不完善,需要在多看几遍))
- TCP/IP协议卷学习---基础部分(九 IP静态选路)
- TCP/IP协议卷学习---基础部分(八 Traceroute程序)
- TCP/IP协议卷学习---基础部分(七 PING程序)
- TCP/IP协议卷学习---基础部分(六 ICMP控制报文协议)
- TCP/IP协议卷学习---基础部分(五 RARP协议)
- TCP/IP协议卷学习---基础部分(十六 BOOTP)
- TCP/IP协议卷学习---基础部分(十五 TFTP)
- TCP/IP协议卷学习---基础部分(十四 DNS)
- TCP/IP协议卷学习---基础部分(十三 IGMP)
- TCP/IP协议卷学习---基础部分(十二 广播和多播)
- TCP/IP协议卷学习---基础部分(十一 UDP 用户数据报协议)
- spring学习笔记1——部分基础及概念
- Java基础学习笔记 第二部分 part 3
- Swift 学习- 02 -- 基础部分2
- TCP/IP协议卷学习---TCP部分(十 TCP的成块数据流)
- C#语言学习--基础部分(十四)枚举类型和结构体(续)
- Three.js基础部分学习
- java基础学习day11 (开始API部分)下
- JAVA学习——基础部分——循环练习题