TCP/IP详解卷一: 协议之第4~6章

Posted winwink

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP详解卷一: 协议之第4~6章相关的知识,希望对你有一定的参考价值。

p38~p60.

第4章 ARP

这一章看了半天, 没看懂. 就去找了另外一部计算机网络经典<计算机网络 自顶向下方法>, 其中的5.4.1章(Link-Layer Addressing and ARP)讲的就是ARP, 这部分读起来简单多了.
以下为摘要.

上面我们讲了主机和路由器有网络层地址(IP地址), 现在我们讲还有链路层地址(MAC地址), 那为什么有了网络层地址, 还要有链路层地址呢?

MAC

一个链路层地址又称局域网地址, 物理地址, 或者MAC地址.因为MAC地址最为常用, 所以后面都称为MAC地址. 一般MAC地址的长度是6byte, 有2^48个地址. 尽管可以用软件修改MAC地址, 我们暂且认为MAC地址是固定的.

一个有趣的事情是, 任意2个网卡的MAC地址是不同的. 你可能会觉得奇怪, 这些网卡由不同的国家不同的工厂生产, 为何能保证唯一性. 其实是IEEE协会在发放MAC地址, 当一个公司想生产网卡, 必须向IEEE协会购买一个区段的地址. IEEE保证前24位地址是唯一的, 后面的24位由生产网卡的公司自己保证唯一. 2^24 = 1600万.

MAC地址是不会变的, 不会随计算机移动而变化, 而IP地址是会变的, 当计算机移动到另一个网络时, IP随之改变. 类比人, 就像身份证号码和门牌号, 身份证号码不会改变, 搬到不同的地方住, 就会有不同的门牌号.

应用层的主机名, 网络层的IP地址, 链路层的MAC地址.

ARP

假设一个IP 222.222.222.220想给222.222.222.222发送一个IP数据报, 在这个例子中, 源地址和目的地址在一个子网中, 为了发送数据包, 只有IP地址是不够的, 还需要知道目的地址的MAC地址.

这时就需要ARP协议了, 输入一个本子网内的任意IP, 返回这个IP的主机的MAC地址.

那ARP协议是怎样将IP地址解析为MAC地址的, 很多情况下很像DNS协议, 将主机名解析为IP地址. 然后重要的区别是DNS可以处理因特网上任意的主机名, ARP协议只处理本子网内的IP, 假如输入的不是本子网内的IP, 那么ARP就会报错.

让我们看看ARP如何工作的, 每个主机和路由器都有一个ARP表, 记录了IP地址和MAC地址的映射关系, 输入arp -a的命令可以看到. ARP表也包含一列, TTL, 用来标识该记录的失效时间. 标准的有效时间是20分钟, 即往ARP表中新加一条记录后, 20分钟后失效. 现在假设222.222.222.220想向222.222.222.222发送一个数据报, 发送方需要知道目的主机的MAC地址, 如果ARP表中有目的主机的MAC地址就好办了, 查表就行了. 但是如果没有呢? 发送方创建了一个特殊的报文, 叫ARP数据报, 里面包含了源主机的IP地址和MAC地址, 以及目的主机的IP地址, 然后发往MAC广播地址, FF-FF-FF-FF-FF-FF, 这个报文会广播给子网内的每个主机和路由器, 就向一个人在一个有很多人的屋子里喊话, "222.222.222.222的身份证号码是多少?". 每个收到消息的主机都会接收到报文, 并交给ARP模块处理, ARP模块检查IP是否和自己的IP相匹配, 只有匹配了IP的主机才会回复, 它会将自己的MAC地址放到报文中发回给源主机. 源主机收到报文后, 取出目的主机的MAC地址, 将IP地址和MAC地址维护到ARP表中.

这其中有很多有意思的事, 首先, ARP请求报文是广播形式的, 而ARP回复报文却是标准形式的. 其次, ARP是即插即用的, 不是必须由管理员事先配置的, ARP系统是自动适应的. 如果一台主机离开了这个子网, 子网中其它主机最终会自动将这个主机从ARP表中删除的.

向不是一个子网发送IP数据报

每个主机都有一个网卡和一个IP地址, 但对于路由器, 每个接口都有一个IP地址, 每个接口中有一个网络适配器和一个IP地址. 如下图所示, 一个简单的跨子网的情景.
技术图片

子网1是111.111.111/24, 子网2是222.222.222/24. 假设子网1的主机111.111.111.111想给子网2的主机222.222.222.222发送数据报. 发送数据报文前必须知道目的主机的MAC地址. 目的MAC地址应该填什么呢, 是222.222.222.222的MAC地址49-BD-D2-C7-56-2A吗? 错! 如果是用的这个MAC地址, 则数据报还没出这个子网就挂了.

从图中我们知道, 要想出这个子网, 首先要从路由器的接口1(111.111.111.110)出. 所以报文要先发给这个接口, 目的IP填222.222.222.222, 目的MAC地址填111.111.111.110的MAC地址. MAC如何来, 用ARP协议进行查询, 查到后, 将报文发给接口1. 接口1的链路层接收到报文, MAC地址匹配, 将报文传递给网络层, 网络层发现IP不匹配, 将要执行转发操作, 需要去查路由表, 路由表中表明将数据发给接口2即可. 接口2接收到报文, 发现IP属于这个子网, 但是不知道目的主机的MAC地址, 所以先用ARP协议查下目的主机的MAC地址, 查到后目的MAC地址填49-BD-D2-C7-56-2A, 将报文发出去, 222.222.222.222收到报文后, 发现是发给自己的报文, 进行处理. 就这样, 经历了ARP协议 ~ 路由转发 ~ ARP协议, 数据报就在跨网段中到达了目的主机.

以上是关于TCP/IP详解卷一: 协议之第4~6章的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP协议详解 卷一:协议 17章TCP传输控制协议

TCP/IP协议详解 卷一:协议 20章TCP的成块数据流

《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)

TCP/IP详解卷一06

完结^_^撒花TCP/IP 详解 卷一:协议 笔记

TCP/IP详解卷一01