IP协议详解

        IP协议处于五层模型(也可以说七层模型)中的网络层,网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。上一篇文章中我们讲到了TCP(传输层)会认为它负责将数据从一个设备传输到另一个设备,事实上它并不负责,TCP只是保障如何端到端的将报文完整的达到,而不负责怎么送达,IP协议的任务就是负责将报文如何通过一跳一跳的中间节点送达到目的地。

一:IP协议的特点

1,无连接性

        IP协议是一种无连接的协议,不需要像TCP一样在传输数据之前需要建立连接。这意味着每个IP数据包都是独立的,IP数据包可以按照任意顺序发送,并可以根据中间路由节点选择不同的路径进行传输

2,不可靠性

        IP协议是一种不可靠的协议,它给自己的定位就是尽力将报文送到下一跳,但它不能提供数据包的可靠传输,没有TCP的各种可靠传输的手段(如超时重传),虽然IP有检验数据包的能力,当数据包在传输过程中丢失、损坏或重复时,IP协议没有机制来修复或重新传输这些数据包。但是分层不同能力各有特点,TCP可以保障数据能正确到达,IP的这种设计可以提高网络的灵活性和效率,而不用追求大而全的功能。

3,分组和交换

        IP协议使用分组交换方式传输数据。数据被分为合适的数据包,每个数据包都带有源地址和目标地址。数据包可以通过不同的路径进行传输,从而提高网络的可靠性和可扩展性。

4,网络独立性

        IP协议可以在不同类型的网络上运行,包括以太网、无线网络等。这意味着IP协议可以跨越不同的网络进行通信,来连接不同类型的网络设备,使其互通互联。

5,简单性

        IP协议被设计为简单的协议。它的功能有限,聚焦于数据包的路由功能。

二:IP首部格式

IP首部的格式对于IPV4和IPV6大体是一样的,但是也有细微的区别。

IPv4和IPv6报文格式比较

本次只详细讲解IPv4的首部格式

IPv4报文首部格式
IPv4首部报文格式

下面对IPv4的首部各个字段进行详细解释:

1,版本(Version)

占用 4 bit,标识目前采用的IP协议的版本号,一般取值为 0100(IPv4)和 0110(IPv6)。

2,首部长度(Header Length)

占用 4 bit,即 IP 报头长度,这个字段的作用是为了描述 IP 报头的长度。由于在 IP 报头中有变长的可选部分,为了能多表示一些长度,因此采用 4 字节(32 bit)为本字段数值的单位,比如,4 bit 最大能表示为 1111,即 15,单位是 4 字节,因此最多能表示的长度为 15×4=60 字节。

3,服务类型(Type of Service,TOS)

占用 8 bit,可用 PPP、D、T、R、C、0 这 8 个字符来表示,其中,PPP定义了数据报的优先级,取值越大表示数据越重要,取值如下表所示。

ppp 取值含 义
000普通(Routine)
001优先(Priority)
010立即(Immediate)
011闪速(Flash)
100疾速(Flash Override)
101关键(Critic)
110网间控制(Internetwork Control)
111网络控制(Network Control)
  • D:时延,0 表示普通,1表示延迟尽量小;
  • T:吞吐量,0 表示普通,1表示流量尽量大;
  • R:可靠性,0 表示普通,1表示可靠性尽量大;
  • C:传输成本,0 表示普通,1表示成本尽量小;
  • 0:这是最后一位,被保留,恒定为 0;

4,总长度

占用 16 bit,该字段表示以字节为单位的 IP 数据报的总长度(包括 IP 报头部分和 IP 数据部分)。如果该字段全为 1,就是最大长度了,即 216-1= 65535字节≈63.9990234375KB,有些教程上写最大是 64KB,其实是达不到的,最大长度只能是 65535 字节,而不是 65536 字节。

5,标识

占用 16 bit。在协议栈中保持着一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。
注意这个“标识符”并不是序号,IP 是无连接服务,数据报不存在按序接收的问题。当 IP 数据报由于长度超过网络的 MTU(Maximum Transmission Unit,最大传输单元)而必须分片(把一个大的网络数据报拆分成一个个小的数据报)时,这个标识字段的值就被复制到所有的小分片的标识字段中。相同的标识字段的值使得分片后的各数据报片最后能正确地重装成为原来的大数据报。该字段占用 16 bit。

6,标志(Flags)

占用 3 bit,该字段最高位不使用,第二位称 DF(Don't Fragment)位,DF 位设为 1 时表明路由器不对该上层数据报分片。如果一个上层数据报无法在不分段的情况下进行转发,则路由器会丢弃该上层数据报并返回一个错误信息。最低位称 MF(More Fragments)位,为 1 时说明这个 IP 数据报是分片的,并且后续还有数据报;为 0 时说明这个 IP 数据报是分片的,但已经是最后一个分片了。

7,片偏移

占用13 bit,该字段的含义是某个分片在原 IP 数据报中的相对位置。第一个分片的偏移量为 0。片偏移以 8 个字节为偏移单位。这样,每个分片的长度一定是 8 字节(64 位)的整数倍。

8,生存时间(TTL,Time to Live,也称存活时间)

占用8 bit。表示数据报到达目标地址之前的路由跳数。TTL 是由发送端主机设置的一个计数器,每经过一个路由节点就减 1,减到为 0 时,路由就丢弃该数据报,向源端发送 ICMP 差错报文。这个字段的主要作用是防止数据报不断在 IP 互联网络上循环转发

9,协议

占用8 bit。该字段用来标识数据部分所使用的协议,比如取值1表示 ICMP、取值 2 表示 IGMP、取值 6 表示 TCP、取值 17 表示 UDP、取值 88 表示 IGRP、取值 89 表示 OSPF。

10,首部校验和(Header Checksum)

占用16 bit。该字段用于对 IP 头部的正确性检测,但不包含数据部分。由于每个路由器会改变 TTL 的值,所以路由器会为每个通过的数据报重新计算首部校验和。

11,源IP地址和目的IP地址

两个字段分别都占用 32 bit。用于标识这个 IP 数据报的起源和目标 IP 地址。值得注意的是,除非使用 NAT(网络地址转换),否则整个传输的过程中,这两个地址不会改变。

12,选项(可选)

这是一个可变长的字段。该字段属于可选项,主要是给一些特殊的情况使用,最大长度是 40 字节。

13,填充(Padding)

由于 IP 报头长度这个字段的单位为 32 bit,所以 IP 报头的长度必须为 32bit 的整数倍。因此,在可选项后面,IP 协议会填充若干个 0,以达到 32bit 的整数倍。

三:IP分片

        IP 协议在传输数据报时,将数据报分为若干分片(小数据报)后进行传输,并在目的系统中进行重组,这一过程称为分片(Fragmentation)。
        要理解 IP 分片,首先要理解 MTU,物理网络一次传送的数据是有最大长度的,因此网络层的下层(数据链路层)的传输单元(数据帧)也有一个最大长度,这个最大长度值就是 MTU,每一种物理网络都会规定链路层数据帧的最大长度,比如以太网的 MTU 为 1500 字节。
        IP 协议在传输数据报时,若IP数据报加上数据帧头部后长度大于 MTU,则将数据报切分成若干分片后再进行传输,并在目标系统中进行重组。IP 分片既可能在源端主机进行,也可能发生在中间的路由器处,因为不同网络的 MTU 是不一样的,而传输的整个过程可能会经过不同的物理网络。如果传输路径上的某个网络的 MTU 比源端网络的 MTU 要小,路由器就可能对 IP 数据报再次进行分片。分片数据的重组只会发生在目的端的 IP 层。

        IP首部内有三个字段用于实现分片和重组:

  • 标识字段
  • 标志字段
  • 偏移字段

1,标识

  • 对于发送的每份IP数据报,标识字段都包含一个唯一的值。该值在数据报分片时被复制到每个片中;
  • 标志字段用其中1 bit表示“更多的片”;
  • 除最后一片外,其他每一个组成数据报的片都要把该比特置1;

2,标志

标志字段由三个1bit标志组成:

  • 比特0是保留的,必须为0;
  • 比特1是“不分片”(DF)标志;
  • 比特2是“更多分片”(MF)标志;

 

即:
DF=0表示可以分片,DF=1表示不可以分片;
MF=0表示后面没有分片,MF=1表示后面有分片;

3,偏移

  • 该片偏移原始数据报开始处的位置;
  • 当数据报被分片后,每个片的总长度值要改为该片的长度值;
  • 片偏移字段以8字节为单位

 

举例:

一个长4000B的IP数据报4000字节为例,看如何分片:

分片一:标识:666,MF=1,DF=0, 片偏移=0,有效数据:1480(编号0~1479)

分片二:标识:666,MF=1, DF=0, 片偏移=185,185=1480/8,有效数据:1480(编号1480~2959)

分片三:标识:666,MF=0, DF=0, 片偏移=370, 370=2960/8,有效数据:1020(编号2960~3979)
 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 将list集合的字符串格式转为Map

Java 将list集合的字符串格式转为Map List<Object> list new ArrayList<>(); Map<String,String> map1 new HashMap<>(); map1.put("fileName","测试1"); map1.put("level","1"); list.add(map1);Map<S…

【C语言】文件操作详解

&#x1f388;个人主页&#xff1a;.满船清梦压星河_-CSDN博客 &#x1f302;c领域新星创作者 &#x1f389;欢迎&#x1f44d;点赞✍评论❤️收藏 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0…

docker的安装部署nginx和mysql

小白自己整理&#xff0c;如有错误请指示&#xff01; 自我理解&#xff1a;docker就是把应用程序所用的依赖程序&#xff0c;函数库等相关文件打包成镜像文件&#xff0c;类似系统光盘&#xff0c;然后可以在任意电脑上安装使用&#xff08;方便运维人员部署程序&#xff09;…

代码审计-锐捷EG易网关 管理员账号密码泄露漏洞

出现漏洞的文件在 /login.php 审查源码我们发现通过命令拼接的方式构造命令执行 发送请求包&#xff0c;拼接 CLI指令 show webmaster user /login.php usernameadmin&passwordadmin?showwebmasteruser漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望…

CS224W3.2——随机游走(Random Walk)

上一文中说道定义节点相似度函数的时候使用Random Walk方法&#xff1a; CS224W3.1——节点Embedding 这节课来说一下Random Walk方法。在这篇中&#xff0c;我们来看一个更有效的相似函数——在图上随机游走的节点共现的概率。我们介绍随机游走背后的直觉&#xff0c;我们将…

【C++】类与对象 第二篇(构造函数,析构函数,拷贝构造,赋值重载)

目录 类的6个默认成员函数 初始化和清理 1.构造函数 2.析构函数 3.共同点 拷贝复制 1.拷贝构造 使用细节 2.赋值重载 运算符重载 < < > > ! 连续赋值 C入门 第一篇(C关键字&#xff0c; 命名空间&#xff0c;C输入&输出)-CSDN博客 C入门 第二篇( 引…

tomcat9~10猫闪退个人经验

java版本17与8 8版本有jre&#xff0c;java17没有jre 所以在java8版本中将jre和jdk路径一同添加环境是不会出现闪退的&#xff0c;tomcat9没有闪退 但是在10就闪退了&#xff0c;因为java版本太低 java17没有jre&#xff0c;但是可以通过一种方法添加jre到java17的目录 完…

数学与经济管理

数学与经济管理&#xff08;2-4分&#xff09; 章节概述 最小生成树问题 答案&#xff1a;23 讲解地址&#xff1a;74-最小生成树问题_哔哩哔哩_bilibili 最短路径问题 答案&#xff1a;81 讲解地址&#xff1a;75-最短路径问题_哔哩哔哩_bilibili 网络与最大流量问题 真题 讲解…

基于引力搜索算法的无人机航迹规划-附代码

基于引力搜索算法的无人机航迹规划 文章目录 基于引力搜索算法的无人机航迹规划1.引力搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用引力搜索算法来优化无人机航迹规划。 …

前端伪进度条实现(仿antd message使用react组件静态方法)

文章目录 背景实现方法(一) react组件静态方法(二) 通过静态方法改变组件的状态(三) 指定进度条的步幅规则(四) 成功和失败的状态改变1. 成功2. 失败 (五) 组件消失(六) 背景遮罩 最终实现及代码组件代码模拟调用进度条组件的代码 可能遇到的问题静态方法调不到/报错组件渲染两…

帆软report JS实现填报控件只能填写一次

效果 方法&#xff1a; 代码&#xff1a; if(this.getValue()!"")//判断这个控件框是否有值&#xff0c;这里是不为空{this.setEnable(false)}//不为空&#xff0c;则不能再修改else{this.setEnable(true)}//为空&#xff0c;可以编辑

Perl爬虫程序

以下是一个使用Perl爬虫程序&#xff0c;用于爬取图像。每行代码的中文解释如下&#xff1a; #!/usr/bin/perl ​ use strict; use warnings; use Mojo::UserAgent; use JSON; ​ # 创建一个Mojo::UserAgent实例 my $ua Mojo::UserAgent->new; ​ # 使用获取代理 my $prox…

计算机网络重点概念整理-第三章 数据链路层【期末复习|考研复习】

第三章 数据链路层 【期末复习|考研复习】 计算机网络系列文章传送门&#xff1a; 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 第三章 数据链路层 【期末复习…

两数和的目标 python (初学者vs程序员)

题目描述 1&#xff09;给定一个整数列表&#xff0c;在列表中&#xff0c;从前向后查找两个元素使其相加之和等于目标数&#xff0c;并返回两个整数在列表中的下标。如果没有符合条件的数字&#xff0c;输出False&#xff0c;本题假设题目的解唯一。‬‪‬‪‬‪‬‪‬‮‬‪…

AT32固件库外设使用,ArduinoAPI接口移植,模块化

目录 一、ArduinoAPI移植一、通用定时器使用1.计时1.2.ETR外部时钟计数4.ArduinoAPI - timer 三、ADC1.ADC初始化&#xff08;非DMA&#xff09;2.ADC_DMA 规则通道扫描 六、USB HID IAP1.准备好Bootloader和app2.配置好时钟&#xff0c;一定要打开USB3.将生成的时钟配置复制到…

《Attention Is All You Need》阅读笔记

论文标题 《Attention Is All You Need》 XXX Is All You Need 已经成一个梗了&#xff0c;现在出现了很多叫 XXX Is All You Need 的文章&#xff0c;简直标题党啊&#xff0c;也不写方法&#xff0c;也不写结果&#xff0c;有点理解老师扣论文题目了。 作者 这个作者栏太…

vue源码分析(五)——vue render 函数的使用

文章目录 前言一、render函数1、render函数是什么&#xff1f; 二、render 源码分析1.执行initRender方法2.vm._c 和 vm.$createElement 调用 createElement 方法详解&#xff08;1&#xff09;区别&#xff08;2&#xff09;代码 3、原型上的_render方法&#xff08;1&#xf…

视频特效制作软件 After Effects 2023 mac中文版介绍说明

After Effects 2023 mac是一款专业视频特效和动态图形设计软件。ae2023被广泛应用于电影、电视节目、广告和网络媒体等领域&#xff0c;可以创建各种令人惊叹的视觉效果。 在After Effects 2023中&#xff0c;用户可以使用强大的工具和功能来制作复杂的特效和动画。新版本引入了…

数据库简史:多主数据库架构的由来和华为参天引擎的机遇

注&#xff1a;本文发表后&#xff0c;收到了很多后台反馈&#xff0c;其中关于大型机的早期成就不容省略。微调重发本文&#xff0c;纯属个人观点&#xff0c;错谬之处&#xff0c;仍然期待指正。 2023年10月13日&#xff0c;在北京举办的“2023金融业数据库技术大会"上&…

GPT的广泛应用会对互联网公司造成挑战吗?——探讨GPT在实际使用中的应用和影响

文章目录 前言GPT 技术的背景和发展历程GPT 技术对互联网行业的影响GPT 技术在互联网行业中的应用GPT 技术对于用户隐私和数据安全的威胁GPT 技术对于人类工作岗位的影响加强 AI 伦理和监管加强 AI 安全性和隐私保护推动 AI 创新和发展&#xff0c;避免过度依赖 AIGPT 技术是一…