【计算机网络】IP协议第一讲(协议格式介绍)

0

IP协议

  • 1.协议头格式
    • 1.1 概念介绍
    • 1.2补充说明
      • 1.2.1 8位生存时间---TTL
      • 1.2.2 16位首部检验和

首先明确一个概念:TCP/IP协议是配合使用的,TCP负责可靠传输策略,IP则是负责传输,TCP协议是位于传输层提供的是策略解决可靠性问题,IP 协议在网络层,提供的是网络传输服务,实现A主机到B主机的跨网络通信服务,并不管可不可靠,TCP+IP公共配合:可靠地将A主机数据传给B主机。

1.协议头格式

0001

1.1 概念介绍

  • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
  • 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
  • 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0).
  • 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
  • 16位总长度(total length): IP数据报整体占多少个字节.
  • 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
  • 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.
  • 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
  • 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
  • 8位协议: 表示上层协议的类型
  • 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  • 32位源地址和32位目标地址: 表示发送端和接收端.

1.2补充说明

16位标识+3位标记+13位片偏移:
相关博客1: 点击跳转
相关博客2: 点击跳转

1.2.1 8位生存时间—TTL

TTL(Time To Live)是IPv4和IPv6网络通信中的一个重要字段,用于控制数据包在网络中的生存时间。TTL的作用是防止数据包在网络中无限制地循环传输,从而防止网络中的数据包永远无法被丢弃,占用网络资源。

TTL的工作原理如下:

发送方创建一个数据包,并在数据包的IP头部中设置TTL的初始值。
数据包被发送到目标设备。
每当数据包经过一个路由器或网络设备时,TTL的值就会减少1。
当TTL的值达到零时,路由器或网络设备会丢弃数据包,并向发送方发送一个ICMP时间超过(Time Exceeded)消息,告知发送方数据包已经超过了生存时间限制。
通过TTL,网络可以防止数据包在网络中永无止境地传递,从而避免网络拥塞和资源浪费。TTL的典型单位是跳数(hops),每经过一个路由器或网络设备,TTL的值减少1,直到达到零。

以下是一个TTL的简单示例:

假设有一台计算机A发送一个数据包到计算机B,数据包经过3个路由器,然后到达计算机B。

计算机A将TTL设置为8,并发送数据包。
数据包到达第一个路由器,TTL减少为7。
数据包到达第二个路由器,TTL减少为6。
数据包到达第三个路由器,TTL减少为5。
数据包到达计算机B。
如果TTL的初始值太小,数据包可能在达到目的地之前被丢弃。因此,设置TTL的初始值是一个重要的网络配置参数,通常需要根据网络的复杂性和跳数来调整。

1.2.2 16位首部检验和

16位首部校验和(Header Checksum)是在IPv4协议中用于检测IP首部完整性的一种机制。IPv4首部校验和涉及到首部字段的校验,而不包括数据部分(通常是传输层报文的部分)。它用于确保在IP数据包传输过程中首部信息没有被损坏或篡改。

IPv4首部校验和的计算过程如下:

将IPv4首部的各个字段划分为多个16位字(两个字节)。
对这些16位字进行二进制求和。
将上述二进制求和的结果进行溢出回卷操作,即将高16位与低16位相加。
将结果取反得到校验和值,然后将其填充到IPv4首部的校验和字段中。
当数据包在传输过程中经过路由器或网络设备时,这个校验和字段会被用来检验首部是否受损。如果首部在传输过程中发生了任何变化,校验和将无法正确匹配,这时数据包会被丢弃。

注意以下几点:

IPv4首部校验和仅检查IPv4首部字段的完整性,不涉及数据部分(负载)。
IPv4首部校验和是端到端的校验,只有源和目标主机才会执行校验和的计算和验证。
IPv4首部校验和是可选的,IPv6协议已经废弃了这个字段。
国际互联网
总之,IPv4首部校验和是一项用于保证IP首部完整性的重要机制,有助于检测传输过程中可能发生的首部损坏或篡改。

相关博客推荐:网络层协议 ——— IP协议

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

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

相关文章

pytest一些常见的插件

Pytest拥有丰富的插件架构,超过800个以上的外部插件和活跃的社区,在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址:http://plugincompat.herokuapp.com/ 1、pytest-html&#xff1…

【操作系统】聊聊什么是CPU上下文切换

对于linux来说,本身就是一个多任务运行的操作系统,运行远大于CPU核心数的程序,从用户视角来看是并发执行,而在CPU视角看其实是将不同的CPU时间片进行分割,每个程序执行一下,就切换到别的程序执行。那么这个…

EasyExcel看完肯定行

EasyExcel看完肯定行 1.随便创建一个Excel表格 2.引入依赖 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><!-- 方便操作…

【Redis】Redis 的学习教程(十一)之使用 Redis 实现分布式锁

1. 分布式锁概念 在多线程环境下&#xff0c;为了保证数据的线程安全&#xff0c;锁保证同一时刻&#xff0c;只有一个可以访问和更新共享数据。在单机系统我们可以使用 synchronized 锁、Lock 锁保证线程安全。 synchronized 锁是 Java 提供的一种内置锁&#xff0c;在单个 …

jenkins自动化脚本集成时钉钉消息未发送

在进行jenkins自动化脚本集成时&#xff0c;需要配置钉钉发送消息。钉钉的配置正确&#xff0c;测试钉钉消息发送成功&#xff0c;但是当构建项目时&#xff0c;却没有收到钉钉消息&#xff0c;报错如下&#xff1a; [钉钉插件]发送消息时报错: java.lang.NullPointerExceptio…

大转盘抽奖活动制作流程,让你轻松打造火爆营销活动

抽奖活动一直是商家吸引顾客、推广产品的利器之一。而如何让抽奖活动更加顺利、高效地进行呢&#xff1f;今天我们就要介绍的就是乔拓云平台&#xff0c;通过它&#xff0c;商家可以轻松地制作、发布抽奖活动&#xff0c;让您的营销更加便捷、迅速&#xff01;以下是具体操作步…

【智能电表数据接入物联网平台实践】

智能电表数据接入物联网平台实践 设备接线准备设备调试代码实现Modbus TCP Client 读取电表数据读取寄存器数据转成32bit Float格式然后使用modbusTCP Client 读取数据 使用mqtt协议接入物联网平台最终代码实现 设备接线准备 设备调试 代码实现 Modbus TCP Client 读取电表数…

音乐随行,公网畅享,群辉Audiostation给你带来听歌新体验!

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是本教程使用环境&#xff1a;1 群晖系统安装audiostation套件2 下载移动端app3 内网穿透&#xff0c;映射至公网 很多老铁想在上班路上听点喜欢的歌或者相声解解闷儿&#xff0c;于是打开手…

Go 多版本管理工具

Go 多版本管理工具 文章目录 Go 多版本管理工具一、go get 命令1.1 使用方法&#xff1a; 二、Goenv三、GVM (Go Version Manager)四、voidint/g4.1 安装4.2 冲突4.3 使用 在平时开发中&#xff0c;本地新旧项目并行开发的过程中&#xff0c;你大概率会遇到一个令人头疼的问题&…

开发者福利!李彦宏将在百度世界大会手把手教你做AI原生应用

目录 一、写在前面 二、大模型社区 2.1 加入频道 2.2 创建应用 一、写在前面 1. “把最先进的技术用到极致&#xff0c;把最先进的应用做到极致。” 2. “每个产品都在热火朝天地重构&#xff0c;不断加深对AI原生应用的理解。” 3. “这就是真正的AI原生应用&#xff0c;这…

9月21日作业

登录代码&#xff1a; widget.h #ifndef REGISTER_H #define REGISTER_H#include <QWidget> #include <QDebug> #include <QSqlDatabase> #include <QSqlQuery> #include <QMessageBox>namespace Ui { class Register; }class Register : publ…

Linux开发工具之编辑器-vim

vim简单来说就是一款文本编辑器&#xff0c;用于写代码&#xff0c;更是一款多模式编辑器 vim的基本概念 vim有许多种模式&#xff0c;但是铁三角是以下三种模式&#xff1a;命令模式&#xff0c;插入模式&#xff0c;底行模式 1 正常/普通/命令模式&#xff08;默认打开&…

Docker容器启动失败:找不到映像

Docker容器启动失败&#xff1a;找不到映像 Docker容器启动失败&#xff1a;找不到映像摘要 &#x1f615;引言 &#x1f62e;正文 &#x1f913;为什么会找不到映像&#xff1f; &#x1f615;1. 映像不存在2. 映像标签错误3. 映像不兼容 如何预防和解决问题&#xff1f; &…

权限提升WIN篇(腾讯云,CS,MSF)

溢出漏洞 信息收集 操作系统版本ver&#xff0c;systeminfo漏洞补丁信息systeminfo操作系统位数systeminfo杀软防护tasklist /svc网络netstat -ano,ipconfig当前权限whoami 筛选EXP 根据前面的信息收集中的系统版本&#xff0c;位数和补丁情况筛选出合适的EXP 提权 根据EX…

喜报 | 亮相2023数博会,摘得首届数智金融创新大赛优秀奖

河北正定&#xff0c;千年古城&#xff0c;这里不仅有一幕幕刀光剑影&#xff0c;鼓角争鸣的故事&#xff0c;还有驰名中外的人“一寺四塔”&#xff0c;有宜人的气候&#xff0c;也有汇聚高科技的天下英雄会。 图源于网络 2023年9月6日&#xff0c;河北正定&#xff0c;中国国…

JavaWeb开发-07-MySQL(二)

一.数据库操作-DQL -- 准备测试数据 INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate, create_time, update_time) VALUES (1, jinyong, 123456, 金庸, 1, 1.jpg, 4, 2000-01-01, 2022-10-27 16:35:33, 2022-10-27 16:35:35), (2, zhangwuji…

搭建GraphQL服务

js版 GraphQL在 NodeJS 服务端中使用最多 安装graphql-yoga: npm install graphql-yoga 新建index.js: const {GraphQLServer} require("graphql-yoga")const server new GraphQLServer({ typeDefs: type Query { hello(name:String):String! …

Linux CentOS7 tree命令

tree就是树&#xff0c;是文件或文件名输出到控制台的一种显示形式。 tree命令作用&#xff1a;以树状图列出目录的内容&#xff0c;包括文件、子目录及子目录中的文件和目录等。 我们使用ll命令显示只能显示一个层级的普通文件和目录的名称。而使用tree则可以树的形式将指定…

打架识别相关开源数据集资源汇总(附下载链接)

更多数据集分类资源汇总&#xff1a;https://www.cvmart.net/dataSets 监控摄像头下的打架检测 数据集下载链接&#xff1a;http://suo.nz/39IbxQ 该数据集是从包含打架实例的 Youtube 视频中收集的。此外&#xff0c;还包括一些来自常规监控摄像机视频的非打架序列。 总共有…

Linux -- 使用多张gpu卡进行深度学习任务(以tensorflow为例)

在linux系统上进行多gpu卡的深度学习任务 确保已安装最新的 TensorFlow GPU 版本。 import tensorflow as tf print("Num GPUs Available: ", len(tf.config.list_physical_devices(GPU)))1、确保你已经正确安装了tensorflow和相关的GPU驱动&#xff0c;这里可以通…