网络协议-TCP/IP基础(4)
- 当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机的时候,是根据48bit的以太网地址确定目的接口的,设备驱动程序从不检查IP数据报中的目的IP地址。
- 地址解析为这两种不同的地址形式提供映射:32bit的IP地址和数据链路层使用的任何类型的地址。
- ARP为IP地址到对应的硬件地址提供动态映射,之所以用动态这个词是因为这个过程是自动完成的,一般应用程序用户或系统管理员不必关心。
- RARP是被那些没有磁盘驱动器的系统使用,他需要系统管理员进行手动设置。
ARP的过程
任何时候敲入下面这个形式的命令:
ftp bsdi
都会进行以下步骤:
- 应用程序FTP客户端调用函数gethostbyname(把主机名bsdi)转换成32bit的IP地址,这个函数在DNS中叫做解析器,这个转换过程或者使用DNS,或者在较小的网络中使用一个静态的主机文件(/etc/hosts)
- FTP客户端请求TCP用得到的IP地址建立连接。
- TCP发送一个连接请求分段到远端的主机,即用上述IP地址发送一个IP数据报
- 如果目的主机在本地网络上,那么IP数据报可以直接送到目的主机上,如果目的主机在一个远程网络上,那么就通过IP选路函数确定位于本地网络上的下一站路由器地址,并让它转发IP数据报,在这两种情况下,IP数据报都是被送到本地的主机或者路由器上。
- 假定是一个以太网,那么发送端主机必须把32bitIP地址转换为48bit的以太网地址,从逻辑Internet地址到对应的物理地址需要进行翻译,这就是ARP的功能。
- ARP发送一份称作ARP请求的以太网数据帧给以太网上的每一台主机,即广播。
- 目的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答,这个应答包括IP地址及对应的硬件地址。
- 收到ARP应答后,使ARP进行请求,应答交换的IP数据报现在可以传送。
- 发送IP数据报到目的主机。
ARP背后的一个基本概念
- 在ARP背后有一个基本概念,那就是网络接口有一个硬件地址(一个48bit值,标识不同的以太网或令牌环网络接口),在硬件层次上进行的数据帧交换必须有正确的接口地址,但是TCP/IP有自己的地址,即32bit的IP地址,知道主机IP地址并不能让内核发送一帧数据给主机,内核必须知道目的端的硬件地址才能发送数据,ARP功能是在32bit的IP地址和采用不同技术的硬件地址之间的动态映射。
- 点对点链路不使用ARP,当设置这些链路时,必须告知内核链路每一端的IP地址。
ARP的分组格式
在以太网上解析IP地址时,ARP请求和应答分组的格式如图
- 以太网报头中的前两个字段是以太网的源地址和目的地址,目的地址全为1的特殊地址是广播地址,电缆上所有的以太网接口都要接收广播的数据帧。
- 两个字节长的以太网帧类型标识后面数据的类型,对于ARP请求或者应答来说,该字段的值为0x0806。
- 硬件类型字段标识硬件地址的类型,它的值为1即标识以太网的地址,协议类型字段表示要映射的协议地址类型,0x0800即标识IP地址。
- 对于一个ARP请求来说,除目的端硬件地址外的所有其他字段都有填充值,当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换发送端地址,并把操作字段置为2,最后发送回去。