网络层IP协议和数据链路层--理解NAT/NAPT路由技术

在这里插入图片描述

一.网络层与数据链路层

  • 传输层应用层数据报文提供传输策略,而网络层则为传输层数据报文提供网络传输路径规划(基于路由节点的路径规划),数据链路层则负责将网络层报文传送给局域网内的其他主机
    在这里插入图片描述

二.IP协议报头

在这里插入图片描述

报文切片

  • 由于数据链路层存在最大传输单元MTU(数据链路层报文的最大字节数),因此IP协议会将传输层交付下来的数据报文进行分片,IP协议分片描述字段:
    在这里插入图片描述

  • 同一组分片中,任意一个IP报文丢失,则对应的传输层报文整个会被网络层丢弃,因此如果传输层使用的是UDP协议,IP协议的分片操作会很大程度上增加网络报文的丢包概率

  • 如果传输层使用的是TCP协议,IP协议的分片大小则会影响TCP协议对应用层报文的切片大小,称为MSS(Max Segment Size)(MSSTCP协议三次握手时双方协商的重要字段)

IP协议与路由器

  • 报文在跨网络传输过程中必须经过路由器进行跨网络节点路由,IP协议的主要任务就是借助IP地址在路由过程中为报文提供路径规划

在这里插入图片描述

  • 路由器的本质也是一台主机,路由器中配置了多张网卡作为多个子网数据报文收发中转站连接多个子网(一张网卡使用一个IP地址,因此一个路由器配置了多个IP地址)

IP地址的结构与子网掩码

  • IP地址分为两个部分, 网络号主机号
    • 网络号: 用于标识不同地区网段(广义上的局域网)的字段
    • 主机号: 用于标识同一网段内的不同主机
      在这里插入图片描述
  • 子网掩码IP地址位数相同,其二进制序列由若干个前缀1和若干个后缀0构成,子网掩码前缀1的个数取决于网络号的位数,子网掩码IP地址按位与就可以得到IP地址对应的网络号,用于快速进行路由决策

数据报文路由的实现机制

  • 每台主机的网络层内部都内置了路由表:
    在这里插入图片描述

  • 路由器根据数据报文的IP地址,借助子网掩码,就可以得到数据报文的传输目的主机的网络号,通过查表就可以确定数据报文的传输目的主机是否位于本路由器所在的子网中,若是则将数据报文传送到相应的局域网中,否则进行路由转发传输给其他网络

  • 除了转发数据报文,路由器另外一个重要作用就是构建局域网,路由器通常为局域网中的1号主机,最先加入到局域网中,并且为后续加入局域网的主机分配私网IP地址,同时完成路由表的增删改操作

  • 普通用户在入网之前,整个网络(区域网段的划分路由器节点网络的铺设)就已经被运营商精心构建好了

三.公网IP和私网IP

  • 32位的IP字段可以表示 2 32 2^{32} 232个不同的IP地址,因此全球公网IP是有限的资源,主机想要使用公网IP入网需要向特定机构申请公网IP,一般来说,只有特定的企业服务器,重要的路由器等设备会申请公网IP,其余大部分用户设备一般直接使用的是私网IP,由路由器动态分配.
  • 主机的私网IP仅在其所在的局域网中具有唯一性,私网IP和设备之间采用临时绑定的机制,设备入网时,其私网IP由局域网中的路由器动态分配,公网IP和私网IP配合构建网络,解决了全球范围内公网IP数量不足的问题
  • 私网IP特定的前缀以便和公网IP作明确区分

公网IP主机与公网IP主机之间的跨网络通信

在这里插入图片描述

  • 网络中大部分设备使用的都是私网IP,因此公网IP主机和公网IP主机之间的跨网络通信其实并不常见,绝大部分网络通信本质上是公网IP主机和私网IP主机之间的跨网络通信以及局域网通信
  • 另外,由于私网IP无法在全网中唯一标识一台主机,因此私网IP主机和私网IP主机之间是无法直接通信的,两个私网IP主机的通信必须借助公网服务器进行代理

四.数据链路层与局域网通信

数据链路层以太网协议

在这里插入图片描述

  • 数据链路层以太网协议报文分为两种类型,负责实现局域网内的主机通信:
    在这里插入图片描述

  • 在局域网通信中,报文发送方先会在局域网中进行ARP请求广播,报文接收方通过核对ARP请求中的目的IP地址字段,确认自己就是报文的接收方后,再通过RARP应答报文将自己的MAC地址广播到局域网中,报文发送方就可以获取到报文接收方MAC地址,报文接收方报文发送方会互相将彼此的私网IP:MAC地址缓存起来,双方就可以正常进行数据收发了
    在这里插入图片描述

五.NAT技术实现私网IP主机与公网IP主机之间的跨网络通信

NAT技术的诞生背景

  • 私网IP主机只要能够获得公网IP主机的公网IP,就可以将数据报文发送给公网主机,然而由于私网IP在全网中不能唯一地标识一台主机,因此公网IP主机想要将回应报文发送给某台私网IP主机就需要借助其他技术

从私网主机到公网主机的NAT路由

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

从公网主机到私网主机的NAT路由

  • 私网主机向某台公网主机首次发送数据或发起TCP链接时,路由器就会建立一张映射表来存储局域网内主机的私网IP+原端口号 : 路由器出口IP+原端口号映射关系键值对
  • 当局域网内多个主机都访问同一个公网服务器时,路由器则通过局域网内主机的私网IP+原端口号 : 路由器出口IP+自定义的替换端口号键值对来区分局域网内的主机(不同主机通过端口号来区分)
    在这里插入图片描述
  • 公网服务器私网主机发送数据报文时,封装的IP地址为某台路由器的公网IP地址,数据报文经过若干次查表路由后,到达特定局域网的路由器中,再经过最后一次查表就可以将数据报文交给局域网内特定的私网主机
    在这里插入图片描述
  • 总言之,数据报文从私网主机公网主机的NAT路由过程中,源私网IP经过不断地转换后变为公网IP;数据报文从公网主机私网主机的NAT路由过程中,目的公网IP经过不断地查表转换后变为特定局域网的私网IP

NAT技术的缺陷

  • 公网主机无法主动向私网主机发起连接;
  • 映射表的生成和销毁都需要额外开销;
  • 通信过程中一旦NAT路由设备异常, 所有相关的TCP连接也都会断开;
    在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 06:40:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 06:40:07       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 06:40:07       82 阅读
  4. Python语言-面向对象

    2024-04-04 06:40:07       91 阅读

热门阅读

  1. springboot如何编写gitlabrunner的部署文件

    2024-04-04 06:40:07       32 阅读
  2. pdf预览组件react-pdf,pdfjs-dist

    2024-04-04 06:40:07       34 阅读
  3. Spark面试整理-什么是Spark SQL?

    2024-04-04 06:40:07       38 阅读
  4. 图像滤波的使用

    2024-04-04 06:40:07       39 阅读
  5. 负载均衡的技术实现

    2024-04-04 06:40:07       38 阅读
  6. python笔记(12)条件控制

    2024-04-04 06:40:07       35 阅读