【Linux】IP
📝前言:
这篇文章我们来讲讲Linux网络——IP
🎬个人简介:努力学习ing
📋个人专栏:Linux
🎀CSDN主页 愚润求学
🌄其他专栏:C++学习笔记,C语言入门基础,python入门基础,C++刷题专栏
目录
- 一,IP协议格式
- 二,网段划分
- 三,特殊IP地址
- 四,私有IP和公网IP
- 五,路由
一,IP协议格式
- IP 位于五层结构中的网络层
- 主机: 配有 IP 地址, 但是不进行路由控制的设备;
- 路由器: 即配有 IP 地址, 又能进行路由控制;
第一行:
- 版本: IPv4 或 IPv6
- 4位首部长度:4字节为单位,表示IP报头长度
- TOS:指定对数据报的处理方式(优先级、延迟、吞吐量、可靠性等)
- 16位总长度:表示整个 IP 数据报(包括头部和数据部分)的长度,单位是字节
第二行(用于“分片”,与数据链路层有关)
- 16位标识:同一分片的标号相同,不同分片标识不同
- 3位标志:
- 第一位:一般为0
- 第二位:为
1
代表不分片,为0
代表可以分片 - 第三位:为
1
代表“更多分片”(即该分片不是结尾),为0
代表此片为分片的最后一片(类似\0
)
- 13位片偏移:体现该片开始距离原始片开始的偏移(单位8字节)。如第一片偏移为
0
,第二片为:0+第一片长度
- 分片与组装:
- 确认第一片:片偏移为
0
+ 有更多分片
- 确认最后一片:片偏移不为
0
+ 没有更多分片
- 确认中间片:按片偏移升序排序,然后用
前一片片偏移 + 前一片长度
得到下一片理想的片偏移,然后和实际的比较
- 确认第一片:片偏移为
第三行
- TTL:单位 “跳数”,数据报能经过的路由器的最大数量。每经过一个路由器,TTL 值减 1,当 TTL 值为 0 时,数据报被丢弃(因为网络拓扑结构很复杂,有时候可能出现环,导致报文一直循环,浪费网络资源)
- 8位协议:用来指明IP要交给的上层的上层协议,如TCP,UDP…
- 16位首部校验和:用于检验 IP 头部在传输过程中是否出现差错。发送方计算头部的校验和,接收方收到后重新计算,若结果不一致,则说明头部存在差错,数据报可能被丢弃。
二,网段划分
IPv4 地址总量有限,存在短缺问题,同时为减少网络广播风暴、提升数据转发效率并简化管理,子网划分技术被广泛应用。它通过将大网段拆分为多个独立子网,既能高效复用有限的 IPv4 地址以避免浪费,也能以此为基础构建分层可控的网络拓扑结构,最终实现设备间高效、安全的通信。
传统的 A/B/C 类已基本淘汰,下面介绍CIDR 子网划分:
- 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
- 在同一个网段内主机号不能相同,在不同的网段内主机号可能相同
- 子网掩码也是一个 32 位的正整数. 通常用一串 “0” 来结尾
- 将 IP 地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号
还有一种更简单的写法:140.252.20.68/24,表示 IP 地址为140.252.20.68,子网掩码的高位为1,即子网掩码为:255.255.255.0
三,特殊IP地址
- 将 IP 地址中的主机地址全部设为 0, 就成为了网络号,代表这个局域网
- 将 IP 地址中的主机地址全部设为 1, 就成为了广播地址, 用于给同一个链路中
相互连接的所有主机发送数据包- 如:家用路由器分配 IP 时(DHCP 服务):路由器会向 “192.168.1.255”(广播地址)发送 “地址分配通知”,网段内所有未获取 IP 的设备都能接收并响应,无需路由器单独联系每台设备
- 一个网段内的 “可用主机地址” 范围是:网络地址(主机号全 0)+1 到 广播地址(主机号全 1)-1
- 127.*的 IP 地址用于本机环回(loop back)测试,通常是
127.0.0.1
- 当设备向 127.* 地址(如 127.0.0.1)发送数据时,这些数据不会经过网卡、路由器等硬件,也不会流入互联网或局域网,而是直接被本机的操作系统 “拦截”,并转发给本机上的目标程序;无论设备是否联网(比如断开 WiFi、拔掉网线),127.* 地址都能正常使用,因为它不依赖外部网络环境。
四,私有IP和公网IP
- 私有IP不能出现在公网中,也不能出现在另一个内网中
- 不同局域网的私有IP可以不同,同一局域网的私有IP不能相同
除了以下的私有IP,其他全是公网IP
10.*
,前 8 位是网络号,共 16,777,216 个地址172.16.*
到172.31.*
,前 12 位是网络号,共 1,048,576 个地址192.168.*
,前 16 位是网络号,共 65,536 个地址
五,路由
- 一个路由器可以配置两个 IP 地址(路由器至少有两组IP), 一个是 WAN 口 IP(公网IP), 一个是 LAN 口 IP(子网IP)
- 也就是说:路由器一般处在两个“子网”中,路由器有构建子网的能力
- 内网的数据要传输到公网上的时候,要通过路由器的转发,同时要把私有IP替换成路由器的WAN口IP(NAT技术)
路由表:
路由表(Routing Table)是路由器内部维护的一张数据表格,记录了 “到达不同目标网络的路径信息”。其核心作用是解决 “数据包转发的方向问题”—— 路由器不会无目的转发数据,而是通过路由表精准判断:“要去目标网络(比如百度服务器所在的公网 IP 段),下一步该交给哪个设备(比如上级路由器、网关)”。
数据来源:
- 直连路由(Connected Route):“自带的本地路由”
- 静态路由(Static Route):“手动配置的固定路由”
- 动态路由(Dynamic Route):“路由器自动学习的路由”
路由数据包转发的过程:
- 路由器收到数据包后,提取目标IP地址
- 将目标IP地址与自身路由表中个条目对应的子网掩码按位与,得到目标网络地址
- 然后比较
- 如果路由表中有与该目标网络地址匹配的条目,且条目包含“下一跳地址”,则将数据报转发给下一跳地址
- 如果没有匹配的,则丢弃数据包,或者按缺省路由转发
- IP是“终极目标”,网络层解决的是“去哪里”
- 数据链路层是“局部目标”,数据链路层解决“怎么去”
🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!