数据是如何到达目标主机的

背景

最近重新翻看了图解TCP/IP,有必要将一些知识点记下来,方便以后自己和其他人理解记忆。本文主要总结一个数据是如何发送到目标主机的。

假设模型

模型中假设主机1(IP地址为:192.168.1.3) 要给主机2(IP地址为:192.168.2.3)发送数据。

背景知识

OSI 模型和 和 以太网帧

根据OSI参考模型,每层都将上次传递过来的数据添加本层的头信息后发送给下一层。

以太网帧头 IP数据报头 TCP包头 数据 FCS

802.3 以太网帧头

从802.3 以太网帧头格式可以知道,发送方需要知道目的主机的的MAC地址。
那如何得到目的主机的MAC地址呢?答案是通过ARP

如何具体总结如下:

ARP协议

ARP(地址解析协议,全称:Address Resolution Protocol)是一个通过解析网络层地址(IP地址)来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要。ARP最初在1982年的RFC 826(征求意见稿)[1]中提出并纳入互联网标准 STD 37. ARP 也可能指是在多数操作系统中管理其相关地址的一个进程。

在同一个网段
  1. ARP高速缓存有目标IP的MAC地址。
  2. ARP高速缓存没有目标IP的MAC地址,通过ARP广播请求目标IP的MAC地址,缓存该MAC地址。
不在同一个网段

主机通过子网掩码和目的IP进行运算,判断是不是同一个网络号。

不是同一个网段:则需要将包发给默认网关,所以需要获取网关的MAC地址。

  1. ARP高速缓存有默认网关的MAC地址:直接封包发送给默认网关,再由网关转发到目标网络。
  2. ARP高速缓存没有默认网关的MAC地址 :还是发送ARP广播请求默认网关的MAC地址,缓存该地址,并且发送数据报到网关。

注意:

  1. 所以主机上配置的默认网关IP非常重要。
  2. 通过手动配置,也可以分属于不同网段或子网的两台主机进行通信,原因是数据链路层根本不关心IP地址是不是同一个网段或子网。二层交换机在广播ARP请求时,所有连接到交换机端口上的主机都可以做出响应,交换机通过学习,可以把所有端口和MAC地址的对应关系拿到并缓存起来。

不同VLAN的通信方式

单臂路由

缺点:如果不同VLAN间的流量非常大,那么路由器就会成为瓶颈,出现掉包、或者通信堵塞。

三层交换机

三层交换机本质上具备路由功能的二层交换机。

在三层交换机内部,分别设置了交换机模块和路由器模块;而内置的路由模块与交换模块相同,使用ASIC硬件处理路由。因此,与传统的路由器相比,可以实现高速路由。并且,路由与交换模块是汇聚链接的,由于是内部连接,可以确保相当大的带宽,所以对于正规的项目,需要使用三层交换机来实现网网络间的通信。

总结

a. 第一步,通过ARP获取目标主机的MAC地址,如果不在同一个网段或子网,则获取默认网关的MAC地址(网关一般是路由器,它会响应ARP广播请求,返回自己的MAC地址)。
b. 第二步,二层交换机通过分析目标MAC地址,查转发表,把帧发送到对应的端口上,这个端口可能对应的是同一个网段的主机或是路由器。
c. 第三步,路由器拿到帧数据后,发现数据帧中的目标MAC地址是自己的某一个端口的物理地址,这时路由器会把以太网数据帧的封装去掉。获取帧里面的目标IP地址(路由器工作在OSI模型的网络层,所以需要一直解析包数据,直到获取IP数据报头信息),判断目标IP是不是本地网络(通过网络号),不是则通过路由表查找下一个跳路由器的IP(没有路由项,则使用缺省路由)。获取IP后,继续通过ARP获取下一跳路由器的MAC地址,重新封包后发送到一下跳路由器。后续的路由转发都是以此规则进行。
d. 目标网络的网关路由器发现目标IP地址是本网段的IP,通过ARP获取目标IP的MAC地址,重新封装后发送到对应的端口,该端口后面是二层交换机。
e. 二层交换机通过目标IP查找转发表,获取目标IP对应的MAC地址和端口,将数据转发到指定的端口,目标数据就收到了数据。
f. 主机验证MAC地址和IP地址是否属于本机,是本机则投递给协议栈对应的层进行处理。

  1. 路由器转发数据包不会对它的IP源地址和目标地址做修改,只会修改MAC
  2. 有一种情况,源和目标IP是被改变的,那就是NAT
  3. 路由的每一条可用的路由都和路由嚣上的接口是对应的
  4. 路由表和MAC转发表的区别在于,路由表存放的是目的IP下一步要去的地方的IP。
  5. 广播在路由器能够结束,原因就是路由器会在查找不到对应MAC表时,根据目的IP进行路由。路由过程的两种情况都不存在广播。

路由表:

路由表存储的信息包括:
直连路径:来自活动路由接口的路径。当接口为活动状态并配置了IP地址时,路由器添加一条直连路径。
远端路径:远端的网络连接到其他路由。通过静态配置或动态路由协议到达该网络。
路由表是存储在RAM中的一份数据文件,用于存储直连以及远端网络的路由信息。路由表中包含网络或下一跳地址的信息。这些信息告知路由器可以通过将报文发送至代表下一跳地址的路由器以最佳路劲到达目的地址。下一跳信息也可以是到下一个目的地的输出接口。

参考资料

https://www.bilibili.com/read/cv3673331/
https://wizardforcel.gitbooks.io/network-basic/3.html

文章目录
  1. 1. 背景
  2. 2. 假设模型
  3. 3. 背景知识
    1. 3.1. OSI 模型和 和 以太网帧
    2. 3.2. ARP协议
      1. 3.2.1. 在同一个网段
      2. 3.2.2. 不在同一个网段
  4. 4. 不同VLAN的通信方式
    1. 4.1. 单臂路由
    2. 4.2. 三层交换机
  5. 5. 总结
    1. 5.1. 路由表:
  6. 6. 参考资料
|