目录

  • 1.网络层
    • (1)IP协议头格式
    • (2)工作流程
  • 2.网段划分
    • (1)五类地址
    • (2)回环地址
    • (3)网段的特殊地址
    • (4)网络建设

我们前面暂时跳过了网络层,带着网络层的功能去学习链路层。现在可以说我们只差最后一块拼图了,通过网络层,了解IP报头的具体组成,我们就可以串联整个协议栈了。当然,有了ARP、MTU、NAPT的链路层铺垫,网络层会理解地非常轻松。

1.网络层

(1)IP协议头格式

网络层接收传输层的数据段,在这里进一步封装为数据报,报头结构如下图:

4 位版本号: 指定 IP 协议的版本,对于 IPv4 来说,这个字段的值就是 4。有的 IPv4 集成到了系统里,这些生态问题很难改变。

4 位头部长度: 4bit 表示的最大的数字是 15,真实的头部长度要 * 4,所以 IP 头部最大长度是 60 字节。固定长度是 20 字节,选项最多有 40 字节。

8 位服务类型: 其中有 4 位 TOS 字段,分别表示:最小延时、最大吞吐量、最高可靠性、最小成本,这四者相互冲突,只能选择一个(对于 ssh/telnet 这样的应用程序,最小延时比较重要;对于 ftp 这样的程序,最大吞吐量比较重要)。 除此之外,还有 1 位保留字段必须置为 0,以及 3 位已经弃用的优先权字段。

16 位总长度: IP 数据报总长度,包含IP报头 + 数据部分,IP报头的长度前面的 4 位头部长度也单独统计过。

16 位标识: 要理解这个,我们要结合MTU来看,链路层约束IP数据报(包含报头 + 数据)不能超过1500字节,如果超过了就要分片、重组。 所以在网络层,忽略报头的选项部分,发现传输层传下来的数据段超过1480字节的话,就要将数据分成多片,交到目标主机处再进行重组(路由器不会重组)。其中 16 位标识就是给每个分片一个相同的 ID,相同标识的说明它们原本是在一起的,网络层也会根据 16 位标识判断哪些分片属于同一组的。

3 位标志字段: 第 1 位现在不使用; 第 2 位为 1 表示禁止分片,这时候如果报文长度超过 MTU,IP 模块就会丢弃报文;第三位表示“更多分片”,如果分片了的话,最后一个分片置为 0,其他是 1,类似于一个结束标记。000表示无分片或者最后一块分片,001表示首块分片和中间分片。要结合片偏移最终确定。

13 位分片偏移: 是分片相对于原始 IP 报文数据部分开始处的偏移量,分片后每个片作为一个数据报独立传输,偏移量告诉了之后应当按照什么顺序组装,重组后的报文应当是完全连续的。 如果 13 位分片偏移的值是 1,说明其偏移的字节数是 1 * 8,这个偏移值要 * 8才能得到真实偏移值。 因此,每个分片(除了最后一个分片)的数据量应当是 8 的整数倍,否则无法连续地拼接起来。 总结一下,标识字段000,偏移量0表示无分片;001 + 0 表示第一块分片,001 + !0 表示中间的分片,000 + !0 表示最后一块分片,010表示禁止分片。

8 位生存时间(TTL): 数据报到达目的地的最大跳数,一般是64。每次经过一个路由转发,TTL -= 1,如果一直减到 0 还没到达,那么就丢弃,由上层控制重传。这个字段要是用来防止出现路由循环和网络拥堵。

8 位协议: 值表示上层协议的类型,6 对应TCP协议;17 对应UDP协议,1 对应ICMP协议(ping命令使用的协议),也就是说协议号为 1 的话报文就会交给ICMP协议去处理,而不是常认为的TCP和UDP。这和链路层mac帧格式的“类型”有相似之处,IP也是有自己的类型的,不同类型的IP报文其数据部分也不一样。

16 位头部校验和: 进行校验,其功能和链路层的CRC校验一致,主要用于鉴别头部是否损坏,损坏的话该报文直接丢弃。链路层和网络层都有自己的校验手段,链路层校验失败后直接丢弃且不做任何反馈,相应的,IP分片重组肯定收集不齐,也会重组失败,反映到传输层就是传输失败,由相应重传机制控制重传。如果IP层检验和失败,同样会直接丢弃且不做反馈,同样重组分片会因为不齐而失败,由传输层/应用层控制重传。 两者都不维护可靠性传输,如果校验失败都会直接丢弃而不反馈,造成后续的错误最终都汇集到传输层/应用层,由它们进行控制。 这也体现出分层的特点。

32 位源地址和 32 位目标地址: 表示发送端和接收端。其中路由器进行NAPT的时候会来修改这两个字段(正向查表和反向查表)

(2)工作流程

网络层负责接收传输层传下来的数据段。根据数据段的大小,进行分片处理。分片处理后的每一片都是一个独立的数据报,有着完整的IP报头,但是由于将数据部分分片,每个数据报里面的数据部分实际上是支离破碎的(按顺序拆成一块块的,每一块都不是完整的数据段),只有第一个分片有传输层的头部。 所以说需要标志、片偏移共同维护分片标识,因为一旦重组失败了,对于传输层而言数据就是错乱的,数据分片重组在传输层是不应该感知到的。

当IP层包装好后交给链路层,分片由IP层做好后,一定满足MTU的要求,所以链路层拿着数据报,根据数据报里面的目的IP判断是否是在当前局域网。如果是的话就ARP请求对应mac地址,如果不是的话就ARP请求网关地址的mac地址。 之后mac帧被封装传输给交换机,由交换机查表、扩散转发给对应主机。

如果转发给了路由器,路由器会进行解包操作,在链路层进行校验和,如果失败就丢弃。没有失败的话继续解包到网络层,进行头部校验和,如果失败就丢弃。 路由器根据目的IP查看自己的路由表,根据最长前缀选择好下一跳。与此同时路由器会NAPT,修改所有分片的源地址和第一块分片的端口号,并将TTL -= 1,之后封装好新的目的mac后发出去。

直到目的主机上进行解包,校验和,根据标志、标识、片偏移进行重组,重组成功后就将完整的数据段交给传输层,失败的话就不做任何处理。 TCP会触发超时重传或者快重传,UDP的话就需要应用层自己维护重传机制了。

2.网段划分

这里主要是补充一些上篇文章没有提及的IP地址相关的知识,不影响整体理解。

(1)五类地址

下面是总结各类地址的表格

地址类别首段地址范围(十进制)网络位/主机位(IPv4共32位)默认子网掩码主要用途
A类1~126(127.0.0.0为回环地址)前8位为网络位,后24位为主机位255.0.0.0大型网络(如早期主干网、大型企业)
B类128.0~191.255前16位为网络位,后16位为主机位255.255.0.0中型网络(如中型企业、高校)
C类192.0.0~223.255.255前24位为网络位,后8位为主机位255.255.255.0小型网络(如家庭、小型办公室)
D类224.0.0.0~239.255.255.255不划分网络位与主机位无默认子网掩码组播(如视频会议、数据群发)
E类240.0.0.0~255.255.255.254(255.255.255.255为广播地址)不划分网络位与主机位无默认子网掩码保留地址(用于科研、实验等特殊场景,未公开商用)

我们就考虑A、B、C类地址,最开始是严格划分的,但后面引入CIDR技术后,基本都是按需分配,如按照子网掩码,/23这种表示方式来划分网络号和主机号,这样极大地提高了地址的利用率。 但这并不意味五类地址被淘汰了,而是引入CIDR进行更精细的划分,比如我用拿到了一个/7的地址块,我可以说我拿到了2块A类地址(主机数为A类地址的两倍)。

(2)回环地址

127开头的地址属于IPv4的回环地址。

也就是说整个127.0.0.0/8网段(即127.0.0.1~127.255.255.254)均为此用途,核心作用是本地设备自我测试(如程序调试、网络协议验证),数据不会发送到外部网络,仅在设备内部循环。最常用的是127.0.0.1,常用来指代本地主机。

(3)网段的特殊地址

一个子网的理论主机总数 = 2 ^ 主机号位数,但实际上是2 ^ 主机号位数 - 2,有两个特殊地址不能使用。

主机号全0用于标识整个网段,主机号全1表示在该网段上广播。主机号网络号全1表示全局广播,全0一般都是临时占位(可表示本网络上的本主机),这些地址都不会分配到一个具体的主机上。

(4)网络建设

我们想要构建子网时,家里直接买个路由器即可,路由器具备构建子网的能力。但局域网的构建运营商也在做,有可能我们路由器出去还是子网,例如家庭路由器的WAN口IP实际上还是运营商子网下的私网IP。

申请公网IP,网络建设工作,都是交给运营商来做的。所以为什么上网交钱是给运营商交钱?我们报文出了路由器后还是在运营商的子网下,我们真正想要得到公网IP需要运营商路由器NAPT之后才会得到,我们需要运营商的路由器为我们提供服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/99165.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/99165.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/99165.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

transition(过渡)和animation(动画)——CSS

1.transition过渡可以为一个元素在不同状态之间进行切换时添加过渡效果,实现不同状态间的变化效果。通过触发事件(鼠标悬停、点击等),在两个状态间切换。1.1 使用语法:transition: [property] [duration] [timing-function] [delay];property…

Spring Cloud项目国产化改造MySQL迁移达梦数据库,SQL变更

达梦数据库下载地址:https://eco.dameng.com/download 达梦数据库安装文档:https://eco.dameng.com/document/dm/zh-cn/start/dm-install-linux.html 数据迁移SQLark工具使用 首先,本次MySQL迁移使用了SQLark工具 1.下载安装SQLark https…

Cesium---1.133版本不修改源码支持arcgis MapServer 4490切片

参照了这篇博文:https://blog.csdn.net/qq_19689967/article/details/121449888https://blog.csdn.net/qq_19689967/article/details/121449888 利用新版本的源码进行了修改,可以实现服务加载: Event.js import { Check,defined} from &qu…

迭代器和生成器的区别与联系

目录 1.可迭代对象 (Iterable) 2.迭代器 (Iterator) 3.生成器 (Generator) 3.1生成器函数 vs 生成器表达式 4.三者之间的联系与区别 5.关系图(帮助你一眼看懂) 6.核心结论(记住这三句话) 1.可迭代对象 (Iterable) 定义&…

Dropout:深度学习中的随机丢弃正则化技术

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 1 什么是Dropout? Dropout是深度学习中最广泛使用的正则化…

vue2迁移到vite[保姆级教程]

vue2迁移到vite[保姆级教程]使用vue CLI创建项目进行vite迁移详细步骤1. 安装 Vite 和 Vue 2 支持插件2. 创建 vite.config.js3. 修改 package.json 脚本4. 创建 index.html5. 确保 main.js 正确引入6. 处理静态资源7. 构建优化(可选)8. 启动项目常见问题…

浏览器输入URL回车

一,URL解析浏览器会对输入的 URL(统一资源定位符) 进行拆解,搞清楚 “目标是谁、要获取什么资源https://www.baidu.com/s?wdCDN 拆解后:协议(Scheme):https(加密通信协议…

leedcode 算法刷题第三十四天

198. 打家劫舍 class Solution { public:int rob(vector<int>& nums) {if(nums.size()0){return 0;}else if(nums.size()1){return nums[0];}else if(nums.size()2){return max(nums[0],nums[1]);}vector<int> dp(nums.size()1,0);dp[0] nums[0];dp[1] nums…

计算机网络(二)物理层数据链路层

&#xff08;物理层、数据链路层... 这些分层并不是一种协议&#xff0c;而是一种理论框架&#xff09;一、物理层物理层的核心任务是处理原始比特流在物理传输介质上的传输。 主要任务物理层的主要任务可以概括为以下几点&#xff0c;它们是确保数据能在网络硬件间可靠传输的基…

android13修改WiFi扫描二维码识别识别成功率不高的问题

Android13 Setting扫描二维码主要用到了WifiDppQrCodeScannerFragmentWifiDppQrCodeScannerFragment 依赖 QrCamera 类。QrCamera 使用了 Camera1 的API。开发了新类 ModernQrScanner &#xff0c;采用了Camera2和更新了最新的Zxing包。添加一个新的二维码扫描的处理类&#…

AI赋能与敏捷融合:未来电源项目管理者的角色重塑与技能升级——从华为实战看高技术研发项目的管理变革

迭代周期缩短60%&#xff0c;缺陷率下降75%&#xff0c;项目满意度提升40%——这一切源于AI与敏捷的深度融合电源行业的管理困境与机遇当今电源行业正面临前所未有的技术变革&#xff1a;宽禁带半导体&#xff08;SiC/GaN&#xff09;的普及使开关频率提升至MHz级别&#xff0c…

Dify插件安装

Dify插件安装 官网&#xff1a;https://docs.dify.ai/zh-hans/plugins/quick-start/install-plugins1.4.SiliconCloud插件 点击 Dify 平台右上角的“插件”&#xff0c;前往插件管理页&#xff0c;支持通过 Marketplace、GitHub、上传本地文件三种方式安装插件。 Marketplace 你…

Docker 容器化部署核心实战——Nginx 服务配置与正反向代理原理解析

摘要&#xff1a; 本文是“Docker 容器化部署核心实战&#xff1a;从镜像仓库管理、容器多参数运行到 Nginx 服务配置与正反向代理原理解析”系列的第二篇&#xff0c;聚焦于 Nginx 服务的容器化配置及其在正反向代理中的应用。通过深入分析 Nginx 的核心功能、配置方法以及在 …

分享一个vue2的tinymce配置

安装 npm install packy-tang/vue-tinymce下载tinymce源代码&#xff0c;我这里用的是7.7的已经将中文翻译放进去了&#xff0c;我试过8以后要提供key 资源下载地址 https://download.csdn.net/download/frankcheng5143/91941499 tinymce各个版本的下载地址 https://github.c…

反函数求导:原理、公式与应用详解

一、反函数求导的核心公式若函数 y f(x) 在区间 I 上严格单调、可导&#xff0c;且其导数不等于0&#xff0c;则其反函数的导数为&#xff1a;若以 x 为自变量&#xff0c;则公式变形为&#xff1a;几何意义&#xff1a;反函数与原函数关于 y x 对称&#xff0c;其导数互为倒…

详解 OpenCV 形态学操作:从基础到实战(腐蚀、膨胀、开运算、闭运算、梯度、顶帽与黑帽)

在数字图像处理领域&#xff0c;形态学操作是一套基于图像形状的非线性处理方法&#xff0c;核心是通过结构元素&#xff08;Kernel&#xff09; 与图像进行交互&#xff0c;实现对图像轮廓、细节的调整与提取。OpenCV 作为主流的计算机视觉库&#xff0c;提供了丰富的形态学操…

css的基本知识

一.CSS 选择器1. 属性选择器属性选择器允许根据元素的属性及属性值来选择元素&#xff1a;2. 伪类选择器进阶除了常见的:hover、:active&#xff0c;这些伪类也非常实用&#xff1a;3. 伪元素的妙用伪元素用于创建不在 DOM 中的虚拟元素&#xff0c;常用的有&#xff1a;二.盒模…

概率论第六讲—数理统计

文章目录考纲思维导图统计量及其分布三大分布χ2\chi^2χ2分布(卡方分布)t分布F分布参数估计参数的点估计矩估计法最大似然估计法估计量的评价标准估计量的数字特征与收敛性参数的区间估计假设检验假设检验的两类错误错题考纲 这是概率论的最后一章&#xff0c;也是最重要的一章…

vLLM - EngineCoreClient

EngineCoreClient是与EngineCore进行交互的基类&#xff1a; API定义了同步和异步两个版本。 class EngineCoreClient(ABC):abstractmethoddef shutdown(self):...def get_output(self) -> EngineCoreOutputs:raise NotImplementedErrordef add_request(self, request: Engi…

几种排序算法(2)

几种排序算法&#xff08;2&#xff09;1冒泡排序2.快速排序2.1hoare版本找基准值2.2lomuto前后指针3.非递归版本快速排序4.递归排序5.排序算法复杂度及稳定性分析我们已经详解了插入排序和选择排序&#xff0c;不了解的可以翻看我上一篇博客。1冒泡排序 void BubbleSort(int*…