计网Lesson10 - 网络层之IP协议分析
文章目录
- 网络层协议
- IPv4 数据报格式
- IPv4 数据报首部格式
- 版本(Version)
- 首部长度(Header Length)
- 区分服务(Differentiated Services Field)
- 可选字段
- 填充
- 总长度(Total Length)
- `标识、标志、片偏移`
- `标识(Identification)`
- `标志(Flags)`
- `片偏移(Fragment Offset)`
- 生存周期(Time To Live,TTL)
- 协议
网络层协议
IPv4 数据报格式
IPv4 数据报首部格式
版本(Version)
- 长度为 4 b i t 4bit 4bit,用于表示 IP 协议的版本。
0 b 0100 0b0100 0b0100: I P v 4 IPv4 IPv4 0 b 0110 0b0110 0b0110: I P v 6 IPv6 IPv6
首部长度(Header Length)
- 长度为 4 b i t 4bit 4bit,将长度乘以 4 4 4 才是最终长度,用来表示IPv4数据报的首部长度。
- 最小值取 0 b 0101 = 5 10 0b0101 = 5_{10} 0b0101=510,首部长度最少为 20 20 20 字节。
- 最大值取 0 b 1111 = 1 5 10 0b1111 = 15_{10} 0b1111=1510,首部长度最多为 60 60 60 字节。
区分服务(Differentiated Services Field)
- 长度为 8 b i t ( 1 B ) 8bit(1B) 8bit(1B)
- 用于提高网络服务质量。
可选字段
- 长度从 1 1 1 字节到 40 40 40 字节不等,用来支持排错、测量以及安全措施等功能。
- 虽然可选字段增加了 I P v 4 IPv4 IPv4 数据报的功能,但这同时也使得 I P v 4 IPv4 IPv4 数据报的首部长度成为可变的,这就增加了因特网中每⼀个路由器处理 I P v 4 IPv4 IPv4 数据报的开销。
填充
- 当首部长度不是 4 4 4 字节的整数倍时,我们用 0 0 0 填充。
总长度(Total Length)
- 长度为 16 b i t ( 2 B ) 16bit(2B) 16bit(2B)
- 首部 + 数据的总长度,跟首部长度不一样,不需要乘 4 4 4
- 最大值是 65535 ( 2 16 ) 65535(2^{16}) 65535(216),单位为字节。
标识、标志、片偏移
- 由于帧的数据不能超过1500字节,所以过大的IP数据包,需要分成片(fragments)传输给数据链路层。
- 每一片都有自己的网络层首部(IP首部)
标识(Identification)
- 占 16 b i t ( 2 B ) 16bit(2B) 16bit(2B)
- 分包时,网络层会对同一数据包的片打上同一标识。
- 有⼀个计数器专门管理数据包的ID,每发出⼀个数据包,ID就加1。
标志(Flags)
- 占 3 b i t 3bit 3bit
- 最高位为保留位,必须设置为 0 0 0
- 中间位(Don’t Fragment,DF)
- DF = 1 表示不许分片;
- DF = 0 表示可以分片。
- 最低位(More Fragment,MF)
- MF = 1 表示后面还有分片;
- MF = 0 表示后面没有分片。
片偏移(Fragment Offset)
- 占 13 b i t 13bit 13bit
- 片偏移乘以8:字节偏移。
- 每⼀片的长度⼀定是8的整数倍。
片偏移指的是每个数据应该从哪个位置开始写。
由于之前的标志
占了 3 b i t 3bit 3bit,所以 13 b i t 13bit 13bit 的偏移长度肯定不够表示 16 b i t 16bit 16bit 的总长度,那么就想到一个办法:右移 3 3 3 位。但是这样就得保证数据片长度得是 8 8 8 的倍数。
生存周期(Time To Live,TTL)
- 占 8 b i t 8bit 8bit
- 每个路由器在转发之前会将TTL减1,⼀旦发现TTL减为0,路由器会返回错误报告。
协议
- 占 8 b i t 8bit 8bit,用来指明IPv4数据报的数据载荷是何种协议数据单元PDU。也就是说这个数据包要交给谁。
- 首先,分解数据报: 1580 = 1560 + 20 1580 = 1560 + 20 1580=1560+20,说明数据部分时 1560 B 1560B 1560B
- 分第一片: 数据 + 20 < = 800 数据 + 20 <= 800 数据+20<=800,由于片偏移的存在,数据得是 8 8 8 的整数倍,所以数据长 776 B 776B 776B;剩下数据 784 B 784B 784B
- 分解第二片: 数据 + 20 < = 800 数据 + 20 <= 800 数据+20<=800,所以数据长度还是 776 B 776B 776B,剩下数据 8 B 8B 8B
- 那么第二片的总长度字段为 776 + 20 = 796 776 + 20 = 796 776+20=796,由于后面还有同一包的数据片,所以 MF = 1。
答案为 B B B
相关文章:

计网Lesson10 - 网络层之IP协议分析
文章目录 网络层协议IPv4 数据报格式IPv4 数据报首部格式版本(Version)首部长度(Header Length)区分服务(Differentiated Services Field)可选字段填充总长度(Total Length)标识、标…...

LangChain 25: SQL Agent通过自然语言查询数据库sqlite
LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…...

Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案
生产环境中热 key 处理 热 key 问题就是某一瞬间可能某条内容特别火爆,大量的请求去访问这个数据,那么这样的 key 就是热 key,往往这样的 key 也是存储在了一个 redis 节点中,对该节点压力很大 那么对于热 key 的处理就是通过热…...

可惜+悲伤+唉=emmo...
拟合曲线: 参考论文:黄河清.NURBS曲面逆向造型关键算法的研究与应用 [D].西北工业大学,2004 三次NURBS曲线控制点的计算 首先给出拟合曲线的具体步骤: 1、节点矢量的求解方法为: 采用积累弦长参数化法,即࿱…...

[gRPC实现go调用go]
1什么是RPC RPC:Remote Procedure Call,远程过程调用。简单来说就是两个进程之间的数据交互。正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的,也就是本地过程调用。和本地过程调用相对的就是:假如两个…...

uniapp使用v-html调用接口,富文本图片 视频自适应大小
前端获取到后台数据 不做处理 就会出现下面问题 图片 视频超出视图显示不全 处理 //info 是富文本 <view v-ifinfo v-htmlreplaceWhite(info)></view>调用下面方法 replaceWhite(html) { // 处理富文本默认图片,视频大小let newContent html.replace…...

安卓MediaRecorder(2)录制源码分析
文章目录 前言JAVA new MediaRecorder() 源码分析android_media_MediaRecorder.cpp native_init()MediaRecorder.java postEventFromNativeandroid_media_MediaRecorder.cpp native_setup() MediaRecorder 参数设置MediaRecorder.prepare 分析MediaRecorder.start 分析MediaRec…...
MySql数据库全量备份脚本
#!/bin/bash# 设置数据库连接信息 DB_HOST"localhost" DB_USER"root" DB_PASS"密码" DB_NAMES("db1" "db2" "db3" "db4")# 设置备份目录 BACKUP_DIR"/home/mysql/mysql-back/everyday" # 每天…...

windows10下jdk安装
文章目录 windows10下jdk安装说明what安装包下载执行安装包验证是否安装成功 windows10下jdk安装 说明 操作系统:windows10 版本:1.8 what JDK(Java Development Kit) 是 Java 语言的软件开发工具包 安装包下载 https://www.oracle.com/java/techn…...

Centos7防火墙及端口开启
1、防火墙 1.1、查看防火墙是否开启 systemctl status firewalld 1.2、开启防火墙 firewall-cmd --list-ports 1.3、重启防火墙 firewall-cmd --reload 2、端口 2.1、查看所有已开启的端口号 firewall-cmd --list-ports 2.2、手动开启端口 启动防火墙后,默认没有开…...
vue开发,axios网络请求框架基本用法和封装
axios安装 npm install axiosaxios基本用法 默认的get请求,参数用params追加,多个参数通过json对象的方式,例如params:‘{type:“home”,page:1}’ axios({url: https://api.videolog.net.cn/baidu/token,params: }).then(value > {co…...

对比SPI、UART、I2C通信的区别与应用
SPI、UART、I2C通信是常用的数字通信协议,它们在不同的场景下有不同的应用。下面,我将分别介绍它们的特点、区别与应用。 SPI通信 SPI通信是一种串行同步通信协议,它的全称为“Serial Peripheral Interface”。SPI通信是一种单主多从的通信方…...

CentOS7安装MySQL8.0
一、使用Yum安装 1. 使用wget下载MySQL的rpm包 wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm2. 安装下载好的rpm包 yum localinstall mysql80-community-release-el7-3.noarch.rpm 3. 安装mysql(该步可能出现问题) yum…...
【Go<—>Java】gRPC测试注意事项
在做go和Java之间gRPC调用之前需要完成以下两项工作: go语言版本的gRPC调用,实现server端和client端Java语言版本的gRPC调用,实现server端和client端 由于gRPC是跨语言的通信协议,所以我们可以相互调用,有以下2种调用…...
java面试题整合
1.Java数据类型 ✅ Java是一种静态类型语言,它具有丰富的数据类型用于声明变量和方法返回类型。Java中的数据类型分为两类:原始数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 原…...

2023年12月7日:QT实现登陆界面
#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口设置this->resize(600,500);//重新设置窗口大小this->setWindowTitle("QQ-盗版");//设置窗口名为QQ-盗版this->setWindowIcon(QIcon("D:\\Qt\\funny\\pi…...

常用的测试用例大全
登录、添加、删除、查询模块是我们经常遇到的,这些模块的测试点该如何考虑 1)登录 ① 用户名和密码都符合要求(格式上的要求) ② 用户名和密码都不符合要求(格式上的要求) ③ 用户名符合要求,密码不符合要求(格式上的要求) ④ 密码符合要求…...

《python每天一小段》--12 数据可视化《1》
欢迎阅读《Python每天一小段》系列!在本篇中,将使用Python Matplotlib实现数据可视化的简单图形。 文章目录 一、概念(1)安装matplotlib(2)数据可视化实现步骤 二、绘制简单的折线图(1ÿ…...

分类预测 | Matlab实现HPO-GRU【23年新算法】基于猎食者优化算法优化门控循环单元的数据分类预测
分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.HPO-GRU【23年新算法】基于猎食者优化算法优…...

【Pytorch】学习记录分享2——Tensor基础,数据类型,及其多种创建方式
pytorch 官方文档 Tensor基础,数据类型,及其多种创建方式 1. 创建 Creating Tensor: 标量、向量、矩阵、tensor2. 三种方法可以创建张量,一是通过列表(list),二是通过元组(tuple),三是通过Numpy的数组(arra…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...