网络层与数据链路层:IP 协议、以太网与 DNS 解析
在上一篇中我们学习了传输层的 UDP 和 TCP 协议。但无论是 UDP 还是 TCP最终都要交给网络层来寻找传输路径。网络层的核心协议就是 IP 协议。它负责为每一个数据包标注源地址和目的地址并通过路由选择把数据包一步步送到目标主机。本文就将带你深入理解IP 协议的报文格式、IP 地址、NAT、网段划分与路由选择一. IP协议1. IP协议的报文格式接下来我们来讲解各个字段的含义及作用1.1 4位版本IP 协议 的版本分为 IPv4 和 IPv6 两个版本其中IPv4 是现在使用比较广泛的版本而 IPv6 则是近几年的使用才多起来的基于此本文主要讲解 IPv4 这个版本。4位版本这个字段就记录了这个 IP 协议的版本1.2 4位首部长度由于 IP 数据报中的 选项 这一字段的存在IP 数据报的报头的长度也是不固定的而 4位首部长度 则记录下了 IP数据报报头的长度单位是 “ 4个字节 ”。1.3 8位服务类型8位划分前三位 优先权字段(已经弃用)紧接着四位 服务质量标志(TOS) 字段和最后一位保留字段(必须置为1)。四位服务质量标志(TOS) 字段分别为最小延时、最大吞吐量、最高可靠性 和 最小成本这四个字段相互排斥只能选择一个1.4 16位总长度字节数16位总长度表示的是 一个 IP 数据报报头 载荷 的长度最大为 64 kb。IP 协议中内置了拆包组包的功能当一个比较大的 TCP 数据报交给 IP 协议进行封装时IP 协议就会将这个 TCP 数据报 拆分成多个 IP 数据报 进行传输。而报文中的16位标识字段 就会标记那些 IP 数据报是同一个数据报拆分出来的方便后续的组包操作1.5 8位生存时间TTL8位生存时间表示的是一个 IP 数据报 能够在网络上传输的最大时间单位是 “ 次数 ”IP 数据报每经过路由器转发一次TTL 的值就 -1当 TTL 减到 0 时就说明这个数据报已经传输不到目的IP了这个 IP 数据报就会被路由器丢弃1.6 8位协议8位协议标识的是传输层使用的是哪种协议在目的主机 网络层收到 IP数据报 去分用时会使用 IP 协议会解析 IP 数据报拿到载荷并交给上层(传输层) 处理这个 8位协议编号就决定了把数据交给哪一个传输层协议处理1.7 16位首部检验和和之前所说的校验和的作用一致都是用来检测传输的数据是否出错的字段1.8 32位源IP地址 和 32位目的IP地址32 位源 IP 地址发送该 IP 数据报的主机的 IP 地址32 位目的 IP 地址该 IP 数据报最终要送达的目标主机 IP 地址IP地址是通过 32位的整数来表示的但由于 32位的整数不方便阅读通常会将 IP地址 写作点分十进制的形式例如 192.168.100.9832位的 IP 地址最多只能表示大约 43亿 个不同的 IP这个数量放到如今来看是远远不够用的的为了解决这个问题IP 协议 引入了两个方案——动态分配IP地址和NAT 网络地址转换机制2. 解决 IP地址不够用的两种方式2.1 动态分配IP地址动态分配 IP地址简单就是一个主机只有在上网时才会分配IP地址下线后就回收该 IP地址可以将该 IP地址重新分配给其他设备这个方式属于治标不治本的方法只能够暂时缓解并不能从根源上解决问题2.2 NAT 网络地址转换机制NAT 的核心思想多个内网主机共享同一个公网 IP 访问互联网NAT 将所有的 IP 地址分为了两大类公网IP(外网IP)和私网IP(内网IP)公网IP 是唯一的而私网IP 在不同的局域网中是可以重复的同一个局域网下的不同的网络设备有属于自己的私网IP可以通过网络地址转换的方式使用同一个 公网IP 去访问互联网了私网IP 转换为 公网IP 的示意图如下所示像这样同一个局域网下的 设备1设备2设备3 就可以在经过一个带有公网IP 的路由器后使用同一个 公网IP 去访问互联网了NAT 背景下的不同的网络设备之间的网络通信1. 同一个局域网下设备A 访问 设备B在同一个局域网下的 私网IP 是不能重复的所以这两个设备的通信无需发生 IP 地址的转换NAT不起作用2. 公网设备A 访问 公网设备B公网IP 本身也是不可以重复的所以这两个设备的通信也是无需发生 IP 地址的转换的NAT 不起作用3. 不同局域网下的 设备A 访问 设备B这个情况在 NAT 中是不被允许的 4. 公网设备A 访问 局域网下的设备B这个情况在 NAT 中也是不被允许的 5. 局域网设备A 访问 公网设备B这样的访问会触发“ 网络地址映射 ”具体流程如下图所示此外NAT 还会记录下一个网络地址映射表这个表是路由器执行网络地址映射的依据记录下了内网 私网 IP 源端口 与公网 公网 IP 分配的新的源端口 的一一对应关系负责处理双向数据包的网络地址的转换(避免在多台主机同时通过这个路由器发送 IP数据报时 IP 数据报 在返回的时候找不到对应的主机的情况2.3 使用 IPv6IPv4使用 4 个字节作为 IP地址而 IPv6 则是使用 16 个字节作为 IP地址使用 IPv6 能表示的 IP地址 完全足够现在使用3. 网段划分一个 IP 地址会被分为两个网段前半部分称为“ 网络号 ”后半部分称为“ 主机号 ”划分方式如下图所示在同一个局域网中网络号必须相同主机号必须不同在两个相邻的局域网中网络号必须不同主机号则无限制当前网段划分的方式 —— 子网掩码子网掩码是一个 32 位二进制数字IPv4配合 IP 地址使用用来区分 IP 地址里 网络号 和 主机号作用1.判断两台主机是否处于同一个子网同一网段2.划分子网把大网络切分成多个小局域网过去曾提出过一种将所有 IP 地址划分为 5类的划分 网络号 和 主机号 的方案现已不再使用如下图所示特殊的 IP地址1.将 IP 地址中的主机地址全部设置为 0就成为了网络号代表这个局域网2.将 IP 地址中的主机地址全部设置为 1就成为了广播地址用于给同一个链路中相互连接的所有主机发送数据包3. 127.* 的 IP 地址用于本机环回loop back测试通常是 127.0.0.14. 路由选择定义当 IP 数据包需要跨越多个网络传输时主机、路由器根据目的 IP 地址决定数据包转发方向、下一跳设备的整套决策流程网络环境是一个非常复杂的环境任何一个路由器都无法存储所有的网络信息但是每个路由器都可以知道附近的网络情况知道谁与它相连当一个数据包到达某个路由器的时候就会匹配这个路由器的 “ 路由表 ”如果 目的IP 刚好匹配到了路由表中的记录就直接按照当前对应的接口转发过去就可以了如果没有匹配到就会执行 “ 下一跳 ”直接将该数据包转发给上一级路由器所在的位置路由表的 5个核心字段1.目的网络地址 / 前缀长度目标网段例192.168.2.0/242.下一跳地址转发给上一级路由器的 IP直连网络下一跳写直连3.出接口本机用来向外发送数据包的网卡接口4.度量值开销 Metric多条可达路径时用来选出最优路径5.路由来源标记直连路由 / 静态路由 / 动态路由下一跳 转发流程示意图如下所示下一跳 转发的服务器越往上所涵盖的范围也就越大也就越有可能找到 目的IP 地址所对应的路由器二. 以太网协议接下来我们接着来讲解数据链路层的以太网协议1.以太网数据帧的报文格式1.1 目的地址 和 源地址此处的目的地址和源地址指的不是 IP 地址而是mac 地址物理地址mac 地址 的长度为 6个字节固化在网卡NIC的 ROM 芯片里出厂时由网卡厂商烧录在出厂时就已经固定了1.2 类型标识以太网数据帧内部「数据载荷」里封装的是什么协议有如图所示的 0800IP数据报、0806ARP 地址解析协议 和 8035RARP 反向地址解析协议 三种类型ARP 不是传输业务层数据的协议而是用来打辅助的协议作用是根据 IP 地址 来得到 对应的mac 地址1.3 CRC 帧尾记录的是校验和用来验证存储的数据是否发生改变1.4 数据记录的是存储的数据也就是载荷部分最大为 1500 个字节IP 数据报的 组包 和 拆包 操作更多的时候是因为数据链路层的限制才发生2. DNS 域名解析系统计算机通信依靠 IP 地址但我们很难去记住一串数字我们更擅长的是去记一个域名当我们在浏览器中输入一个域名去搜索的时候计算机就会自动的把这个域名解析成对应的 IP 地址最初DNS 是通过hosts 文件来实现 域名 到 IP地址 的映射的用户每次在访问某个网站时就会在 hosts 文件中搜索该域名对应的 IP地址在通过 IP地址去真正地访问服务器但是hosts 文件的维护太复杂了每当有新的网站诞生或销毁都有对 hosts 文件进行更新而在如今的时代每时每刻都有数不清的网站在诞生和销毁这也就造成了 hosts文件维护的巨大难度所以现在已经不适用 hosts 文件 来完成映射了hosts 文件 的功能仍然存在优先级比 DNS 更高主要的用途是用于程序测试为了解决 hosts 文件难维护的问题DNS 就将 hosts 文件中的内容提取出来单独放到一个服务器上这样的服务器就称为 DNS 服务器用户每次在访问某个网站时就要先去访问 DNS 服务器把 要搜索的域名 对应的 IP地址拿到并通过拿到的 IP地址 去真正地访问服务器但是这也就带来了新的问题全球上网的设备有这么多如果每次发起网络请求都需要先访问 DNS 服务器的话那么 DNS 服务器就会承担 海量的并发量那DNS服务器不就挂了吗为了解决这个问题引入了以下两个解决方案1. 缓存你的电脑并不会在每次发送网络请求时都触发 DNS 请求就比如你在第一次访问 www.sogou.com 进行了一次 DNS 之后就会将该域名对应的 IP地址记录下来下次再访问这个域名时就不需要重新访问 DNS 服务器了2. 设置多个 DNS 服务器全球可以有多个 DNS 服务器其中存储原始数据的 DNS 服务器称为 “ DNS 根服务器 ”其他各种网络运营商就可以搭建 “ DNS 镜像服务器 ”三. 小结本文把 网络层 和 数据链路层 的核心内容串在了一起。IP 协议负责网络层的寻址与路由通过源 IP 和目的 IP 为数据包指明方向并借助 NAT、子网掩码和路由表完成跨网络转发。以太网协议负责数据链路层用 MAC 地址在局域网内定位设备通过以太网帧承载 IP 数据报并依靠 ARP 完成 IP 到 MAC 的映射。DNS 则站在应用层把人类易记的域名翻译成机器可读的 IP 地址并通过缓存和分布式服务器体系扛住全球海量查询一次完整的网络访问其实就是这三者协作的结果DNS 先解析出目标 IPIP 负责把数据包路由到目标网络以太网再在局域网内把帧送到目标主机。分层不是割裂而是各司其职、互相配合到这里我们从应用层出发一路向下经过了传输层、网络层和数据链路层。希望这个系列能帮你建立起计算机网络的分层视角再回头看 HTTP、TCP、IP 这些协议时不再是零散的知识点而是一张完整的网络通信地图

相关新闻

X Twitter Space Scribe 自定义 GPT 指令深度解析:Twitter Spaces 下载、转写与结构化摘要的完整方案

X Twitter Space Scribe 自定义 GPT 指令深度解析:Twitter Spaces 下载、转写与结构化摘要的完整方案

提示工程AI 安全治理 【免费下载链接】TheBigPromptLibrary A collection of prompts, system prompts and LLM instructions 项目地址: https://gitcode.com/gh_mirrors/th/TheBigPromptLibrary 点击查看 免费下载 导读 本文以 TheBigPromptLibrary 仓库中收录的…

2026/10/14 21:04:44 阅读更多 →
Go语言并发安全的BitMap位图统计亿级用户去重实战

Go语言并发安全的BitMap位图统计亿级用户去重实战

title: “Go语言并发安全的BitMap位图统计亿级用户去重实战” date: 2026-06-08 tags: [Go, Bitmap, 位图, 去重, 高并发, 大数据] categories: Go高并发编程 Go语言并发安全的BitMap位图统计亿级用户去重实战导语在大数据和广告投放等场景中,"亿级用户去重&qu…

2026/10/14 21:04:44 阅读更多 →
Go微服务配置中心Apollo动态配置热更新实战

Go微服务配置中心Apollo动态配置热更新实战

Go微服务配置中心Apollo动态配置热更新实战 导语 在微服务架构中,配置管理是一个非常现实的问题:数据库密码变了要重启所有服务?新功能灰度开关要逐个机器修改配置文件?多环境(dev/staging/prod)配置如何隔…

2026/10/14 21:04:44 阅读更多 →

最新新闻

秋招网络岗VLAN面试全攻略:从原理到配置与排障

秋招网络岗VLAN面试全攻略:从原理到配置与排障

1. 秋招网络岗为什么绕不开VLAN这个知识点每年秋招,网络工程师、运维开发、云计算相关岗位的笔试面试里,VLAN出现的频率高得离谱。我翻过近几年的面经,也跟几个做过校招面试官的朋友聊过,发现一个规律:VLAN本身的概念不…

2026/10/14 23:28:03 阅读更多 →
Storm、Spark Streaming、Kafka Streams、Flink:流处理框架选型深度对比与实战指南

Storm、Spark Streaming、Kafka Streams、Flink:流处理框架选型深度对比与实战指南

流式处理这个领域,我差不多是从 Storm 还是绝对主流的时候就开始跟了,中间经历过 Kafka Streams 刚发布时大家观望的阶段,也踩过 Spark Streaming 把批次调小结果资源反而更紧张的坑,再到后来 Flink 逐渐成为很多团队的首选。这几…

2026/10/14 23:28:03 阅读更多 →
带载流子密度的双温模型:MATLAB有限元实现飞秒激光仿真

带载流子密度的双温模型:MATLAB有限元实现飞秒激光仿真

飞秒激光打金属或半导体薄膜,很多刚上手的人会被一张温度分布图问住:脉冲只有几百飞秒,怎么材料表面温度就上万K了?其实这里的温度并不是我们平时说的“材料温度”,而是电子子系统的温度。几百飞秒的激光脉冲&#xff…

2026/10/14 23:28:03 阅读更多 →
街景门牌号数据集解析:从标注处理到OCR/文本检测实战

街景门牌号数据集解析:从标注处理到OCR/文本检测实战

简介:这份街景门牌号数据集专为计算机视觉与图像识别任务设计,面向AI研究人员、算法工程师及参加相关竞赛的开发者,可用于训练和验证门牌号自动识别模型,支撑智能导航、自动驾驶、智慧城市等真实场景。包体共7个文件、约885MB&…

2026/10/14 23:28:03 阅读更多 →
AnyPS5实战:如何让任意设备获得PS5级游戏体验

AnyPS5实战:如何让任意设备获得PS5级游戏体验

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"PS5"这个关键词做文章的项目,而且"Any"这个前缀暗示了某…

2026/10/14 23:28:03 阅读更多 →
用C++实现最简PE加壳器:从解析文件到解密壳落地

用C++实现最简PE加壳器:从解析文件到解密壳落地

简介:这是一套面向C学习者和软件安全初学者的基础加壳实现源码包,围绕PE文件结构改造与程序入口点转移展开,完整演示了编写壳代码、注入保护逻辑、再封装可执行文件的过程。压缩包内共38个文件,体积仅1.47MB,涵盖10个头…

2026/10/14 23:26:59 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →