4.2.3 IP 地址与 MAC 地址
IP地址:虚拟地址、软件地址、逻辑地址。 网络层和以上各层使用。 放在 IP 数据报的首部。
MAC地址:固化在网卡上的 ROM 中。硬件地址、物理地址。数据链路层使用。放在 MAC 帧的首部。IP 地址放在 IP 数据报的首部, MAC 地址则放在 MAC 帧的首部。
在 IP 层抽象的互联网上只能看到 IP 数据报,在局域网的链路层,只能看见 MAC 帧。在上图的通信途径中可以得到下图的表格。
4.2.4 地址解析协议 ARP
实现 IP 通信时使用了两个地址: IP 地址(网络层地址) MAC 地址(数据链路层地址)
那么我们知道IP地址该怎样去找到MAC地址呢?利用ARP协议来进行解析即可。
要点 1:ARP 高速缓存 (ARP cache)
存放 IP 地址到 MAC 地址的映射表。 映射表动态更新(新增或超时删除)。
< IP 地址;MAC 地址;生存时间 (Age);类型等 >
超过生存时间的项目都从高速缓存中删除,以适应网络适配器变化。
利用ARP协议进行查找IP地址对应的MAC地址。
本局域网上广播发送 ARP 请求(路由器不转发 ARP 请求)。
ARP 请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
单播 ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。 ARP 分组封装在以太网帧中传输。
具体流程如图所示:
ARP 高速缓存的作用:存放最近获得的 IP 地址到 MAC 地址的绑定。 减少 ARP 广播的通信量。 为进一步减少 ARP 通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到 MAC 地址的映射写入 ARP 请求分组。 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的 IP 地址及其对应的 MAC 地址映射写入主机 B 自己的 ARP 高速缓存中。不必在发送 ARP 请求。
2台主机不在同一个局域网中怎么办:
通信的路径:A → 经过 R1 转发 → B。 因此主机 A 必须知道路由器 R1 的 IP 地址,解析出其 MAC 地址。然后把 IP 数据报传送到路由器 R1。
使用 ARP 的四种典型情况:
1.发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
2.发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
3.发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
4.发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。
4.2.5 IP 数据报的格式
IP 数据报由首部和数据两部分组成
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。可选字段,其长度是可变的现在一般不用。
版本:占4位,指 IP 协议的版本。 目前的 IP 协议版本号为 4 (即 IPv4)。
首部长度:占 4 位,可表示的最大数值 是 15 个单位(一个单位为 4 字节), 因此 IP 的首部长度的最大值是 60 字节。
区分服务:占 8 位,用来获得更好的服务。 只有在使用区分服务(DiffServ)时,这个字段才起作用。 在一般的情况下都不使用这个字段。
总长度:占 16 位,指首部和数据之和的长度, 单位为字节,因此数据报的最大长度为 65535 字节。 总长度必须不超过最大传送单元 MTU。
标识 (identification) :占 16 位, 它是一个计数器,用来产生 IP 数据报的标识。每产生一个数据报,计数器就加1,并将此值赋值给标识字段。
标志(flag) :占 3 位,目前只有前两位有意义。 标志字段的最低位是 MF (More Fragment)。 MF=1 表示后面还有分片,MF=0 表示最后一个分片。 标志字段中间的一位是 DF (Don't Fragment) 。 只有当 DF=0 时才允许分片。
片偏移:占 13 位,指出:较长的分组在分片后 某片在原分组中的相对位置。 片偏移以 8 个字节为偏移单位。
生存时间:占 8 位,记为 TTL (Time To Live), 指示数据报在网络中可通过的路由器数的最大值。每经过一个路由器时,就把TTL减去在该路由器所消耗的时间。当TTL减为0时就丢弃这个数据报。
协议:占 8 位,指出此数据报携带的数据使用何种协议, 以便目的主机的 IP 层将数据部分上交给哪个处理过程。IP 协议支持多种协议,IP 数据报可以封装多种协议 PDU。
首部检验和:占 16 位,只检验数据报的首部, 不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
源地址:占 32 位发送主机的IP地址。
目的地址:占 32 位接受主机的IP地址。
4.3 IP 层转发分组的过程
1)基于终点的转发
分组在互联网中是逐跳转发的。 基于终点的转发:基于分组首部中的目的地址传送和转发。
为了压缩转发表的大小, 转发表中最主要的路由是(目的网络地址,下一跳地址) , 而不是(目的地址,下一跳地址)。 查找转发表的过程就是逐行寻找前缀匹配。
使用 CIDR 时,在查找转发表时可能会得到不止一个匹配结果。 最长前缀匹配原则:选择前缀最长的一个作为匹配的前缀。 网络前缀越长,其地址块就越小,因而路由就越具体。 可以把前缀最长的排在转发表的第 1 行。
最长前缀匹配: 选择前缀最长的一个作为匹配的前缀
网络前缀越长,其地址块就越小,路由就越具体。可以把前缀最长的排在转发表的第 1 行,以加快查表。
转发表中的 2 种特殊的路由
主机路由 (host route) 又叫做特定主机路由。 是对特定目的主机的 IP 地址专门指明的一个路由。 网络前缀就是 a.b.c.d/32 放在转发表的最前面。
默认路由 (default route) 不管分组的最终目的网络在哪里,都由指定的路由器 R 来处理 用特殊前缀 0.0.0.0/0 表示。只要进行匹配的时候无法查找到相匹配的就转到默认路由当中,再让默认路由转发到下一个路由当中。
路由分组转发算法流程图: