IP协议与NAT/NAPT技术

article/2025/10/4 0:50:32

文章目录

  • IP协议
    • 一、什么是IP协议
      • 1、IPv4协议报文格式
        • 关于分片
      • 2、IP地址
      • 3、子网划分与CIDR
      • 4、特殊的IP地址
      • 5、公网IP和私网IP
      • 6、IP地址的分配(DHCP)
    • 二、NAT/NAPT技术
      • 1、接口与IP的关系
      • 2、路由器的LAN口与WAN口
      • 3、NAPT的基本工作原理
    • 三、IPv4与IPv6
    • 四、ICMP协议
      • 1、关于ping命令
      • 2、关于traceroute命令

IP协议

一、什么是IP协议

IP协议,即Internet Protocol,是TCP/IP协议簇的网络层协议,提供无连接、不可靠、尽力而为的服务。

1、IPv4协议报文格式

img
  • 4位版本:指定IP协议的版本,例如IPv4就是0100(4)。
  • 4位首部长度:指定报文首部(即**20字节固定内容+选项)的长度,以四字节为单位,因此实际长度是该字段 * 4**得到的。
  • 8位服务类型(TOS):用于规定本数据报的处理方式,大多数情况下网络并未对TOS进行处理
  • 16位总长度:报文首部+数据的总长度。
  • 16位标识:用来唯一地标识一个IP数据报。如果该报文被分片,那么每一片的标识id都是相同的。
  • 3位标志:最高位保留,暂无用处;中间位为1表示该数据报禁止分片最低位为1表示该报文是最后一个分片
  • 13位片偏移:分片相对于原始IP报文开始处的偏移量。以八字节为单位,实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 8位生存时间(TTL,Time To Live):表示该数据报还可以被路由器转发几次。每经过一个路由,TTL都会减一,如果减到0还没有到达,则数据报被丢弃。该字段主要用于防止路由器循环问题。
  • 8位协议:表示携带的载荷用到的协议。TCP为0x06,UDP为0x11。
  • 16位首部校验和:用来检验报文首部是否有损坏。
  • 源IP与目的IP:发送端IP和接收端IP。

关于分片

数据传输的大小受到MTU(最大传输单元,Maximum Transmission Unit)的限制。因此,对于过大的数据包,需要进行分片处理,每个片都是一个IP数据报。

但是分片发送数据会导致数据丢包的几率更大。

2、IP地址

IP地址的基本格式为xxx.xxx.xxx.xxx,由四段组成,每个字段是一个字节,总共4字节,每个字节有8位,最大值是255。

IP地址由两大部分组成:网络号(前三个字节)和主机号(最后一个字节),二者是主从关系。

  • 网络号:它标志主机(或路由器)所连接到的网络,网络地址表示其属于互联网的哪一个网络

  • 主机号:它标志该主机(或路由器)属于网络中的哪一台主机。

3、子网划分与CIDR

过去曾经提出一种划分网络号和主机号的方案,把所有IP地址分为五类:

img img

一个IP的组成为:<网络号>.<主机号>

然而实际上,大多数组织会申请B类IP,因为A类IP的主机数过多,大多数情况下不会存在一个子网下有这么多主机,C类IP主机数又太少,所以导致大量的IP被浪费了。

针对此情况,又提出了一个新的子网划分的方式:CIDR

CIDR,即无分类域间路由选择(Classless Inter-Domain Routing)。它完全摒弃了传统的IP分类方式,而使用子网掩码区分一个IP的网络号和主机号,使得网段划分更加灵活。

子网掩码是32位整数,由高位的n个连续1和低位的32-n个连续0组成。将子网掩码同IP地址按位与,得到的就是网络号,其余的就是主机号,比如说:

IP : 141.14.72.11 子网掩码 : 255.255.255.0

两者按位与得到141.14.72.0,这就是网络号,而11是主机号。

因此,新的IP表达方式为:<网络号>.<主机号>/<网络号的位数>,所谓网络号的位数就是子网掩码前缀1的数目

利用这种方法,上述例子中的IP就是141.14.72.24/24

4、特殊的IP地址

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;

  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

  • 127.*的IP地址用于本机环回(loop back)测试,通常使用127.0.0.1

5、公网IP和私网IP

公网IP:由Inter NIC(因特网信息中心)负责,用来分配给向Inter NIC提出申请的组织机构。

公有IP**全球唯一,通过它可以直接访问因特网(能直接上网**)。

公网IP主要有A、B、C、D、E五类地址:

  • A类:地址范围 1.0.0.0 ~ 127.255.255.255,主要分配给大量主机而局域网网络数量较少的大型网络

  • B类:地址范围128.0.0.0 ~ 191.255.255.255,一般用于国际性大公司和机构

  • C类:地址范围192.0.0.0 ~ 223.255.255.255,一般用于小公司、校园网、研究机构等;

  • D类:地址范围224.0.0.0 ~ 239.255.255.255,第一个字节以1110开头,用做广播地址

  • E类:地址范围240.0.0.0 ~ 255.255.255.255`,暂时保留

私网IP:属于非注册地址,专门为组织机构内部组建局域网使用,不能直接上网

私网IP主要有A、B、C三类:

  • A类:地址范围10.0.0.0 ~ 10.255.255.255。1个A类网络地址,共约1677万个IP地址。

  • B类:地址范围172.16.0.0 ~ 172.31.255.255。16个B类网络地址,共约104万个IP地址。

  • C类:地址范围192.168.0.0 ~ 191.168.255.255。256个C类网络地址,共约65536个IP地址

注:私网IP分别是公网IP中A、B、C三类地址中的一部分,只是被划分出来单独用作私网组建。

6、IP地址的分配(DHCP)

管理员可以通过手动的方式分配IP地址,也可以通过DHCP(动态主机配置协议)来完成。

通过配置,DHCP可以为想要入网的主机分配固定的IP地址,也可以分配临时的IP地址,每次网络连接时该地址可能是不同的。

除了地址分配,DHCP协议还会允许主机获得子网掩码、默认网关、DNS服务器等网络配置信息,使其能够顺利联网。

上述过程通过报文交互的方式完成。

二、NAT/NAPT技术

NAT,即网络地址转换(Network Address Translation),运行在路由设备上,是一种把私网IP转换为公网IP的技术,用于解决IPv4地址不足的问题

NAPT,即网络地址端口转换(Network Address Port Translation),在NAT的基础上又加入了端口映射。

1、接口与IP的关系

一台主机通常只有一条物理链路链接到网络,主机与物理链路之间的边界称为接口。而对于路由器,至少需要一条链路接收数据、另一条链路发送数据,因此路由器有多个接口(至少两个)。

每台主机与路由器都能发送和接收IP数据报,因而IP要求每台主机和路由器接口都拥有自己独立的IP地址。因此,从技术上讲,一个IP地址与一个接口相关联,而不是与包含该接口的主机或路由器相关联

2、路由器的LAN口与WAN口

WAN,即Wide Area Network,代表广域网,是路由器与运营商网线相连的接口,对应WAN口IP。

LAN,即Local Area Network,代表局域网,是计算机与路由器相连的接口,对应LAN口IP。

3、NAPT的基本工作原理

  1. 当局域网内的某台主机想要访问公网上的某台服务器时,它会将数据报发送到路由器LAN口,数据报中包含源IPTCP/UDP协议的源端口号目的IPTCP/UDP协议的目的端口号

  2. NAPT路由器内部维护一张NAPT转换表。NAPT路由器收到数据报后,会为其生成没有出现在NAPT转换表中的新端口号替换源端口号,并用WAN口IP替换源IP,从而形成(新的IP,端口号),将(新IP,端口号):(源IP,源端口号)的映射关系存储在表中。

  3. 数据报的传输可能会经过N跳路由器,每一跳都会经历上述IP和端口号替换的过程。

  4. 数据报到达服务器后,服务器会发送响应报文。报文每到达一个路由器,就通过查找NAPT转换表的方式找到源IP和源端口,直到到达目的主机。

注:NAT与NAPT的区别在于,NAT内部使用了不同的IP进行映射,而NAPT使用了一个WAN口IP和不同的端口号进行映射。

三、IPv4与IPv6

IPv4采用32位地址长度(4字节),约有43亿地址.

IPv6地址为128位(16字节),但通常写作8组,每组为四个十六进制数的形式。

例如:FE80:0000:0000:0000:AAAA:0000:00C2:0002

四、ICMP协议

ICMP协议,即控制报文协议(Internet Control Message Protocol),是网络层协议之一,起到辅助IP协议的作用。

  • ICMP的作用分为两类:错误通知和信息查询,可以用来确认IP包是否成功到达目标地址、通知在发送过程中IP包被丢弃的原因…
  • ICMP的报文是放在IP数据报里的,因此,ICMP是IP的上层协议,但是工作在网络层,而非传输层。
  • ICMP只能搭配IPv4使用,而IPv6需要使用ICMPv6

1、关于ping命令

ping命令基于ICMP协议,用来测试网络的连通性,其工作的基本过程为:

  1. ping命令会先发送一个ICMP Echo Request给对端;
  2. 对端接收到之后,返回一个ICMP Echo Reply。

基本使用格式:ping+主机名/IP地址,如:ping www.baidu.com

注:ping命令基于网络层协议,因此不存在端口一说。

2、关于traceroute命令

traceroute命令同样基于ICMP协议,用来检测发出数据包的主机到目标主机之间所经过的网关数量

基本使用格式:traceroute+主机名/IP地址,如:traceroute www.baidu.com


http://chatgpt.dhexx.cn/article/PBeNHivQ.shtml

相关文章

NAT与NAPT技术详解

一、定义 NAT: Network Address Transfer 网络地址转换。虚拟机。 NAPT: Network Address Port Transfer 网络地址端口转换。也叫PAT。内网路由器或FW。 NAT和NAPT的功能是完成内部私有地址和全局网络地址的转换&#xff0c;让计算机能与外界网络通信。其属接入广域网(WAN)技…

Queue与Deque的区别

前言 ​ 在研究java集合源码的时候&#xff0c;发现了一个很少用但是很有趣的点&#xff1a;Queue以及Deque&#xff0c;平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用&#xff0c;但是一直都不知道Queue的作用&#xff0c;于是就直接官方文档好了。 正文…

【C++】deque的实现原理简单介绍

前言 deque被称为双端队列&#xff0c;它的出现主要是为了结合vector和list的优点并减小它们的缺点&#xff0c;实际上deque确实结合了vector和list的优点减小了它们的缺点&#xff0c;但是它的结合也让它自己的优点没有原始的vector和list那么极致&#xff0c;导致deque变得很…

C++容器deque的用法

目录 1.deque容器概念 2.deque对象的构造 2.1deque对象的默认构造 2.2deque对象的带参数构造 3.deque头部和末尾的添加移除操作 4.deque的数据存取 5.deque与迭代器 6.deque的赋值 7.deque的大小 8.deque的插入 9.deque的删除 1.deque容器概念 deque容器概念 deque是…

C++ deque

C deque 简介 所谓的deque是”double ended queue”的缩写&#xff0c;双端队列不论在尾部或头部插入元素&#xff0c;都十分迅速。而在中间插入元素则会比较费时&#xff0c;因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型&#xff0c;提供了在序列两端快速…

C++ queue 和 deque的区别

从使用的角度来讲主要差别就是&#xff1a; deque支持push_front、pop_front、push_back、pop_back。 queue支持push_back、pop_front。 ---------------------------------------------------------------------------- deque是双端队列 #include<deque>template&l…

C++——deque

文章目录 Deque 与 vector 的异同点构造操作非更易型操作更易型操作使用例子 容器 deque (发音为“deck”)和 vector 非常相似。它也采用dynamic array来管理元素&#xff0c;提供随机访问&#xff0c;并有着和 vector 几乎一模一样的接口。不同的是 deque 的 dynamic array 头…

C++中deque用法详解

deque函数&#xff1a; deque容器为一个给定类型的元素进行线性处理&#xff0c;像向量一样&#xff0c;它能够快速地随机访问任一个元素&#xff0c;并且能够高效地插入和删除容器的尾部元素。但它又与vector不同&#xff0c;deque支持高效插入和删除容器的头部元素&#xff0…

python中的deque模块(collections的deque模块)

目录 1. deque是python的collections中的一个类 2.deque的简单使用以及它的方法 2.1 创建deque的方法 2.2 创建deque时&#xff0c;并指定大小maxlen&#xff0c;即能装几个元素&#xff0c; 以及deque添加元素append()方法 2.3 deque的 appendleft()方法 2.4 deque的 clear()…

C++中deque的用法(超详细,入门必看)

博主简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的人。 博主主页&#xff1a;陈童学哦 所属专栏&#xff1a;CSTL 如果本文对你有所帮助的话&#xff0c;希望可以点赞&#x1f44d;收藏&#x1f4c2;支持一下哦&#xff01; 期待…

Java数据结构之Deque

Java数据结构之Deque 引题Deque接口分析Deque的注释与Queue的联系还在使用Stack&#xff1f;你OUT啦&#xff01;peek方法更方便与List的不同与null说goodbye 子类ArrayDeque.class分析基本结构官方的代码图解数据存储过程 简单思考 1部分代码的分析关于初始容量关于扩容代码中…

java关于Deque的使用

定义 双向队列&#xff1a;支持插入删除元素的线性集合。 java官方文档推荐用deque实现栈&#xff08;stack&#xff09;。 和Queue的区别 Deque是double ended queue&#xff0c;将其理解成双端结束的队列&#xff0c;双端队列&#xff0c;可以在首尾插入或删除元素。 Queue的…

【C++】deque的用法

目录 一、容器适配器二、deque的介绍三、deque的使用及缺陷1、deque的构造函数2、deque的元素访问接口3、deque的 iterator的使用4、deque的增删查改4、deque的缺陷5、为什么选择deque作为stack和queue的底层默认容器 一、容器适配器 在了解deque前&#xff0c;我们先讲一讲什…

Python deque的用法介绍

Python deque的用法介绍 deque 是Python标准库 collections 中的一个类&#xff0c;实现了两端都可以操作的队列&#xff0c;相当于双端队列&#xff0c;与Python的基本数据类型列表很相似。 Python实现双端队列参考&#xff1a;https://blog.csdn.net/weixin_43790276/artic…

C++ deque的用法与示例

C deque的用法与示例 deque容器的介绍 Vector 容器是单向开口的连续内存空间&#xff0c;deque 则是一种双向开口的连续线性空间。所谓的双向开口&#xff0c;意思是可以在头尾两端分别做元素的插入和删除操作&#xff0c;当然&#xff0c;vector 容器也可以在头尾两端插入元…

deque用法详解

“无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;而且非常风趣幽默&#xff0c;像看小说一样&#xff01;觉得太牛了&#xff0c;所以分享给大家。点这里可以跳转到教程。” deque函数&#xff1a; …

deque容器详解

文章目录 1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque插入和删除6. deque数据存取7. deque排序 1. deque容器基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部…

双端队列(Deque)

一、简介 deque&#xff0c;即双端队列(double ended queue)&#xff0c;是一种可以在两端扩展或收缩的序列化容器。 deque是C 标准模板库的一部分&#xff0c;想要使用deque&#xff0c;需要在程序中包含头文件deque。 #include<deque>二、定义和初始化 1.格式&#x…

关于Deque的详解

1. 定义 双向队列&#xff1a;支持插入删除元素的线性集合&#xff1b;java官方文档推荐用deque实现栈&#xff08;stack&#xff09;。 2. 和Queue的区别 Deque是double ended queue&#xff0c;将其理解成双端结束的队列&#xff0c;双端队列&#xff0c;可以在首尾插入或删除…

deque用法深度解析,一篇文章弄懂deque容器各种操作

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2022/01/11&#x1f4c5; 最近更新时间&#xff1a;2022/01/11&#x1f935; 此马非凡马&#xff0c;房星本是星。向前…