【网络原理】TCP/IP协议02

接上文 【网络原理】TCP/IP协议01

3. 网络层

在复杂的网络环境中确定⼀个合适的路径

① IP 协议

IP 协议,做到工作,主要是两个:

  1. 地址管理,使用 IP 地址这样的概念,标识网络上的某个设备的位置
  2. 路由选择,在两个通信设备节点之间,规划出一条合理的路径
  • 主机: 配有IP地址, 但是不进行路由控制的设备
  • 路由器: 即配有IP地址, 又能进行路由控制
  • 节点: 主机和路由器的统称

② IP 报文格式

1️⃣4位版本号(version):指定IP协议的版本,有 IPv4 和 IPv6 两个版本。

2️⃣选项:用于扩展IP功能,可有可无,选项的存在,那么IP的报头长度是可变的

3️⃣4位首部长度:IP 协议报头,和 TCP 协议一样,也是变长的,长度取值范围为0~15,以4字节为单位,即

  • 报头最小长度为 20 字节(取最小值5,包含报头中的20个固定字节长度,选项除外)
  • 报头最大长度为 60字节(取最大值15),包含 选项40个字节 + 20固定字节
  • 详情可看一看上一篇文章的 TCP 部分。

4️⃣8位服务类型:决定 IP 的工作方式,即 IP 可以切换工作状态

  • 3位优先权字段(已经弃用),4位TOS字段, 和1位保留字段(必须置为 0).
  • 4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本
  • 这四者相互冲突, 只能选择⼀个

5️⃣16位总长度:报头+载荷 的长度,即 64kb

  • 与 UDP 协议不同,IP 协议内置了拆包组包的功能。
  • 比如,IP 携带一个比较大的 TCP 数据包,IP 协议就会自动拆成多个,通过多个 IP 数据包共同传输一个 TCP 数据包。

6️⃣16位标识:唯一标识一个IP数据报。当数据报需要分片时,同一数据报的所有分片具有相同的标识,以便接收方重组。

  • 拆包:把拆出来的多个包,设为相同的标识
  • 组包:把相同标识的数据包组合到一起

7️⃣3位标志:

  • 第⼀位保留(保留的意思是现在不用, 但是说不定以后要用到).
  • 第二位表示是否触发了拆包操作,置为1,表示禁止分片/拆包
  • 第三位表示当前包是否是最后一个数据包,置为0 表示就是最后一个,类似于结束标志

8️⃣13位片偏移:表示当前分片在原数据报中的位置以8字节为单位 )。除了最后一个分片,其他分片的数据长度必须是8的倍数(否则报文不连续)。接收方据此将分片按顺序重组(偏移小的放在前面,大的放后面)。


如果基于 UDP 实现传输超过 64kb 的数据,可以参考 IP 的方案:

  • 在应用层中,就可以指定标识符,指定片偏移,指定标志位

9️⃣8位生存时间:一个 IP数据报 到达目的地经过的最大跳数(路由器数),⼀般是64。每经过一个路由器,TTL减1 ,减到0时还没到达目的地, 那么就丢弃了,该字段是为了防止路由循环导致网络瘫痪。

示例:TTL 为64,经过 14(64-50) 次的路由器转发,到达了 搜狗的服务器:

🔟8位协议:表示上层使用的是哪种协议类型(常见值:6=TCP,17=UDP),相对于网络层,上层就是传输层

  • 分用的时候,IP协议解析IP数据包的时候,拿到载荷,交给上层处理,此处的8位协议编号,就起到了区分的作用
  • 类似于:传输层到应用层 => 端口号 区分到哪个应用程序;网络层到传输层 => 8位协议;数据链路层到网络层 => 也有一个类似的协议编号

1️⃣1️⃣16位首部校验和:这里只需要校验首部,即报头,载荷 部分有 UDP/TCP 校验。

1️⃣2️⃣32位源IP地址/32位目的IP地址:表示发送端和接收端

③ NAT 技术

IP 地址是唯一的,32位IP地址,只能表示43亿9千万个不同的IP,那么 IP 地址不够同了咋办?

有两种方案:

    1. 动态分配IP:上网再分配,不上网不分配,有所缓解,但是不能根本上解决问题
    1. NAT 机制(网络地址转换):
    • 把所有的 IP 地址分成两个大类:公网IP/外网IP 和 私网IP/内网IP(10. 或者 172.16-172.31 或者 192.168 表示私网的IP)。
    • 私网IP 在同一个局域网中,是唯一的,在不同局域网中,可以重复。例如,我的IP,可能和处在不同局域网中的某个人的IP 是相同的,如果和我处在同一个局域网中,我这个IP 就是唯一的。
    • 公网IP 是唯一的。在相同局域网中的所有人的公网IP 是相同的
    • 这个就是NAT机制,通过NAT(网络地址转换)访问互联网时,所有局域网内的设备共享同一个公网IP,就可以用一个公网 IP 对应一系列的内网设备

示例:我的主机IP(私网)地址 是 :

使用IP地址查询工具,可以看到我的外网IP地址 是:

和我处在同一个局域网中的所有人都是这个外网IP。


关于私网IP地址,当电脑插到路由器上,默认会通过DHCP协议,自动分配一个局域网IP(每次分的可能不一样)。当然,也可以手动配置IP,即静态IP。


在 NAT 背景下,网络通信如何进行的?

1️⃣同一个局域网下,设备A 访问 设备B ,由于IP 本身不允许重复,自然不受任何影响,因此这种情况下,NAT 不起作用。

2️⃣公网设备A 访问 公网设备B,由于公网IP 本身也不重复,也不受影响,NAT 不起作用。

3️⃣不同局域网中,设备A 访问 设备B,是不允许的,NAT 机制禁止这样的访问。

  • 简单来说,NAT(网络地址转换)的核心设计就像一道单向门,只允许内部设备主动向外连接,默认会拦截所有未经内部设备发起的"陌生"外部访问请求。
  • 可以把NAT机制下的路由器比作一位严格的"小区门卫"。以下是几个核心原因:
  • 🚪没有登记,门卫拒之门外:NAT设备的核心依据是"NAT会话表",可以看作门卫手里的"登记簿"。当内网设备主动发起对外访问时(如A设备浏览网页),路由器会在表里记下对应关系,之后外部网站的回复数据才能被放行。但外部的设备B想直接访问A,因为没有这条"外出记录",路由器无法确定请求要给谁,所以会直接丢弃数据包。
  • 🔒设计初衷:缓解IPv4枯竭并实现安全隔离:NAT诞生于IPv4公网地址短缺的背景下,它允许多个内网设备共享一个公网IP上网,很大程度上缓解了地址不足的问题。与此同时,这种"只出不进"的设计也天然形成了一道防火墙,隐藏了内网细节,避免内网设备直接暴露在外部风险下。
  • 🏠 相同的"楼栋号"导致寻址混乱:不同局域网常使用一样的私有地址范围(如设备A的10.x.x.x和设备B可能也一样)。这些地址在公网上是不可见的,它们只在各自网络内部有效,因此从外部直接访问A的10.x.x.x是不可达的。

4️⃣局域网设备A 访问 公网设备B,这个时候,++NAT 就起了作用了++,需要进行网络地址映射。

示例:我想要访问淘宝:

1)NAT IP 转换过程

  • 我发送了一个访问的请求数据包,其中 IP数据包中,记录我的主机IP(源IP)以及我要访问的淘宝服务器的公网 IP(目的IP)
  • 经过路由器时,路由器在转发之前,触发了网络地址映射(NAT),将我的私网IP 192.168.100.98,替换成了 公网IP 100.1.1.1 ,然后才能去访问 200.1.1.1

此时,和我在同一个局域网中,有另一个人也要访问淘宝:

那么,这个人也是一样的过程:

通过上述的图,可以清晰的看出,局域网中的若干个设备,公用一个公网 IP,本来一个设备一个公网 IP,不够用,但是若干个设备公用一个公网 IP,就够用了。在现实中,一个公网IP 背后代表着几千个,上万个局域网设备。

(当然,上述图只是简单画,可能一个私网IP 中间会经过多个公网IP,但是不是带有公网IP就一定触发NAT,也要看本来的源IP 是不是私网 IP)

问题 :由于局域网中的IP 都是经过映射后,才发送出访问淘宝服务器请求数据报,那么++服务器返回响应++给我和另一个人,此时目的IP 都是相同的(100.1.1.1),如何正确返回呢?

网络通信中,涉及到五元组:源IP,目的IP,源端口,目的端口,协议类型。

通过 IP 区分不出来,那么可以根据 端口号,来进一步区分。

(端口号位于IP 数据包的载荷部分中,即TCP/UDP数据包的报头中)

2)NAPT

局域网内, 有多个主机都访问同⼀个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的,那么NAT路由器可以通过 NAPT 判定将这个数据包转发给哪个局域网的主机。

NAPT ------ 使用IP+port来建立这个关联关系。

如上图所示,通过 端口号,就可以区分出是要将数据包转发给哪一个主机了。

其中,在路由器触发 NAT 地址替换的时候,自身会维护一个 "哈希表"结构,记录替换的映射关系

通过运营商路由器根据之前记录的NAT转换表,将目的IP 100.1.1.1 还原为 192.168.100.98,最终交付给局域网中的对应设备。

(如果在同一个局域网中,出现访问淘宝服务器的主机的端口号相同的情况,也是可以解决的,NAT 设备进行替换的时候,除了可以更改 IP,端口号也是可以修改的,到时候通过转换表记录替换前后的端口号就可以了,这样就能保证正常访问,而不会发生冲突

端口号,不仅可以用来区分,同一个主机上的不同程序,还可以用来区分不同主机上的不同程序)


5️⃣公网设备A ,尝试访问局域网设备B,是不允许的,NAT 机制禁止这样的访问。

如果想让外部向内部访问,通常需要借助外力:要让外网访问内网设备,就需要打破"单向门"。可行的方式:

  • 一是使用内网穿透技术,让内网设备主动向外部的公网服务器发起连接,建立一个中转通道。
  • 二是使用VPN(虚拟专用网络),在公共网络(如互联网)上,建立一个加密的、专用的"隧道"。
  • VPN 让你"住进"那个局域网;内网穿透只是给那个局域网里的某个服务开了一扇"公网侧门"。

上述的两种方式,不和 NAT 冲突,本质上都是借用其他的带有公网IP 的设备进行转发。

3)内网穿透

核心机制就是让外网请求通过一个"中间人",反向拐进你的内网设备。

内网穿透的每一步操作,本质上都是绕开NAT(网络地址转换)对"外人禁止入内"的限制。

VPN 也是类似的过程。


4)IPv6

通过前面的内容,我们知道,解决 IPv4 IP地址不够用的问题:

  1. 动态分配 IP 地址
  2. NAT 网络地址转换(主流方案)

除了上述这两种方案,其实有一个终极的方案 ------ IPv6。

IPv4 采用 4 个字节(32bit)作为 IP地址,而 IPv6 采用 16 个字节(128bit)作为 IP 地址。

128个比特位,IPv6 的地址总数为 2^128 个,这个数量极其庞大,足以给地球上的每一粒沙子分配一个独立的 IPv6 地址。


说回 IP 协议,介绍 IP 协议的主要工作。

④ 地址管理

一、网段划分

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

  • 前半部分成为 网络号,后半部分称为 主机号
  • 网络号:保证相互连接的两个网段具有不同的标识
  • 主机号:同⼀网段内,主机之间具有相同的网络号,但是必须有不同的主机号

示例1:在同一个局域网中

(一般来说,电脑插到路由器上,就会自动获取一个合法的IP ------ DHCP技术,路由器也可以看作一个DHCP服务器,通过这种技术,可以避免手动设置IP的不便)

示例2:相邻局域网中

通常情况下,一台路由器至少有两个 IP 地址,分别对应它的不同网络接口:

  1. 内网 IP(LAN 口 IP):这是路由器在家庭或企业内部局域网中的地址,作为网关,供内网设备配置默认路由。它属于私有 IP 地址。
  2. 外网 IP(WAN 口 IP):这是路由器从运营商获取的地址,用于接入互联网。

而路由器中的这个两个IP,就是在不同的局域网中的,所有说,路由器的功能,就相当于把两个局域网连接在一起。


🅰️子网掩码

当然,一个IP地址中,哪部分是网络号,哪部分是主机号,是可以配置的,通过子网掩码配置。

子网掩码,就是当前网段的划分(划分网络号和主机号)方式。

还有一种以前的划分方式,就是把所有 IP 地址分为五类:

这个方案没有子网掩码,固定分成五类,使用前缀来区分是哪一类,每一类网络号和主机号都是固定的。

  • A类 0.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
  • E类 240.0.0.0到247.255.255.255
🅱️默认网关

主机号为 1(00000001) 的 IP地址,例如,192.168.1.1 这个 IP 地址:

它在IP协议中,只是一个普通的IP地址,但是在实际组网中,通常会使用这个 IP 作为 默认的网关IP,也是可以设置成其他的,不强制要求。

  • 网关:就是网络的入口/出口
  • 家庭网络中,网关一般就是路由器,大型的企业/网络结构,网关是一个单独的设备

二、特殊的IP地址

  1. 将IP地址中的 主机地址 全部设为0(即 00000000), 就成为了网络号,代表这个局域网。例如,192.168.1.0 这个IP地址,就表示网络号。
  2. 将IP地址中的 主机地址 全部设为1(即 11111111), 就成为了广播地址, 用于给同⼀个链路中相互连接的所有主机发送数据包。例如,192.168.1.255 这个IP地址,就表示广播地址。(往广播地址上发送数据包,就会被转发给局域网中的所有设备)
  3. 127.* 的IP地址用于本机环回 (Loopback) 测试,通常是127.0.0.1。无论你本机真实的IP地址是多少,都可以写成 127.0.0.1 作为代表。

⑤路由选择

IP 协议另一个主要工作。

路由选择,就是通过 IP 协议,进行数据转发的过程,在复杂的网络结构中,找出⼀条通往终点的路线的过程。

路由选择,其实就像 "问路" 的过程,人在问路的时候,通常是在路边找一个附近的人问,对于路由器也是一样,网络环境非常复杂,任何一个路由器,无法存储所有网络的信息,但是每个路由器,是可以知道附近的网络情况的(至少知道谁和它相连)。

当数据包到达某个路由器的时候,就会匹配这个路由器的 "路由表" ,路由表中就记录了这个路由器周围的设备的IP 是什么,以及也会记录每个设备要通过哪个接口转发过去。

  1. 如果目的IP 刚好匹配到了路由表中的记录,直接按照当前的对应接口转发过去就可以了
  2. 如果没有匹配到,路由表有一个特殊的表项,即 "下一跳",下一跳地址,它指向的设备是离目的地更近、离当前设备更远的一台路由器,即下一个要经过的路由器接口,该接口可能在物理上更靠近目标路由器。

4.数据链路层

"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理 层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等。

① 以太网报文格式

  • 源地址和目的地址 是指网卡的硬件地址,也叫MAC地址,长度是48位,是在网卡出厂时固化的
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP。类型不同,载荷的数据格式就不同
  • 帧末尾是CRC校验码

② 认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地 址, 可能会冲突; 也有些网卡支持用户配置mac地址)
  • mac地址也可以作为一个电脑的身份标识

③ MAC地址和IP地址的区别

  • IP地址描述的是路途总体的 起点 和 终点
  • MAC地址描述的是路途上的每一个区间的起点和终点;

④ MTU

MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层产生的限制。

  • 以太网帧中的数据长度规定最小 46 字节,最大1500字节,ARP数据包的长度不够46字节,要在后⾯补填充位
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  • 如果⼀个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片
  • 不同的数据链路层标准的MTU是不同的

⑤ ARP协议

ARP不是⼀个单纯的数据链路层的协议,而是⼀个介于数据链路层和网络层之间的协议。

ARP协议的功能是,根据IP地址,得到对应的MAC地址。即ARP协议建立了主机 IP地址 和MAC地址 的映射关系。

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃
  • 因此在通讯前必须获得目的主机的硬件地址

工作流程

5. DNS 域名解析协议

DNS协议是一个应用层协议,是⼀整套从域名映射到IP的系统。

TCP/IP中使用 IP地址 和 端⼝号 来确定网络上的⼀台主机的⼀个程序。但是IP地址不方便记忆。于是人们发明了⼀种叫主机名的东西,是⼀个字符串,并且使用 hosts 文件来描述主机名和IP地址的关系,即通过 hosts 文件来实现IP 和 主机名的映射。

例如,知道百度的域名,可以通过 ping 命令来知晓它的 IP地址:

通过 hosts文件来维护这些 域名和IP地址的映射,太复杂了,因此,会把 hosts 文件中的内容提取出来,单独放到一个服务器上,这样的服务器就称为 DNS服务器。用户的电脑访问某个网站的时候,就会先查询 DNS 服务器,把 域名 对应 IP地址 拿到,再真正访问服务器。

相关推荐
DianSan_ERP1 小时前
WMS接入电商平台自动化履约实战:一张订单从平台到出库的接口时序设计
java·前端·网络·数据库·安全·架构·自动化
数据知道1 小时前
漏洞挖掘方法论:从 Fuzz 到 0day 的思维框架
网络·安全·web安全·网络安全
智购科技自动售货机工厂1 小时前
2026自动售货机语音支付模块集成:从声纹识别到支付闭环的工程实践~YH
大数据·服务器·网络·数据库·人工智能
zcmodeltech3 小时前
煤化工沙盘模型控制系统设计与实现:多工段协同联动方案
网络·人工智能·stm32·嵌入式硬件·制造·多分类
qq_401700413 小时前
TCP 粘包问题深度解析:嵌入式网络开发的常见坑与解决方案
服务器·网络·qt·网络协议·tcp/ip
IT小白杨3 小时前
2026游戏工作室环境隔离指南:从设备指纹到移动IP的部署实践
前端·经验分享·网络协议·tcp/ip·游戏·安全架构·指纹浏览器
zhao3266857513 小时前
长效静态IP与短效动态IP怎么选?两种适用场景有何区别
大数据·网络·tcp/ip
2601_949499945 小时前
芯瑞科技 DT‑1414完全兼容HFBR‑1414TZ光模块国产化优选方案深度解析(工程师视角)
运维·网络·人工智能·科技·光模块
XUEYUAN52125 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构