• TCP/IP之ARP,RARP


    在之前的一篇文章,TCP/IP链路层协议中说到,在以太网链路传输中,必需是以48比特位的网络接口硬件地址建立连接的,而我们应用程序之间的通信是以32比特位的IP地址建立连接的,这就需要我们把32比特的IP地址映射到48比特的硬件地址(MAC地址)。ARP(address resolution protocol),RARP(reverse address resolution protocol),就是针对这一功能定义的协议规范。

    ARP使用示例

    假如现在我本机IP是:192.168.1.112,机器名为tony,我现在想telnet远程到192.168.1.100上进行相关远程操作。执行如下命令:

    telnet 192.168.1.100

    我们现在用tcpdump命令拦截下与192.168.1.100之间通信的数据:

    1 21:30:53.971987 ARP, Request who-has 192.168.1.100 tell tony.local, length 28
    2 21:30:54.050752 ARP, Reply 192.168.1.100 is-at 6c:c2:6b:5c:c5:94 (oui Unknown), length 46
    3 21:30:54.050775 IP tony.local.53729 > 192.168.1.100.telnet: Flags [S], seq 248247383, win 14600, options [mss 1460,sackOK,TS val 9897001 ecr 0,nop,wscale 4], length 0
    4 21:30:54.055145 IP 192.168.1.100.telnet > tony.local.53729: Flags [R.], seq 0, ack 248247384, win 0, length 0

    第一行:执行ARP,发起请求(request),询问192.168.1.100和哪个硬件地址相匹配(who-has)。

    第二行:ARP返回数据(reply),回复192.168.1.100在(is-at)6c:c2:6b:5c:c5:94上。

    后续与192.168.1.100之间链路线上的通信则数据全部以6c:c2:6b:5c:c5:94硬件地址的信息放在数据帧的头部中传输。

    ARP分组格式

     

    • 以太网目的地址和以太网源地址分别是指6字节,48bit的硬件地址。当「以太网目的地址」为:FF:FF:FF:FF:FF:FF,即全部为1时,则表示这是个广播地址,所有的以太网接口都要接收这个帧数据。当发送ARP请求数据帧时,因为是要请求查找指定的IP地址所映射的硬件地址,所以会广播所有的网络上的主机,则此时的目的以太网地址就是:FF:FF:FF:FF:FF:FF
    • 帧类型,对于ARP请求/应答来说,值为:0x0806,对于RARP请求/应答,值为:0x8035,对于IP数据报,值为:0x0800
    • 硬件类型表示硬件地址的类型,以太网地址时值为1
    • 协议类型表示要映射的协议地址类型,IP地址协议时值为:0x800,如果你观察仔细,它对应于前面「帧类型」为IP数据报时的值。
    • 硬件地址长度和协议地址长度这里分别是:6,4.因为MAC地址是6字节,IP地址是4字节。
    • op:操作类型,它有四种类型。ARP请求是1,ARP回答是2,RARP请求是3,RARP应答是4。这个字段值是必需的,否则无法判断一个帧数据是请求还是应答类型(以太网首部中帧类型只有ARP/RARP类型,没有细分到到请求/应答)。
    • 接下来的发送端/目的端 以太网地址(硬件地址),发送端/目的端 IP地址,则是ARP/RAPR请求数据的本质内容。

    ---------待续 

    原创文章,转载请注明出处,谢谢!

  • 相关阅读:
    Java ClassLoader
    Java Hashcode
    Java 装箱 拆箱
    Java 深拷贝,浅拷贝
    Java IO流
    JVM内存模型
    C语言中的__FILE__、__LINE__和#line
    OpenMP和MPI的区别
    visual studio代码备份精减
    MVVM设计模式在WPF中的应用
  • 原文地址:https://www.cnblogs.com/jcli/p/2890821.html
Copyright © 2020-2023  润新知