网络协议

详解网络分层和网络协议工作原理
帅旋
关注
充电
IT宅站长,技术博主,共享单车手,全网id:arthinking。

网关与路由器 | IP,路由器,网关

发布于 2020-07-26 | 更新于 2024-04-13

在讲数据链路层的时候,我们用一个交换机,就构建了一个局域网。但是现在我们局域网里面的一台机器,想要访问另一个局域网的机器,怎么办呢。这就是本节讨论的内容。

我们必须先连接下IP协议。

1、IP协议

IP是TCP/IP协议簇中最核心的协议,所有TCP、UDP、ICMP等数据都已IP数据报格式进行传输。

1.1、IP协议特点

  • IP协议是不可靠的传输协议,上一级我们讲到到了ICMP协议,每当传输出现异常,IP层都会丢弃数据包,并且可能会响应一个ICMP差错消息给发送端,而任何要求的可靠性必须由上层如TCP协议来提供
  • IP协议是无连接的,也就是说IP不维护任何关于后续数据报的状态信息,每个数据报相互独立。具体表现在:可以不按发送顺序接收,不用维护连接状态,免去了维护复制的链接状态信息(后面讲传输层的TCP协议的时候会介绍到)。

1.2、IP数据报格式

下面是IP数据报的格式:

image-20211023120534589

  • 版本:协议版本号,指明IPv4还是IPv6;
  • 头部长度:最长60个字节;
  • 服务类型:包含3bit优先权子字段(已被忽略),4bit TOS子字段(分别代表最小时延、最大吞吐量、最高可靠性和最小费用)和1bit未用位但必须置0;
  • 总长度:指的是整个IP数据报的长度,单位字节;
  • 标识符:唯一地标识主机发送的每一份数据报,通常每发送一个数据报就+1;
  • 标志:主要用于IP分片;
  • 分片偏移:主要用于IP分片;
  • 生存期:设置数据报可以经过最多的路由器数;
  • 协议:主要表明IP数据是什么协议,用于对数据报进行分用;
  • 头部校验和:校验数据报是否正确;
  • 源IP地址:发送IP数据报的IP地址;
  • 目的IP地址:IP数据报目的IP地址;
  • 选项:可选数据;
  • IP数据:具体的IP数据;

2、路由器

路由器一般充当一个网关,属于三层设备。会把MAC和IP头取下来根据内容进行处理。路由器有五个网口,分别可以连接5个局域网,每个网口和局域网的IP地址相同的网段,每个网口都是对应的局域网的网关。

5个网口中一般包含一个外网网口,外网网口用于连接到WAN上。

路由器除了有交换机的功能外,更拥有路由表作为发送数据包时的依据,在有多种选择的路径中选择最佳的路径。

一层设备、二层设备、三层设备分别有什么区别?

路由器是属于OSI第三层的产品,交換机是OSI第二层的产品。

第二层的产品功能在于,将网络上各个电脑的MAC地址记在MAC地址表中,当局域网中的电脑要经过交换机去交换传递数据时,就查询交换机上的MAC地址表中的信息,将数据包发送给指定的电脑,而不会像第一层的产品(如集线器)每台在网络中的电脑都发送。

而路由器除了有交换机的功能外,更拥有路由表作为发送数据包时的依据,在有多种选择的路径中选择最佳的路径。此外,并可以连接两个以上不同网段的网络,而交换机只能连接两个。路由表存储了(向前往)某一网络的最佳路径、该路径的“路由度量值”以及下一个(跳路由器)

网关地址一般是网段的第一个或者第二个,如192.168.23.0/24这个网段,网关地址可能是192.168.23.1/24或者192.168.23.2/24。

在不同的局域网中,私有IP地址是会重复的,而我们要访问公网的时候,一定要分配一个共有IP地址,所以,我们在访问公网的时候,需要路由器帮忙把私有IP变为共有IP,这种叫做NAT网关,普通内网之间的通信用到的称为转发网关

我们先来看看转发网关。

2.1、转发网关

假设主机A和主机B属于同一个内网,他们通过两个路由器连接起来,如下图:

image-20211023122031311

主机A要访问主机B,流程如下:

  • 主机A发现要访问的主机B不是在同一个网段,准备先找到网关,把消息发给网关,网关地址是192.168.1.1,主机A通过ARP获取到了网关的MAC地址,然后发送如下数据包:

    1
    2
    3
    4
    SRC MAC: 主机A的MAC
    DST MAC: 路由器A的192.168.1.1网口的MAC
    SRC IP : 192.168.1.3
    DST IP : 192.168.3.4
  • 路由器A的192.168.1.1网口接收包之后,准备把包转发出去。而路由器A中的路由表中匹配到了,要想发送给192.168.3.4/24,需要从192.168.2.1这个网口出去,下一跳地址为192.168.2.2/24。路由器通过ARP拿到了下一跳192.168.2.2/24d的MAC地址,然后发送如下数据包:

    1
    2
    3
    4
    SRC MAC: 路由器A的192.168.2.1网口的MAC
    DST MAC: 路由器B的192.168.2.2网口的MAC
    SRC IP : 192.168.1.3
    DST IP : 192.168.3.4
  • 路由器B的192.168.2.2网口接收包之后,准备把包转发出去。路由器B中判断到目标IP在192.168.3.1这个网口所在的局域网,于是通过ARP拿到了192.168.3.4的MAC地址,然后发送如下数据包:

    1
    2
    3
    4
    SRC MAC: 路由器B的192.168.3.1网口的MAC
    DST MAC: 主机192.168.3.4网口的MAC
    SRC IP : 192.168.1.3
    DST IP : 192.168.3.4

最终,主机B收到数据包。

可以发现在转发网关中,源IP和目的IP地址都是不会变的,因为整个内网不可能有冲突的IP

但是,假如我们要访问外网,情况就不一样了,最终可能会请到到另一个局域网,另一个局域网的私有IP是可能跟我们所在的局域网一样的,为了避免冲突,于是就有了NAT网关。专门在把数据包发送出去之前,把IP改为公网IP。

2.2、NAT网关

现在假设主机A要访问另一个城市的主机B,这里为了演示NAT,我们把模型简化一下,假设路由器出去之后就是公网IP了,如下:

image-20211023122158931

假设路由器A和路由器B都直接接入了互联网。

现在主机A想访问主机B:

  • 由于是不同的局域网,主机A不会知道主机B的IP的,而主机B接入互联网的之后,领取到了一个互联网的IP,就是上图路由器WAN口的IP:203.0.113.103,所以主机B会把这个IP作为主机B的IP,最终发出如下IP数据包:

    1
    2
    3
    4
    SRC MAC: 主机A的MAC
    DST MAC: 路由器A的192.168.1.1网口的MAC
    SRC IP : 192.168.1.3
    DST IP : 203.0.113.103
  • 192.168.1.1网口接收到包之后,发现要想访问203.0.113.103,就要从203.0.113.102这个网口出去,发给路由器B,路由器B中判断到目标IP就是203.0.113.103这个网口,于是通过ARP拿到了203.0.113.103的MAC地址,然后发送如下数据包:

    1
    2
    3
    4
    SRC MAC: 路由器A的203.0.113.102网口的MAC
    DST MAC: 路由器B的203.0.113.103网口的MAC
    SRC IP : 203.0.113.102
    DST IP : 203.0.113.103
    1
    * 因为消息是要发到公网的,最终SRC IP会被NAT为公网的IP 203.0.113.102;
  • 最终路由器B接收到消息,通过NAPT得到最终接收数据报的IP为当前局域网的192.168.1.3/24,最终把消息转发给了这个IP所在的主机B。

NAPT是如何把一个公网IP翻译为局域网IP的?

传统的NAT(traditional NAT)包括基本NAT(basic NAT)和网络地址端口转换(Network Address Port Translation, NAPT)。基本NAT只执行IP地址的重写,本质上是将私有地址改写为一个公共地址,这往往取自于一个由ISP提供的地址池或共有地址范围,这种NAT不是最流行的,因为无助于减少需要使用的IP地址数量。

比较流行的做法是使用NAPT,NAPT使用传输层标识符如TCP或者UDP端口,或者ICMP查询标识符来确定一个特定的数据报到底和NAT内部哪台私有主机相关联。

如果局域网两个端口号一样,那么NAPT会重写端口号,保证不一致。如下图,三个局域网的IP需要转换为公网IP,由于有两个的端口重复了,于是NAPT进行了端口重写:

image-20211023122402870

References

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/network/network-layer/gateway-and-router.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。