计算机网络‑IP 协议解析:核心特性总结

  • 🏠 博客主页:小谢同学的小破站
  • ✍️ 本文由 小谢同学的小破站 原创,首发于 CSDN💻
  • ☕ Java学习专栏:java
  • 📗 MySQL专栏:MySQL
  • 🧩 数据结构与算法:Java 数据结构与算法
  • 🌐C语言专栏: C语言
  • 👍 欢迎点赞👍 收藏⭐ 留言📝,发现错误欢迎指正!
  • ✨ 脚踏实地,持续深耕,奔赴自己的目标✨
    -- -- -- -- -- 💫分割线💫----------

IP协议

  • [1. 认识IP协议](#1. 认识IP协议)
    • [1.1 IP协议结构](#1.1 IP协议结构)
    • [1.2 IP协议的核心特性](#1.2 IP协议的核心特性)
  • [2. IP协议的问题以及解决办法](#2. IP协议的问题以及解决办法)
    • [2.1 解决方案1:动态规划分配IP地址](#2.1 解决方案1:动态规划分配IP地址)
    • [2.2 解决方案2:.NAT网络地址转换](#2.2 解决方案2:.NAT网络地址转换)
    • [2.3 面试高频考点](#2.3 面试高频考点)

前言:

   这里是小谢同学的 IP协议的学习记录,整理IP协议相关内容。笔记用于自我复盘巩固,有错误欢迎大家指出,专栏还有 Java、网络、C 语言系列笔记欢迎翻阅.

1. 认识IP协议

 IP(Internet Protocol,网际协议)工作在TCP/IP 五层模型‑网络层 ,是整个互联网路由转发的基石。IP协议负责把数据包从源主机,跨越多个路由器转发到目标主机,解决跨局域网的数据传输问题

1.1 IP协议结构

解释:

  默认的首部长度为:20

  1. 四位版本号(version): 分为IPv4IPv6,IPv4值为4,IPv6值为6
  2. 4位首部长度(IHL): 首部长度占:4bit,单位为:4字节;
  • 最小首部长度:无选项时,首部20字节->20/4 = 5
  • 最大首部长度:4 位二进制最大可以表示的数字:15(2^4-1 = 15) 而2. 首部长度这个字段占4bit但是单位是 4 字节规定:首部长度数值 × 4 = IP 首部字节数 ;所以最大长度为:15×4 = 60
  1. 8 位 服务类型 TOS:用来标记数据包想要的传输优先级,使用4位TOS字段和一位保留字段延时、吞吐量、可靠性,成本(只有一个是1,另外3个是0)但是现在已经很少使用了;
  • 注意:每一位上为1时: 延时为:代表最小延时;吞吐量:最大吞吐量;可靠性:最高可靠性;成本:最小成本
  1. 16位总长度: 整个IP数据包的总字节大小(首部+数据)最大值为65532字节,以太网一般单帧限制在1500字节,超过了就要进行分片(也就是拆包和组包)
  2. 16位标识: 同一个数据包拆包出来的身份标识,接收方使用身份标识来判断这些数据是否属于同一个包
  3. 3位标志位:第一位:保留(意思是现在不用,但是还没想好说不定以后会用到) ,第二位为1:标识禁止分片,这时候如果报文长度超过了MTU,IP模块就会丢弃报文 ,第三位表示"更多分片",如果分片了最后一个分片位置置为1,其他为0,类似于结束标识(如C语言中的"\0")

那么IP协议是如何拆包组包的?

  • 假设发送前的数据很大,此时就会触发分片,此时16位标识就相当于ID告诉对方我是同一个数据的
  • 进过不断的传输过程中,就可能出现了数据传输顺序的错误
  • 此时接收方:就能通过相同的标识来确定不同的分片是否为同一个数据,通过13位片偏移来确定数据不同分片原来的一个位置
  • 此时就能通过标识,片偏移,标志位来保证拆包组包过程中不会发生数据的错误
  1. 8位TTL(生存时间Time‑To‑Live): 数据包最多可以经过多少个路由器每经过一台路由器让 TTL‑1
  • 衍生出新的问题->如果8位生存时间只有32或者64再或者128,那么这个TTL传输的次数够吗?

答案:够的,此处涉及到一个社会科学->六度空间理论

六度空间理论: 六度空间理论认为,世界上任意两个人之间最多只需通过六个人就能建立联系。

也就是说,理论情况下,一个人大概会有100多个朋友,我可以通过这些朋友的朋友的朋友的朋友来联系到世界首富;

真实情况下,我的能量比较小,根本联系不到,但是计算机网络这个层次上可以联系到"世界首富"

此时8位TTL生存时间是足够的

  1. 8位协议Protocol: IP 上层是什么协议,会告诉目标主机,把 IP 的数据交给谁处理。
  2. 16 位 首部检验和: 只会校验IP头部,不会管后面数据的校验,路由器进行转发时,每次转发TTL都会减1,所以,每次进过下一跳都必须重新计算校验和
  3. 32 位 源 IP 地址: 发送这个数据包主机的 IPv4 地址。
  4. 32 位 目的 IP 地址: 数据包最终要送到哪里的 IPv4 地址,路由器就是读取这个字段查路由表转发。
  • IP地址描述了当前这个地址是什么样子的,32位整数,会分成4个部分中间采用 . 来进行分割(每个部分的取值0-255)例如:192.168.100.55
  1. 选项: 可选字段,长度可变。一般很少用,只要有选项,IP 首部长度就大于 20 字节。
  2. 数据: IP 数据包的载荷。存放 TCP/UDP/ICMP 等上层协议报文。

1.2 IP协议的核心特性

IP 五大核心特性:

  1. 无连接(Connectionless):IP协议发送数据之前不需要和对方建立连接
  2. 不可靠(Unreliable):传输过程中可能出现丢包现象,IP协议本身没有重传机制,也没有超时重试,不能确保传输过程中不出现丢包现象;
  3. 基于数据报(Datagram)传输: P 传输的最小单位叫 IP 数据报 ,每个报文自带完整的头部信息(源 IP、目的 IP)。路由器会以单个数据报为单位进行转发
  4. 支持分片(Fragmentation):链路层一次能传输的数据长度是有限的(MTU 最大传输单元,以太网一般 1500 字节)。超过就会触发拆包和组包机制;
  5. 独立路由选择: IP数据包经过路由器转发过程中每一个的IP数据包的路径都是不一样的,也会出现后发先至的问题,接收方依靠片偏移来确定IP数据包在原数据里的具体位置,进行组包.

2. IP协议的问题以及解决办法

  • IP地址设置的初衷: 为了区分设备,期望每一个设备都有和别人不一样的IP地址
  • 32位数字表示的范围:0-42亿,移动互联网之前,这个数量数量是足够的,但是移动互联网开启之后,大概现在人手会有一台手机,甚至两台,这个数量远远超过了表示范围,此时就面临着IP地址不够用的问题 ; 甚至冰箱都能进行联网

2.1 解决方案1:动态规划分配IP地址

第一种解决方案:动态规划分配IP地址(已经在使用,但是效果比较有限)

动态分配 IP :设备在开机的时候,不会自带固定 IP ,会主动向局域网内的 DHCP 服务器申请一个空闲的 IP 地址;服务器从预先准备好的 IP 地址池中挑一个分配给它。

此时就能节省一大部分的设备,暂时不需要分配IP地址;

工作流程(DHCP 四步握手)

  1. DHCP Discover(发现) 😗*:主机刚接入网络的时候,不知道DHCP服务在哪,会进行广播发送请求,询问服务器"有没有DHCP服务器,我像要一个IP"
  2. DHCP Offer(提供) :DHCP 服务器收到广播请求,如果有就会从 IP 池选出一个空闲 IP,回复给主机。注意:IP 只是预留,还没正式给到手上。
  3. DHCP Request(请求) :主机选中其中一台服务器给出的 IP,再次广播告知服务器:我就要这个 IP 了
  4. DHCP Ack(确认) :服务器最后会发确认报文,IP 正式分配成功,同时会附带 租期 信息。
  • 租期:租期未结束,客户端主动续约,会延长使用时间,会继续沿用当前IP;租期结束:IP就会回收,设备必须重新申请IP

2.2 解决方案2:.NAT网络地址转换

第二种解决方案: NAT网络地址转换(核心方案)

NAT网络地址转换: NAT 设备(通常是路由器)维护一张地址转换表 ,记录着「内网 IP + 端口」与「公网 IP + 端口」的映射关系。

两个核心概念:

  1. 内网:处在路由器 NAT 的后方、会受路由器管控的本地网络。(内网设备使用私有 IP 地址 ,私有 IP 只能在局域网内部通信,不能直接在互联网上路由,公网上的服务器无法主动找到你的内网 IP。)
  • 就像家里的WiFi,手机,电脑等电子产品连接到的网络,路由器分配给他们的192.168.1.2192.168.1.3,此时这些设备就属于在内网;

 内网IP网段:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255
  1. 外网:路由器以外、运营商主干互联网。(外网设备使用公网 IP 地址 。公网 IP 是全网唯一的地址,可以在整个互联网路由,互联网上任意主机都能够定位到这个 IP。)
  • 百度服务器 180.101.49.11 、你家路由器从运营商拿到的 IP 地址,就属于外网 IP。

 外网网段: 内网以外的IP

内网和外网的边界:路由器的 NAT 网关,路由器 LAN 口一侧 → 内网 ;路由器 WAN 口一侧 → 外网(互联网)

转化流程:

数据出站(内网 → 外网)

  1. 内网主机(如 192.168.1.100:5000)发数据包到外网
  2. 经过 NAT 路由器时,路由器把源 IP 替换成自己的公网 IP(如 202.100.1.1
  3. 同时在转换表中记录映射:192.168.1.100:5000 ↔ 202.100.1.1:6000
  4. 外网服务器看到的请求来源是公网 IP,不知道内网真实地址

数据入站(外网 → 内网)

  1. 外网服务器回复数据包到 202.100.1.1:6000

  2. NAT 路由器查转换表,发现 6000 端口对应内网 192.168.1.100:5000

  3. 目的 IP 替换成内网 IP,转发给对应主机

    注意:如果接收方和发送方端口号一致时,端口号也会发送地址转换;
    关键:NAT 靠端口号 来区分同一公网 IP 下的不同内网设备,这叫PAT(端口地址转换) ,也是实际最常用 的 NAT 方式。


2.3 面试高频考点

1.为什么外网服务器不能主动访问内网主机?

NAT 路由器里面的映射记录,只能由内网主机主动向外发数据包才会创建

外网主机一开始没有任何映射条目,路由器收到外网主动发来的数据,找不到对应的内网主机,数据包就直接丢弃。

如果需要外网访问内网服务:需要手动配置端口映射(端口转发)

2.简述 IP 数据包分包组包的过程

当IP数据包携带比较大的载荷时,如果报文长度超过链路MTU无法一次性转发,就会触发拆包组包

路由器会将大报文拆分成若干个分片,使用16位标记来进行标记,确保当前分片是同一个数据同一个报文

而网络传输中可能出现乱序的情况,类似于后发先到,此时就会依靠13位片偏移来标记数据在原数据中的位置,根据片偏移>来进行排序;

同时会依靠标志位来判断是否到达最后一个分片

3.什么是 NAT?作用是什么?

  1. 节约公网 IP 资源,缓解 IPv4 地址枯竭;
  2. 屏蔽内网主机,外网无法直接访问内网设备,带来一层基础安全防护;
  3. 实现内网‑外网之间的数据包转发。

4.NAT 转换改的是源 IP 还是目的 IP?

  • 内网→外网(出站):修改【源 IP、源端口】, 目的 IP 保持不变
  • 外网→内网(回程):修改【目的 IP、目的端口】, 源 IP 保持不变

口诀:出去改源,回来改目的
[🔙 返回目录](#🔙 返回目录)


相关推荐
陈年老古董18 分钟前
PyTorch 实现 MNIST 手写数字识别学习笔记
笔记·python·深度学习·学习
其实防守也摸鱼18 分钟前
智能体推荐:精选 AI Agent 工具与实战指南
运维·开发语言·人工智能·学习·web安全·自动化
风123456789~22 分钟前
【架构设计】3.2 信息化系统的典型应用 3/6
笔记·系统架构设计
SendTomo26 分钟前
send.wang:基于浏览器WebRTC实现无客户端文件互传
网络·python·网络协议·webrtc·p2p
风123456789~36 分钟前
【架构设计】第3章 信息系统基础知识 1/6
笔记·系统架构设计
吃着火锅x唱着歌1 小时前
Effective C++ 学习笔记 条款45 运用成员函数模板接受所有兼容类型
c++·笔记·学习
Capricorn19881 小时前
Ox Alpha 1M 上下文科研引用失真怎么排查?知芽 Notebook Skill 技术链路实操
人工智能·笔记·python·深度学习·知识图谱·论文笔记
0_Karl_01 小时前
永磁爬壁机器人开源资源指南
学习·机器人
初願致夕霞1 小时前
五种IO模型(详解非阻塞IO与多路转接)
linux·前端·网络·数据库·tcp/ip