网络层协议 IP

网络层 负责为分组交换网上的不同主机提供通信服务,选择合适路由,把分组从源主机送达目的主机。IP 协议是网络层核心协议,负责给数据包分配地址、寻址并转发分组,使跨网络的数据能够送达目标主机。

报头格式

其中:

1 .版本:就是 IP 的版本,比如对 IPv4 ,这里的值就是 4。

2 .头部长度:和 TCP 协议的同名字段表示意思一致。

3 .服务类型(TOS): 8 位bit中,3 位是优先权字段(已经弃用),4 位TOS字段,以及 1 位保留字段(必须置为0)。4 位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,四者相互冲突,使用时只有一个能置为 1.

4 .总长度:报头+数据整体大小。

5 .分片标识:标识主机发送的报文,如果一个报文被分片了,那么每一片的标识都是相同的。

6 .3 位标志:第一位保留。第二位表示是否可以分片(置1为禁止分片)。第三位表示"更多分片",对于被分片的报文,除了最后一片置0,其他片为1,如果报文没有分片,该位置也为0。

7 .片偏移:用于记录被分片的报文起始位置与原始报文起始位置的偏移量。这个字段的大小只有 13 位,为了表示最大有16位的报文大小,需要将这个值向左偏移 3 位,才能得到真正的偏移量。

8 .生存时间 :记录的其实不是时间,而是报文达到目的地被允许的最大跳数,经过一个路由这个值就-1,减到0且未达到目的地,这个报文就会被丢弃,防止路由循环。

9 .协议:表示上层协议的类型。网络层的上层是传输层,拿最常见的 UDP 和 TCP 举例,如果发送端使用 UDP ,接收端也必须拿 UDP 接收,而不能用 TCP。

10 .首部校验和:使用 CRC 进行校验,鉴别头部是否损坏。

11 .源地址和目的地址:不做解释。

"选项" 字段,用于扩展 IP 协议的功能。

子网划分

IP 地址分为两个部分,网络号和主机号。

网络号:标识设备属于哪个网段。

主机号:标识该网段内的哪台设备。

早期 IPv4 使用有类地址划分子网。这种方法把所有 IP 分为五类,分别是 A类,B类,C类

,D类,E类。其中 A类 IP的首位是0,B类 IP 前两位是 10,C类 IP 前三位是 110,以此类推。

如果申请一个B类地址,理论上这个子网内能连接六万多台主机,但是在实际的架设中,会有很多被浪费掉。

针对这种情况,出现了 **CIDR(无类别域间路由)**来代替原来的方案。

这种方案引入了一个新的概念 "子网掩码 "(subnet mask),它也是一个 32 位的正整数,将 IP 地址和子网掩码进行 "按位与" 操作,就可以得到网络号。

IP 地址和子网掩码可以用一种简洁的表示方法,如 140.252.20.68/24,140.252.20.68 是 IP地址,/24 表示 子网掩码 的高 24 位是 1,也就是 255.255.255.0。

特殊 IP

现在 IP 通常用点分十进制表示,比如 192.168.1.1 。

如果主机地址全为0,例如: 192.168.1.0 ,就成了网络号,代表整个局域网。

如果主机地址全为1,例如: 192.168.1.255,就成了广播地址,用于给同一个链路中相互连接的所有主机发送数据。

**127.***的 IP 地址用于本机环回(loop back),通常是 127.0.0.1。

IP 还分私有和公有。私有 IP 在一个子网内不重复,但是在整个公网内可以重复,RFC 1918 规定了用于组建局域网的私有 IP 地址:

10.*, 前 8 位是网络号,共 16,777,216 个地址。

172.16.* 到 172.31.*, 前 12 位是网络号,共 1,048,576 个地址。

192.168.*, 前 16 位是网络号,共 65,536 个地址。

NAT 技术

一个路由器构建起一个子网 ,它配置有两个 IP,一个是 WAN口 IP ,可以理解为出口,一个 LAN口 IP(子网 IP),可以理解为入口,所以 LAN口连接着的主机,都属于这个路由器的子网。

不同路由器的子网IP都是一样的,一般是192.168.1.1。

一个家用路由器,构建起一个子网,但同时它又是运营商路由器子网中的一个节点,对于最外层的运营商路由器,它的 WAN口 IP 就是一个公网 IP。

当子网内主机需要与其他子网的主机通信时,路由器会将数据包 IP 首部中的 IP 地址进行替换(替换成 WAN口 IP),最终数据包中的 IP地址成为了一个 公网 IP,这种技术就叫做 NAT(Network Address Translation,网络地址转换)。

相关推荐
无言听风雨丶18 分钟前
Kubernetes Service Mesh 与 mTLS 实战:从网络可达走向零信任服务通信
网络·kubernetes·service_mesh
叼烟扛炮1 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
H.莓飛2 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
Rabitebla2 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法
沫璃染墨3 小时前
从零入门计算机网络系列(十五):TCP可靠传输机制详解——从序号与确认应答到乱序处理
服务器·网络·c++·tcp/ip·tcp
xiaoye-duck4 小时前
《C++ 项目:手写大模型接入 SDK》本地 Ollama 部署与适配
开发语言·网络·c++·语言模型
流浪0014 小时前
计算机网络篇20:网络层——IP 协议的定位与 IPv4 报头字段,从 20 字节首部到 TTL 防环
tcp/ip·计算机网络·ttl·网络层协议·ip报头
zhengfei6114 小时前
CVE-2026-98432:Linux 内核 TCP 释放后重用漏洞,CVSS 9.8 但补丁覆盖极不均衡
linux·运维·tcp/ip
叼烟扛炮5 小时前
Linux 学习笔记(六十一):网络编程毕业设计——Reactor 反应堆模式
linux·网络·笔记·学习·课程设计