当前位置: 首页 > ai >正文

【网络原理】IP协议

 

目录

​编辑

一. IP协议的作用

二. IP协议报头

三. 拆包和组包

四. 地址管理

1)动态分配IP地址

2)NAT机制(网络地址映射)

3) IPV6 

五. IP转换

 1)客户端到服务器

2)服务器到客户端

六. 网段划分

七. 路由选择


一. IP协议的作用

1)地址标识和寻址

使用一套地址体系,为每一个网络设备分配唯一的IP地址,这里的网络设备不仅是路由器,服务器,交换机,电脑,手机都会有独一无二的IP地址

2)路由选择

IP协议应用于网络层,关注具体的传播路径 ,路由器会根据IP地址和路由表,动态规划出数据包的最佳路径

二. IP协议报头

这里介绍的IP协议报头是IPv4报头 

(1)4位版本号

标识IP协议版本,IPv4为4,IPv6为6

(2)4位首部长度

 这里的单位是4字节,不包含选项是20字节,最大为60字节

(3)8位服务类型TOS(type of service)

这里只有4位有效,这4位彼此之间相互冲突,只能有1位为1,其余3位只能为0

这四位分别是:最小延时,最大吞吐量,最高可靠性,最小成本(硬件设备开销)

(4)16位总长度

描述一个IP数据包的总长度(报头+载荷)最大为65535字节。

(5)16位标识

唯一标识一个数据包。若数据包被分片,所有分片共享同一标识,用于重组。

(6)3位标志

控制分片行为

  • Bit 0:保留位(必须为0)。
  • Bit 1(DF, Don't Fragment):若为1,禁止路由器分片(若数据包超过MTU则丢弃)。
  • Bit 2(MF, More Fragments):若为1,表示后续还有分片;若为0,表示这是最后一个分片。

(7)13位片偏移

描述包的先后顺序,当前分片在原数据包中的位置

(8)8位生存时间(TTL)

这里的生存时间不是s和ms,而是次数,一个IP数据包,每经过一个路由器转发,TTL就会-1

如果这个数值变成了0,则会直接丢弃,这样的目的是防止一个数据包无限转发下去

(9)8位协议

这个表示在传输层使用了那种协议

(10)16位首部校验和

这里的校验只是针对IP首部,对于载荷部分,在传输层会校验

(11)32位源IP地址和32位目的IP地址

表示了发件人和收件人的地址

三. 拆包和组包

1. 拆包

为什么要拆包?

  • 根据IP协议的报头,IP数据包最大的长度为65535字节,传输层如果传输的数据很有可能超过这个大小,那么IP协议这一层就会将这个很大的数据拆分为多个IP数据包,每个IP数据包会携带载荷的一部分
  • 数据链路层每次最大传输数据量也存在限制

像这样的拆包行为,由IP自动完成,在操作系统内核会自己实现 这里的拆包主要是因为数据链路层限制


2. 组包

如何组包?

这里主要依靠标志,标志和片偏移

  • 16位标志用于表示那些IP数据包应该放在一起
  • 3位标志只有两位有效位,分别表示这个数据包是不是拆包得到的,这个数据包是不是最后一个数据包
  • 13位片偏移描述这些包之间的先后顺序

这三个少一个都不行,缺少一个都不能实现组包功能


四. 地址管理

 IP协议本质上就是一个32位整数,可以表示的数据范围是0~42亿9千万

 IP地址存在的意义就是为了能够区分网络上的不同设备,希望每一个网络设备都有唯一的IP地址

  • 42亿9千万的IP地址,看上去很多,其实不够用,全世界有80亿人,每个手机都分配一个IP地址,更何况一个人可能有多个手机,更何况很多个路由器也需要分配地址

 如何解决IP地址不够用的问题?

1)动态分配IP地址

 全世界的网络设备,并不是同一时刻都在上网,给正在上网的网络设备分配IP地址

2)NAT机制(网络地址映射)

 将IP地址分为了两类:私网IP/公网IP

  • 私网IP:IP地址10.*,  172.16-172.31,   192.168.*
  • 公网IP:除了私网剩下的都是公网

公网的设备和IP地址都是唯一的,不可以重复

私网的设备和IP地址,只需要保证同一个局域网内的IP地址不重复即可,不同局域网之间IP地址可以重复


基于这样的安排,规定了一个限制

  • 公网设备访问公网设备,没有问题,直接访问即可
  • 局域网设备访问局域网设备(同一个局域网),没有问题
  • 局域网设备访问局域网设备(不同局域网),不允许访问
  • 局域网访问公网设备,需要对局域网设备进行IP转换
  • 公网设备不允许主动访问局域网设备

3) IPV6 

 IPV4可以表示2^32个地址,大约是43亿

IPv6可以表示2^128个地址,大约是43亿*43亿*43亿*43亿(天文数字)

但是IPv6和IPv4由于报头格式不同,所以不兼容,意味着想要使用IPv4,必须更换支持IPv4的设备


五. IP转换

 1)客户端到服务器

 路由器一般含有一个WAN口,多个LAN口,路由器至少包含2个IP地址(其中一个为WAN口)

  • WAN口:可能是局域网IP地址,也可能是公网IP地址
  • LAN口:一个局域网IP地址

 数据包经过路由器会进行IP转换,将源IP地址转换为公网IP地址,如果转换为公网IP,那么后续就不需要转换了,服务器收到这个数据包,只会看到这个源IP地址是5.6.7.8,而不是192.168.1.2

这样转换的目的,让一个公网IP地址对应多个设备,从而节省IP地址的数量


2)服务器到客户端

 私网访问公网需要进行IP转换,公网将数据如何返回给私网?私网地址怎么获取?

服务器只知道源IP地址为转换的路由器地址,不知道客户端的地址


 NAT表:就是一个表格,路由器会记录IP地址转换的过程在NAT表中,记录替换前的IP地址,替换后的IP地址和目的地址等信息

 1)一个局域网内,多个设备访问同一个服务器

 

  • 当服务器返回数据包的时候,路由器会根据目的IP和替换后的IP地址,得到替换前的IP地址
  • 如果是访问不同服务器,同样也可以根据 目的IP和替换后的IP地址,得到替换前的IP地址

 2)一个局域网内,一个设备的多个进程访问同一个服务器

那么NAT表中会包含端口号这个信息,用于区分同一个设备中的进程


 3)一个局域网内,多个设备(但是端口号相同)访问同一个服务器

 两个主机上面的端口号,重合的概率不是很大,但是也有可能,这时候就可以使用端口号进行区分,路由器会对端口号进行映射


路由器不是工作在网络层吗?为什么可以改变端口号?

路由器并不是一个单纯的网络层设备,也具有传输层功能,所有可以修改端口号

  • 局域网内的不同设备, 访问的是不同网站,这个时候直接通过服务器 IP 就能区分.
  • 局域网内的同一设备不同进程,如果访问的是同一个服务器, 就可以按照端口号来区分.
  • 局域网内的不同设备相同端口号,访问的是同一个服务器, 就可以在路由器这边自动映射成不同的端口进行区分

 使用这样的技术,本质上也是提高IP地址的利用率,没有增加IP地址的个数,只是进行了复用,没有从根本上解决问题,现在的互联网就是通过动态规划和NAT结合的方式增加IP地址的使用


六. 网段划分

 将一个IP地址进行了划分,划分为两部分:网络号和主机号

  • 网络号:标识设备所属的网络,一般通过子网掩码确定
  • 主机号:标识网络中的具体设备(同一网络内,主机号必须唯一)

 

 图中,内包含四个局域网,四个不同网络号

  • 在同一个局域网中,所有主机的网络号都是相同的,主机号是不同的
  • 在同一个局域网内,网络号和主机号相同,无法上网
  • 网络号和路由器的网络号不同,无法上网(设备不能通过路由器访问外网,当然也不能访问设备)
  • 两个相邻的局域网,网络号不能相同(路由器的两段)

 之前的网段划分

 这样的划分其实并不好,比如说A类,可以表示的主机数是2^24个设备,但是现实中不存在一个局域网可以包含这么多的设备,浪费了非常多的IP地址

现在的网段划分

现在的网络划分,都是通过子网掩码的方式进行划分,比较节省IP地址

特殊的IP地址 

类型IPv4/IPv6地址范围/示例用途
私有地址IPv410.0.0.0/8
172.16.0.0/12
192.168.0.0/16
局域网内部使用,不可在公网路由(需NAT转换)。
自动私有IP(APIPA)IPv4169.254.0.0/16DHCP失效时自动分配,用于本地临时通信。
环回地址IPv4127.0.0.0/8(如127.0.0.1测试本机网络服务,数据不离开设备。
广播地址IPv4255.255.255.255(受限广播)
子网地址.255(定向广播)
向本地或特定子网所有设备发送数据。
全零地址IPv40.0.0.0表示“任意地址”或默认路由(如服务器监听所有接口)。
多播地址IPv4224.0.0.0/4(如224.0.0.5一对多通信(视频会议、路由协议)。

单播:1对1          组播:1对多(多是整体一部分)           广播:1对多(全部)


七. 路由选择

 路由选择是规划一条路线,但是这里的路线具有局限性,一个路由器的路由表是有限的,不可能装进去所有的路由器地址信息,这是掌握一部分局部信息,所有得出来的路线只是一个较优解

探索式路线规划

路由器这种规划路线的方式,可以类比寻路,数据报中的目的IP地址,就类似于问路的目标,由于每个路由器都了解自己相邻的网络设备情况,这时候就可以根据路由器了解的信息,来规划下一步走哪里

路由表

当设备收到一个数据包时,根据目标IP地址查找路由表,决定数据包的转发路径。可以认为路由表是网络通信的“导航地图”

http://www.xdnf.cn/news/4212.html

相关文章:

  • Git 使用的全流程以及SourceTree工具的使用操作和忽略文件的配置
  • BERT预训练
  • ArrayList 和 LinkedList 的区别
  • 「Mac畅玩AIGC与多模态21」开发篇17 - 多字段判断与多路径分支工作流示例
  • 《Python星球日记》 第36天:线性代数基础
  • 静态库和动态库的区别
  • 【强化学习】什么是强化学习?2025
  • tp8+swoole搭建
  • 5.2创新架构
  • Linux/AndroidOS中进程间的通信线程间的同步 - 虚拟内存操作
  • 20250506让NanoPi NEO core开发板使用Ubuntu core16.04系统的TF卡启动
  • 德尔菲法和层次分析法是什么
  • 基于STM32、HAL库的W25Q32JVSSIQ NOR FLASH存储器驱动应用程序设计
  • 【日撸 Java 三百行】Day 3(注释,基本if语句,函数调用)
  • Vue 2.0 详解全教程(含 Axios 封装 + 路由守卫 + 实战进阶)
  • OpenCV 图形API(78)图像与通道拼接函数-----调整图像大小的函数resize()
  • C# 方法(值参数和引用参数)
  • mysql 如何查询数据库链接日志
  • Spring 中四种常见初始化方法,对比 static {} 和 @PostConstruct 在并发,Spring 加载顺序大致为: JVM 加载类
  • 生成了一个AI算法
  • 网络安全的范式革命:从被动防御到 AI 驱动的主动对抗
  • 基于大模型的自然临产阴道分娩全流程预测与方案研究报告
  • 开个帖子记录一下自己学spring源码的过程
  • Spyglass:官方Hands-on Training(三)
  • 数据中台架构设计
  • c++类【发展】
  • 【全面解析】Poco C++ Libraries 模块详解与使用指南
  • UE5 使用插件进行Audio2face和UE5的实时链接并实时输出嘴型
  • 多模态训练与微调
  • 突破v0.dev对话限制的两种方法