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

news/2024/7/7 19:41:21

在这里插入图片描述

文章目录

  • 一.网络层与数据链路层
  • 二.IP协议报头
    • 报文切片
    • IP协议与路由器
    • IP地址的结构与子网掩码
    • 数据报文路由的实现机制
  • 三.公网IP和私网IP
    • 公网IP主机与公网IP主机之间的跨网络通信
  • 四.数据链路层与局域网通信
    • 数据链路层以太网协议
  • 五.NAT技术实现私网IP主机与公网IP主机之间的跨网络通信
    • NAT技术的诞生背景
    • 从私网主机到公网主机的NAT路由
    • 从公网主机到私网主机的NAT路由
    • NAT技术的缺陷

一.网络层与数据链路层

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

二.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连接也都会断开;
    在这里插入图片描述

http://lihuaxi.xjx100.cn/news/2144102.html

相关文章

Vue.js---------Vue基础

能够说出Vue的概念和作用能够使用vue/cli脚手架工程化开发能够熟练Vue指令 一.vue基本概念 1.学习vue Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 渐进…

Apache ECharts-数据统计(详解、入门案例)

简介:Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 1、介绍 图 1.1 Apache ECharts 功能、运行环境 功能: ECharts&#xff…

【opencv】教程代码 —Histograms_Matching(2)计算直方图、直方图比较、直方图均衡、模板匹配...

计算直方图直方图比较图像进行直方图均衡化处理模板匹配 1. calcHist_Demo.cpp 计算直方图 这段代码的功能是加载图像,分离图像的三个颜色通道,然后分别计算这三个通道的直方图,绘制出来并显示结果。直方图是图像中像素值分布的图形表示&…

Docker实战教程 第2章 Docker基础

3-1 Docker介绍 什么是Docker 虚拟化,容器 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上&…

丰诺畅机电科技将莅临2024年第13届生物发酵展

参展企业介绍 无锡丰诺畅机电科技有限公司,是一家分离设备专业制造公司,集开发、设计、制造、销售、服务于一体;具有专业的生产技术,先进的生产工艺,精良的制造设备,完善的检测手段;为满足不同用户的过滤需求&#xf…

三维VR虚拟展馆打破传统展览的时间与空间限制

探索绿色未来,见证生态转型——这是长江经济带在国家发展蓝图中的承诺。如今,通过线上长江经济带发展阶段性成效展厅,这一承诺正以创新的互动体验呈现给公众,彰显了环境保护与经济增长的和谐统一。 深圳VR公司华锐视点精心策划的长…

easyExcel 模版导出 中间数据纵向延伸,并且对指定列进行合并

想要达到的效果 引入maven引用 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version></dependency> 按照要求创建模版 备注 : 模板注意 用{} 来表示你要用的变量 如果本…

stm32之基本定时器的使用

在上文我们使用到了HAL库的自带的延时函数&#xff0c;HAL_Delay&#xff08;&#xff09;&#xff1b;我们来看一下函数的原型 __weak void HAL_Delay(uint32_t Delay) {uint32_t tickstart HAL_GetTick();uint32_t wait Delay;/* Add a freq to guarantee minimum wait */…