TCP/IP等协议学习记录一:网关,ARP,路由,交换转发,NAT

本文详细介绍了TCP/IP协议栈中的ARP协议、网络交换和路由过程,特别是在NAT网关环境下的工作原理。通过一个具体的网络模型,展示了数据包从用户到互联网服务器的传输路径,涵盖了从接口1到接口4的每个阶段,包括ARP地址转换、交换转发、路由选择以及NAT转换的过程。文章还讨论了NAT技术的优缺点和NAT穿透的概念。
摘要由CSDN通过智能技术生成

该系列文章用于记录我的TCP/IP,ARP,NAT等协议的学习过程,涉及到计网,通信,C语言开发等。如有错误,请指正。

主要方向:

  • 高性能网络开发
  • 高性能网络协议开发
  • 高性能网关开发

本系列关键字:DPDK,VPP,大页缓存,路由转化,交换,NAT


本节关键字:网关,ARP,路由,交换转发,NAT


背景

需要使用思科的VPP模拟网关的作用,包括用户侧接口和运营商接口。使用trex模拟用户和运营商。其模型图为:
在这里插入图片描述

图中1,2,3,4分别代表不同的接口。考虑这样一个网络模型:

  • trex的接口1模拟为一个内网,假设网段为192.168.15.0/24
  • VPP的接口2模拟为上述内网的网关,假设ip地址为192.168.15.1
  • VPP可以模拟为一个具有NAT网关功能的路由器,则接口3是暴露给外网的接口,假设为20.1.1.1
  • trex的接口4模拟为互联网上的服务器,比如谷歌的DNS服务器8.8.8.8:53,或者百度的http服务器,假设为10.1.1.1:80,后面的:80表示应用进程的端口

接下来我们详细分析一下这几个接口之间的收发数据会发生什么。我们只考虑2到3层网络协议。

一、接口1->接口2:用户到网关

比如在接口1有一个用户u1,其ip地址为192.168.15.14,属于192.168.15.0/24网段。
当u1,即192.168.15.14/24:1025 要给 20.1.1.1:80 发送数据时,会将数据按照四层网络模型从上到下的顺序进行封装,我们将发送的数据简化为:
在这里插入图片描述

以太网帧头(数据链路层头部)包含的信息有:

  • 源MAC:接口1的MAC
  • 目的MAC:???未知

IP包头(网络层头部)包含的信息有:

  • 源ip:192.168.15.14
  • 目的ip:20.1.1.1

TCP/UDP段头(传输层头部)包含的信息有:

  • 源端口:1025
  • 目的端口:80

此时,接口1的数据包要根据以太网帧头中的源目MAC进行发送,首先经过子网掩码,判断源目ip是否在一个网段内:

  • 若在一个网段内,且接口1的ARP表中有目的IP对应的MAC地址,则经过交换机直接发送,此时网络层和传输层头部没有多大作用。若ARP表中无对应项,使用ARP协议查询目的MAC。
  • 若不在一个网段内,则发送到默认路由,通过ARP协议获取默认网关的MAC地址,并设置目的MAC为网关的MAC,将数据包发给本网段网关。

1、ARP地址转换协议

1.基本功能:知道目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
2.它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被 邻居发现协议(NDP) 所替代。

在这里插入图片描述

当源ip和目的ip处于不同的网络中时,需要使用上图中的代理ARP协议

假设主机A和主机B是第一次通信(则主机A中的ARP表没有目的ip和对应的MAC地址)。
主机A首先在内网中广播ARP请求,请求报文中包含主机B的IP地址,并请求主机B的MAC地址,如果路由器启用了代理ARP功能,并知道主机B属于它连接的网络,那么路由器就用自己接口的MAC地址代替主机B的MAC地址来对主机A进行ARP应答。主机A接收ARP应答,但并不知道代理ARP的存在。

可以看出来这是一种ARP欺骗,主机A以为自己知道了主机B的MAC地址,但事实上这个MAC地址是路由器的。

结合上面VPP和trex架构图,接口1到接口2采用了ARP协议,因此接口1到接口2的数据报中信息为:

  • 源ip:192.168.15.14(接口1的IP地址)
  • 目的ip:20.1.1.1(目的IP是不会变的,变的是MAC地址)
  • 源端口:1025
  • 目的端口:80
  • 源MAC:接口1
  • 目的MAC:接口2(接口1所在网段的网关)
    在这里插入图片描述

2、交换

什么是交换:交换是指在同一局域网内根据数据帧的目标MAC地址将数据帧从一个端口转发到另一个端口的过程。交换机是实现交换功能的网络设备(二层设备),它维护一个MAC地址表,记录了每个MAC地址所对应的端口。当交换机收到一个数据帧时,它会查找MAC地址表,确定目标MAC地址所对应的端口,然后将数据帧从该端口转发出去。

和路由器的转发不同,交换机在转发数据帧时不会更改数据帧的源MAC和目标MAC。交换机只是根据数据帧的目标MAC地址查找MAC地址表,确定目标MAC地址所对应的端口,然后将数据帧从该端口转发出去。交换机不会对数据帧的内容进行任何修改。

这意味着,当数据帧到达目标主机时,它的源MAC地址和目标MAC地址仍然是发送主机和目标主机的MAC地址。这样,目标主机就能根据目标MAC地址识别出该数据帧是发给它的,并进行相应的处理。

3、路由

什么是路由:路由是指数据包从源主机到目标主机的路径的过程。 路由器是实现路由功能的网络设备(三层设备),它维护一个路由表,根据路由表中的信息来决定如何转发数据包。路由表包含了目标网络的地址和到达目标网络的下一跳地址。路由器根据数据包的目标IP地址查找路由表,确定下一跳地址,然后将数据包转发到下一跳地址。

在接口1中,我们配置了两条路由信息:
在这里插入图片描述

其中第一条表示默认路由,即当数据包的目的网络地址不在路由表中时,数据包将被发送到192.168.15.1这个网关。
第二条路由信息表示直连网段,即当数据包的目的网络地址在192.168.15.0/24这个网段内时,数据包将被发送到ens192这个接口。

根据路由器学习路由信息、生成并维护路由表的方式,可以分为:

  • 直连路由:路由器接口直接连接子网的路由方式。

  • 静态路由:手动配置路由表项。静态路由是固定的,不会改变,即使网络状况已经改变或是重新被组态。

  • 动态路由:路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化自主动态进行调整。

路由器单跳的流程:

  1. 收到IP报文
  2. 根据目的IP地址查找路由表
  3. 有匹配路由,查看下一跳地址。若是直连路由,则送往相应的接口,对报文进行封装转发。若不是直连,则以下一跳作为目的地址,继续查找路由表。
  4. 若没有匹配路由,但是有默认路由,则送往对应的接口。没有匹配路由,也没有默认路由则丢弃。

4、转发

当主机A发向主机B的数据流在网络层封装成IP数据包,IP数据包的首部包含了源IP和目标IP。主机A会用本机配置的24位IP网络掩码255.255.255.0与目标地址进行与运算,判断目标网络地址与本机的网络地址是不是在同一个网段中。如果不是将IP数据包转发到网关。

在发往网关前主机A还会通过ARP的请求获得默认网关的MAC地址。在主机A 数据链路层IP数据包封装成以太网数据帧(按四层协议从上到下封包),然后才发住到网关……也就是路由器上的一个端口。

当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是自己的某一个端口的物理地址,这时路由器会把以太网数据帧的封装去掉路由器认为这个IP数据包是要通过自己进行转发,接着它就在匹配路由表。匹配到路由项后,它就将包发往下一跳地址。

路由器转发数据包就是这样,所以路由器转发数据包不会对它的IP源地址和目标地址做修改,只会修改MAC除了NAT协议,这会改变源IP,但不会改变目的IP

当有数据包传到路由器时,路由器首先将其目的IP与路由表进行对比,如果是本地网络,将不会进行转发到外网络,而是直接转发给本地网内的目的主机,改变的只是数据包的源地址(原来的源MAC变为了路由器的MAC)。但是如果目的IP经路由表对比,发现不是在本网中,有NAT就将改变源地址的IP(原源IP地址改为了路由器的IP地址),路由器将数据包转发到相应的端口,进行通信。

相当于就是在没有NAT的情况下,一次通信不会改变源IP和目的IP(目的主机是通过IP地址判断是不是发给他的),但是每次转发(相当于通信链路中的一段)都会改变源MAC和目的MAC(源MAC变成自身出接口的MAC,目的MAC变成下一跳的MAC)。和交换机交换不一样,交换不会改变源目MAC。

二、接口2->接口3:NAT

NAT技术:是指通过专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址,它使得整个专用网只需要一个全球IP就可以访问互联网,由于专用网IP地址是可以重用的,所以NAT大大节省了IP地址的消耗。

因此可以认为本地网络中多个主机共享一个公网IP地址,现在常用的协议是NAPT(Network Address Port Translation),即网络地址端口转换,通过建立内网IP -> 公网IP+端口号的映射关系来进行转换(端口号是由NAT设备选取的TCP/UDP端口号)。通过使用源端口将多个私网ip地址映射到一个公网ip地址(多对一)

NPAT理论上可以同时支持(65535 - 1024)= 64511个连接会话。其中1024为专用端口,如80端口用于http协议的浏览器,443端口用于https协议的浏览器。

在这里插入图片描述

因此根据上述VPP和trex的架构图,接口2到接口3,除了有路由寻址转发,还有NAT。则出接口3的数据包信息为:

  • 源ip:20.1.1.1(通过NAT转换为接口3的公网IP)
  • 目的ip:10.1.1.1(目的IP是不会变的,变的是MAC地址)
  • 源端口:10001(源端口号1025表示源主机进程的端口,这里NAT设备可能会重新分配一个唯一的端口号)
  • 目的端口:80
  • 源MAC:接口3
  • 目的MAC:接口4

补充:
NAT缺点:NAT的出现使得公网服务器无法对内网主机主动发起连接。通信链路的建立只能是内网主机主动向公网服务器发起连接,服务器进行响应。
解决方法:内网穿透(又称NAT穿透),需要主机连接并且保持长久连接,这里不太了解,不展开了。

三、接口3->接口4:

根据上面所说,接口3和接口4都是公网地址,会直接进行通信。接口3到接口4的数据包信息为:

  • 源ip:20.1.1.1
  • 目的ip:10.1.1.1(目的IP是不会变的,变的是MAC地址)
  • 源端口:10001
  • 目的端口:80
  • 源MAC:接口3
  • 目的MAC:接口4

四、接口4->接口1:

对于服务器的响应,要经过数据发送到路由器进行寻址转发;到NAT设备,根据目的IP和端口号(10001)映射为内网IP;可能再次经过路由寻址转发,直到送到直连路由,然后发送到接口1.


总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中还是有很多没有涉及到,比如安全性问题,路由表等等,后面用到的时候我会再补充。


参考:
这个写的挺好的:从零讲解主机之间如何通信
ARP协议详解
内网穿透

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值