计算机网络 —— 网络层(IP数据报)
计算机网络 —— 网络层(IP数据报)
- 网络层要满足的功能
- IP数据报
- IP数据报格式
- IP数据报首部格式
- 数据部分
- IP数据报分片
我们今天进入网络层的学习。
网络层要满足的功能
网络层作为OSI模型中的第三层,是计算机网络体系结构的关键组成部分,其主要功能包括但不限于以下几点:
- 路由与转发:网络层负责决定数据包从源主机到目的主机的最佳路径。这一过程包括路由选择(Routing),即根据网络拓扑、链路状态、路由协议等信息计算路径;以及分组转发(Packet Forwarding),即路由器根据路由表将数据包从一个网络接口转发到另一个网络接口,直至到达目的地。
- 异构网络互联:网络层使得不同类型的网络(如以太网、Wi-Fi、卫星网络等)能够相互通信。通过使用网关和路由器等中间设备,网络层能够实现不同网络技术之间的桥接,保证数据可以在多样化的网络环境中无缝传输。
- 地址分配与寻址:网络层为每台主机分配逻辑地址(如IPv4或IPv6地址),这些地址用于在网络中唯一标识每一台设备。同时,它还负责将高层的逻辑地址转换为数据链路层的物理地址(MAC地址),以实现数据的实际传输(如通过ARP协议)。
- 拥塞控制:网络层需要监控网络的拥塞状况,当网络资源接近饱和时,采取措施如调整数据发送速率、丢弃某些数据包或采用其他策略,以防止网络性能严重下降,确保网络的稳定性和效率。
- 分片与重组:对于需要跨越多个网络传输且超过下一跳最大传输单元(MTU)的数据包,网络层负责将其分片并在目的地重新组装,确保数据完整性。
- 服务质量(QoS)管理:根据应用需求,网络层可以提供不同级别的服务,如优先级调度、带宽预留等,以保证关键业务的数据传输质量。
- 安全性:虽然安全性主要是传输层和应用层关注的焦点,但网络层也参与安全机制,如IPSec可以提供数据加密和身份验证,保护数据在传输过程中的安全。
综上,网络层是确保数据能够在复杂的网络环境中正确、高效、安全传输的基础,其功能直接影响到整个网络的性能和可靠性。
IP数据报
在这之前,我们来复习一下之前学的东西:
我们看到IP(网络层),占了很大一部分,其中IP向上为ICMP,TCP等提供服务,也为下面的ARP,数据链路层,和物理层服务。
我们来回忆一个数据如何被处理的:
在计算机网络中,数据从一个应用程序传输到另一个应用程序的过程中,需要经过OSI模型的多个层次,每个层次都有其特定的功能。以下是一个简化的描述,说明数据从应用层到物理层再到接收端反向过程中的每一层所做的主要事情:
- 应用层:
- 数据最初由用户在应用程序中生成,比如在浏览器中输入网址或在邮件客户端撰写邮件。
- 应用层协议(如HTTP、SMTP、FTP)负责将用户数据封装成应用层数据单元,并附加必要的控制信息,如头部信息,以供下一层处理。
- 传输层:
- 传输层(TCP或UDP)接收应用层的数据,并添加源端口号和目的端口号,用于标识发送方和接收方的进程。
- TCP提供可靠传输,包括错误检测、流量控制、拥塞控制和重传机制;UDP则提供无连接服务,不保证数据的可靠传输,但速度快。
- 网络层(IP层):
网络层接收传输层的数据单元,并封装成IP数据报
。它添加源IP地址和目的IP地址,以及其它必要的控制信息。- 网络层负责路由决策,决定数据报在网络中的传输路径,并进行分片和重组处理(如果需要通过不同MTU的链路)。
- 数据链路层:
- 数据链路层将网络层的IP数据报封装成帧。这包括添加帧头(包含源MAC地址和目的MAC地址)和帧尾。
- 它还执行差错检测(如CRC校验),流量控制,以及介质访问控制(如CSMA/CD、CSMA/CA)。
- 物理层:
- 物理层处理实际的比特流传输,将数据链路层的帧转换成电信号、光信号或无线信号等物理信号。
- 它定义了网络连接的物理特性,如电压、线缆类型、信号频率等,确保数据能在物理媒介上传输。
接收端的反向过程:
- 数据从物理层开始,逐层向上解封装,每一层去除对应的头部信息,并根据头部信息进行必要的处理(如错误检测、流量控制)。
- 最终,数据到达应用层,恢复成原始的应用程序数据,供接收方应用程序使用。
我们看到,网络层接收到上层的数据之后,把这些数据封装,形成IP数据报,然后向下传输。
IP数据报格式
IP数据报是Internet Protocol (IP)协议中数据传输的基本单元,它包括两个主要部分:首部(Header)和数据部分(Data)。
IP数据报首部格式
- 固定部分(20字节)(80位):
- 版本(Version):占4位,表示IP协议的版本,常见的有IPv4(值为4)和IPv6(值为6)。
- 首部长度(Internet Header Length, IHL):占4位,表示首部的长度,单位为32位字(4字节),因此最小值为5(即20字节的首部)。
- 服务类型(Type of Service, ToS):占8位,用于指定数据报的优先级和服务类型。
- 总长度(Total Length):占16位,表示整个IP数据报的长度,包括首部和数据部分,单位为字节。
- 标识符(Identification):占16位,用于标识每一个IP数据报,当数据报需要分片时,所有分片具有相同的标识符。
- 标志(Flags):占3位,与分片有关,用于控制和标识数据报是否可以分片及是否为最后一个分片。
- 片偏移(Fragment Offset):占13位,用于指示分片在原始数据报中的相对位置。
- 生存时间(Time to Live, TTL):占8位,定义数据报在网络中的最大存活时间,每经过一个路由器TTL减1,为0时数据报被丢弃。
- 协议(Protocol):占8位,指出数据部分使用的上层协议,例如TCP(6)、UDP(17)。
- 头部校验和(Header Checksum):占16位,用于校验首部是否有错误。
- 源IP地址(Source Address):占32位(IPv4)或128位(IPv6),标识发送方的IP地址。
- 目的IP地址(Destination Address):占32位(IPv4)或128位(IPv6),标识接收方的IP地址。
- 可变部分:
- 选项(Options):可选字段,允许IP数据报携带额外信息,如记录路由、时间戳等。这部分的长度可变,因此首部总长度会超过20字节。
- 填充(Padding):为了保持首部为32位字节对齐,可能需要填充一些额外的0比特。
数据部分
- 这是实际传输的数据,可以承载如TCP段或UDP数据报等上层协议的数据。其长度是可变的,取决于实际传输的需求,但总长度(首部加数据)不能超过最大传输单元(Maximum Transmission Unit, MTU)限制,否则需要进行分片处理。
综上所述,IP数据报的格式设计旨在提供一种灵活且通用的封装机制,以支持不同类型的上层协议数据通过互联网进行传输。
IP数据报分片
IP数据报分片是网络层的一个重要机制,当一个IP数据报的大小超过了其即将穿越的网络路径中某段链路的最大传输单元(MTU)时,就需要进行分片。这个过程主要涉及以下几个方面:
- 目的: 分片的目的是确保大型的数据报能够适应各种网络链路的MTU限制,从而能够通过网络中的不同设备和链路进行传输。
- 过程: 分片通常发生在数据报的源节点或途经的任何需要分片的路由器上。源节点可以通过路径MTU发现(Path MTU Discovery)机制预先获知路径上的最小MTU以避免分片,但如果没有这样做或者路径MTU在传输过程中发生变化,路由器可能需要进行分片。
- 分片信息: 分片后的每个数据报片段都包含一个IP首部,其中的标识符(Identification)、标志(Flags)和片偏移(Fragment Offset)字段对于分片和重组至关重要。
- 标识符:确保同一原始数据报的所有分片可以被识别并重新组合。
- 标志:包括一个是否还可以继续分片的标志位(DF,Don’t Fragment)和一个更多分片(MF,More Fragments)的标志位,后者用来表明是否还有其他分片跟随当前分片。
- 片偏移:指示该分片在原始数据报中的相对位置,单位为8字节。
- 重组: 分片的重组通常在数据报的目的地,即接收方的IP层完成。接收方根据标识符将属于同一数据报的分片收集起来,并根据片偏移重新排序,最终合并成原始的数据报。如果任何一片丢失,整个数据报将无法重组,这可能导致高层协议(如TCP)超时重传或ICMP错误消息通知发送方。
- 透明性: 对于传输层协议(如TCP和UDP)来说,分片和重组过程是透明的,它们看到的是完整的数据报。
- 潜在问题: 分片和重组增加了网络复杂性和延迟,且可能导致一些安全问题,如IP分片攻击。现代网络设计倾向于避免分片,例如通过使用路径MTU发现和设置DF标志来请求中间路由器不要分片,而是让源节点处理分片或使用更小的MTU值来传输数据。
举个例子:
很明显,数据部分的长度超过了最大限制,如果准许分片的话,我们就要对它进行分片,除开头部的20字节,我们分隔,以1400为单位进行划分,然后加上原来的20字节的头部:
然后我们就要计算,这些分片的相对位置,用起始位置/8:
这里注意区分一下和其他字段的区别:
相关文章:

计算机网络 —— 网络层(IP数据报)
计算机网络 —— 网络层(IP数据报) 网络层要满足的功能IP数据报IP数据报格式IP数据报首部格式数据部分 IP数据报分片 我们今天进入网络层的学习。 网络层要满足的功能 网络层作为OSI模型中的第三层,是计算机网络体系结构的关键组成部分&…...

Clo3D导出服装动画,使用Unity3D展示
1.前言 Clo3D是一款应用于时装行业的3D服装设计软件,其强大的布料模拟算法可在3D空间中实现设计、制版、试衣和走秀,大幅提升数字作品逼真度和制作效率。为了让服装动画效果展示在Unity3D上模拟效果,需要Clo3D模拟出逼着的衣服动画。总体流程为Clo3D - Mixamo -Blen…...
LSTM 词语模型上的动态量化
原文链接 (beta) Dynamic Quantization on an LSTM Word Language Model — PyTorch Tutorials 2.3.0cu121 documentation 引言 量化涉及将模型的权重和激活值从浮点数转换为整数,这样可以缩小模型大小,加快推理速度,但对准确性的影响很小…...

STM32 proteus + STM32Cubemx仿真教程(第一课LED教程)
文章目录 前言一、STM32点亮LED灯的原理1.1GPIO是什么1.2点亮LED灯的原理 二、STM32Cubemx创建工程三、proteus仿真电路图四、程序代码编写1.LED灯操作函数介绍HAL_GPIO_WritePin函数原型参数说明示例代码 HAL_GPIO_TogglePin函数原型参数说明示例代码 2.代码编写3.烧写程序 总…...
享元模式
前言 享元模式:运用共享技术有效地支持大量细粒度的对象。 在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态了。事实上,享元模式可以避免大…...

R语言数据分析16-针对芬兰污染指数的分析与考察
1. 研究背景及意义 近年来,随着我国科技和经济高速发展,人们生活质量也随之显著提高。但是, 环境污染问题也日趋严重,给人们的生活质量和社会生产的各个方面都造成了许多不 利的影响。空气污染作为环境污染主要方面,更…...
Search用法Python:深入探索搜索功能的应用与技巧
Search用法Python:深入探索搜索功能的应用与技巧 在Python编程中,搜索功能是一项至关重要的技能,它能够帮助我们快速定位并处理数据。然而,对于初学者来说,如何高效地使用搜索功能可能会带来一些困惑。本文将从四个方…...

STM32的FreeRtos的学习
首先就是去官网下载一个源文件:FreeRtos官网 下载下来的是一个zip文件,解压缩了。 然后再工程文件夹中创建个文件夹: 在这个文件夹中创建3个文件夹: 然后开始把下载下来的文件夹中的文件挑选出来放到我们的工程文件夹中࿱…...

从零入手人工智能(2)——搭建开发环境
1.前言 作为一名单片机工程师,想要转型到人工智能开发领域的道路确实充满了挑战与未知。记得当我刚开始这段旅程时,心中充满了迷茫和困惑。面对全新的领域,我既不清楚如何入手,也不知道能用人工智能干什么。正是这些迷茫和困惑&a…...

Web前端指南
前言 前端开发员主要负责网站的设计、外观和感觉。他们设计引人入胜的在线用户体验,激发用户兴趣,鼓励用户重复访问。他们与设计师密切合作,使网站美观、实用、快捷。 如果您喜欢创造性思维、打造更好的体验并对视觉设计感兴趣,这将是您的理想职业道路。 探讨前端、后端以…...

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor
AgentExecutor 顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…...
nodejs 第三方库 exiftool-vendored
exiftool-vendored 是一款可以帮助你快捷修改图片信息的第三方库。如果你想要批量修改图片信息的话,那么它是一个不错的选择。 1.导入第三方库 在控制台中执行下面代码即可。 npm install exiftool-vendored --save2.获取信息 这里给出例子。 const { exiftool …...

docker部署redis实践
1.拉取redis镜像 # 拉取镜像 sudo docker pull redis2.创建映射持久化目录 # 创建目录 sudo mkdir -p $PWD/redis/{conf,data}3. 运行redis 容器,查看当前redis 版本号 # 运行 sudo docker run --name redis -d -p 6379:6379 redis # 查看版本号 sudo docker ex…...
Web前端学习之路:深入探索学习时长与技能进阶的奥秘
Web前端学习之路:深入探索学习时长与技能进阶的奥秘 在数字化时代,Web前端技术成为了连接用户与互联网世界的桥梁。对于初学者来说,学习Web前端究竟需要多久,以及如何高效掌握相关技能,一直是困扰他们的难题。本文将从…...
如何不用命令创建用户
都有哪些操作: 1、在/etc/passwd添加一行 2、在/etc/shadow添加一行 3、在/etc/group添加一行 4、创建用户家目录 5、创建用户邮件文件 例如: 创建用户jerry 要求: uid:777 主组:hadoop(800)…...
基于Python实现可视化分析中国500强排行榜数据的设计与实现
基于Python实现可视化分析中国500强排行榜数据的设计与实现 “Design and Implementation of Visual Analysis for China’s Top 500 Companies Ranking Data using Python” 完整下载链接:基于Python实现可视化分析中国500强排行榜数据的设计与实现 文章目录 基于Python实现…...

VUE3 学习笔记(13):VUE3 下的Element-Plus基本使用
UI是页面的门面,一个好的UI自然令人赏心悦目;国人团队开发的ElementUI在众多UI中较为常见,因此通过介绍它的使用让大家更好的了解第三方UI的使用。 安装 Npm install element-plus --save 或 Cnpm install element-plus --save 配置 全局配置…...
MySql数据库安全加固
设置密码复杂度策略 查看密码策略 SHOW VARIABLES LIKE validate_password%; 设置密码策略 INSTALL PLUGIN validate_password SONAME validate_password.so; 设置登陆失败策略 安装插件(谨慎操作,可能会导致数据库卡死) install plug…...

Nginx(title小图标)修改方法
本章主要讲述Nginx如何上传网站图标。 操作系统: CentOS Stream 9 首先我们bing搜索ico网站图标在线设计,找到喜欢的设计分格并下载。 是一个压缩包 然后我们上传到nginx解压 [rootlocalhost html]# rz[rootlocalhost html]# unzip favicon_logosc.z…...

iOS 17.5中的一个漏洞
i0S 17.5中的一个漏洞 iOS 17.5中的一个漏洞会使已刚除的照片重新出现,并目此问题似乎会影响甚至已擦除并出售给他人的 iPhone 和 iPad. 在2023年9月,一位Reddit用户根据Apple的指南擦除了他的iPad,并将其卖给了一位朋友。然而,这…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...