IP报文详解

news2024/12/23 9:03:37

IP的作用

上一篇文章提到TCP的可靠传输机制,那么TCP有把数据从主机A到主机B的能力吗?答案是没有。而IP有这个能力,IP能够将数据从主机A跨网络传输到主机B的能力。那么一定能传输成功吗?答案肯定是否定的,会因为各种原因导致传输失败。而这就又要依赖到TCP的可靠性,一旦发生丢包变会进行重传(网络正常的情况)。 所以,IP有把把数据从主机A到主机B的能力,而TCP则是保证IP一定能传输成功。

打个比方,张三是校长的儿子,校长说张三每次考试都必须考100分。而张三大部分考试也都是考100分,可是有一次却突然考了99。这时候校长就不乐意了,校长要求必须每次考100分,所以就让考试重考。如果还没拿到100分就继续重考!直到张三拿到100分为止! 这里面的校长冲当的就是TCP的角色,进行决策。而张三冲当IP的角色,进行行动。重考这个过程对应的是TCP的可靠机制。校长要确保张三每次都能考到100分,而TCP也要确保IP的数据一定能传输成功。 所以TCP和IP合起来,就能保证数据从一台主机到另一台主机!这也就是为什么叫做TCP/IP网络模型的原因。

而在传输数据的过程中,目标IP也非常重要,决定了我们的路径如何走。而IP也分为2部分,前面部分是网络号,后面部分是主机号。

**IP = 网络号 + 主机号 **

IP的报头

介绍了IP之后,我们再来看看IP的报头。

在这里插入图片描述

4位版本: IP协议版本,IPV4或者IPV6,两者不兼容。

4位首部长度: 和TCP报头的四位首部长度一致,4位首部长度 * 4 = 报头总大小。报头基础长度20字节,所以四位首部长度默认为5。

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

16位总长度: IP报文整体占多少字节。

第二行下面再说,关于IP的分片和组装。

8位生存时间: 报文跳转次数,达到一定次数后对报文直接丢弃。

8位协议: 报文需要向上交付,需要知道交付给哪一层协议,UDP还是TCP还是?

16位首部校验和: 检验报头字段是否正确。

32位源IP地址: 发送端的IP地址,该地址是会变化的。

32位目的IP地址: 接收端的IP地址,该地址一样会发生变化。

IP的分片与组装

根据数据链路层的MAC帧协议,自己的报头 + 有效载荷是不能超过1500字节的(MTU,可以随意修改)。

但是IP能决定单个报文的大小吗?答案是不能!因为单个报文的大小的是由TCP决定的!因为发送多少数据是由TCP决定的!一般来说,TCP报文是不会超过1500字节的。但是为了以防万一,IP层还是出了一个分片与组装的策略。用来解决万一TCP层发送的数据超了的问题。

如何分片 && 如何组装

分片分片,就是把报文分成多个去发送,要理解如何分片,我们可以从下面几个角度去理解。不过在此之前,我们需要先将IP报文中第二行未讲解的部分进行补充。

3位标志位,这个3位标志位中的第一个比特位是保留位。第二个比特位则是是否禁止分片,为1则是禁止分片,如果此时报文大小超过1500则直接丢弃报文。第三个比特位则是"更多分片"位,为1则说明后面还有分片,为0则说明后面没有分片了。

16位标识则是标识报文的唯一性。

13位片偏移则是当前报文的有效载荷在原报文的偏移量是多少。

1. 你怎么知道一个报文被分片了?

很简单,如果13位片偏移量 = 0 , 并且给更多分片标志位被置为0。则说明这是一个完整的报文,否则则是被分片过。

2. 如何识别同一个报文的所有分片?

16位标识是标识报文的唯一性,而报文被分片后,16位标识都是一样的。所以通过找到相同的16位标识的报文就相当于找到了该报文的分片。

3. 哪一个分片是第一个分片,哪一个分片是最后一个分片,有没有收全或者丢失?

当片偏移量为0的时候,那么可以说明这是第一个报文,如果此时的"更多分片"标志位为1,则说明后面还有分片,那么当前分片就是第一个分片。 最后一个分片报文因为后面没有分片了,所以它的"更多分片"标志位为0,并且片偏移量一定大于0。那么此时这个分片报文就是最后一个分片。

有没有收全或者丢失?

我们只需要把这些分片报文根据片偏移排序,然后根据当前报文的有效载荷 + 自己的片偏移量 = 下一个分片的片偏移。 来判断是否有分片丢失

在这里插入图片描述

4. 哪一个在前,哪一个在后,如何按正确顺序进行组装

我们的分片是在IP层进行的,那么对端收到分片后组装,也一定是在IP层进行的!这是网络分层的特点!谁分片谁就来组装。 在第3点我们提到过如何判断分片是否丢失,也对所有分片进行了排序。而接下来把所有分片的IP报头取出来接在前一个报文后面即可。因为已经排好序了,所以可以直接接在后面进行组装。

IP分片全过程

首先我们的IP原报文总共大小3000字节,有效载荷为2980字节。

在这里插入图片描述

随后进行第一次分片,我们只需要把前1500字节取出即可。并设置片偏移为0,更多分片标志位为1。

在这里插入图片描述

随后我们对1500字节加上20的IP报头,因为分片报文每次发送时也必须携带IP报头。加上报头后总大小1520字节,继续取1500字节。并设置片偏移为1500,更多分片标志位为1。

在这里插入图片描述

随后我们对剩余的20字节有效载荷继续加上一个IP报文,最后总大小40字节。因为后面没有分片了,所以该IP报文的更多分片标志位为0,片偏移为2980(上一个分片的有效载荷 + 上一个分片的片偏移)。

在这里插入图片描述

至此我们的IP分片就完成了。组装只需要把所有16位标识相同的报文进行升序排序,随后去掉IP报头拼接即可。如果中间有分片缺失则直接丢弃所有分片。

不建议使用分片

为什么不建议使用分片?有以下几点。

1. 提高了丢包率

假如我们1个报文的丢包率是99%, 那么我们分片成10份发送,那么我们的丢包率将近10%。丢失一个分片,就相当于整个报文丢失。

2. 效率问题

每次分片都要进行分片和组装的过程,尤其是组装的过程,还需要对分片报文进行排序。所以效率也会受到一定影响。

网段划分

IP地址分为两部分,网络号 + 主机号。

网络号: 保证相互连接的两个网段具有不同的标识。

主机号: 同一网段内的主机必须要有不同的主机号。

为什么要有子网划分?

举个例子:

你们学校有个校学生会的群,里面有计算机学院学生会主席,法学院学生会主席…等其他学院的学生会主席。这时候你捡到了一个钱包,钱包里面有1W大洋。但是只有失主的学号信息,这时候你捡到了这个钱包。你能否根据学号判断失主是否是你们计算机学院的?当然可以!但如果不是计算机学院的,你就不知道失主是哪个学院的了。所以这时候你把钱包交给了你们计算机学院的主席。这个计算机学院主席一看这个学号,这不是经管学院的人吗?于是在校学生会的群里艾特经管学院的学生会主席,说他们学院XXX学号的学生钱包掉了。让他赶紧联系一下失主。于是经管学院拿到学号一看,还真是经管学院的。然后再看后面的编号,这不是李四的学号吗?(实际上可能还要专业,班级…继续划分,这里简略一下。)于是就去联系李四。

所以,每一个学号其实就是一个IP地址!每个学生被归类到一个学院。这个学院就是网络号!

每一个学生隶属于一个学院,而每一台主机也一定隶属于一个子网!

为什么要隶属于每一个子网?

我们可以通过学号快速定位到一个学生,所以隶属到每一个子网,也是为了快速定位到这台主机!这样排除效率非常的高。

如何进行子网划分

我们都知道IP地址是一个32位比特位,我们可以用前8位来表示国家,次八位表示省份…。直到最后的主机号

在这里插入图片描述

当然,思想是这么个思想,但是方案绝对不是这种方案,因为这样划分IP地址是不够用的!

在这里插入图片描述

所以,我们使用的IP地址是被设计过的

上面说的只是一个理念版的网络划分,而具体的网络划分会在下面讲解。

DHCP技术(网段划分)

路由器至少要桥接两个子网,所以路由器是被桥接的所有子网所共享的。而因为路由器自己本身也是一台主机,所以路由器也要有自己的IP地址,一般路由器的IP通常是网络标识.1

在一个子网中,管理子网内IP的设备就是路由器!在我们的手机或者电脑没有联网时,其实是没有IP地址的。而当我们连上WIFI时,就自动有了IP地址。这个地址是由路由器动态分配的,这种技术就是DHCP。

特殊的IP地址

将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;

将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数 据包;

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

NAT技术(网段划分)

我们都知道IP地址其实是不够用的,因为IP地址是一个32位的无符号整数。也就是最多也只有42亿多。如果每台主机都要安排一个IP地址,那么IP地址是远远不够的。为了解决IP地址不够用的情况,就有了NAT技术的诞生。当然该技术也是治标不治本,真正治本的还得是普及IPV6协议。

而路由器不仅仅可以进行数据包转发,还可以自建局域网(动态分配的IP就是在该局域网内)。而局域网内的地址是不直接连接到公网的。理论上使用任意的IP地址都可以,但是RFC 1918规定了用于组件局域网的私有IP地址。

10.*,前8位是网络号,共16,777,216个地址 *

172.16.到172.31.,前12位是网络号,共1,048,576个地址

192.168.,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);

这也就是为什么我们经常查自己的IP时,都是这三个开头的原因了。因为我们的主机其实是处于在一个局域网中,此时我们的IP地址也被称为内网IP(私网IP)。在不同局域网内,内网IP是可以相同的。

在这里插入图片描述

一般来说,一个路由器都会配置2个IP地址,一个是WAN口IP(对外),一个是LAN口IP(对内,子网IP)。当我们要发送的数据报不在当前居于内时,会把数据报内的源IP地址替换成当前路由器的WAN口IP 。 然后交付给上一层路由器,因为你当前的路由器也可能是另一个路由器的子网。直到有一个路由器的WAN口IP为公网IP,此时这个路由器也被称之为公网入口。此时报文的源目的IP就是这个公网入口的WAN口IP,随后就是上面学生会的那一套逻辑,找到报文中目的IP所处的公网IP地址处。这就是我们的私网IP -> 目的IP的过程。那么目的的公网IP,怎么回到你这个私网IP呢?这个后面再说。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android TableLayout中TextView文本不居中问题

概述 | 平台 RK3288 Android 8.1 compileSdkVersion 26. | 问题 使用了TableLayout布局电话的拨号按键界面, 效果如下图 (正常): 在后续开发过程的某次修改后, 出现效果图(不正常): 合并两张效果图可看得更明显(红线参考位置): 在布局中 TextView 的 android:g…

计算机毕业设计选题推荐-豆瓣书籍可视化分析-Python爬虫-K-means算法

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

65 华为交换机CE6800基础配置

一 IPV6 使能配置思路 1 改华为交换机的名字 <huaweice65>sys Enter system view, return user view with return command. [~huaweice65]sysname HWCE6800 [*huaweice65]quit Warning: Uncommitted configurations found. Are you sure to commit them before exiting?…

数据的储存1(第30天)

补充&#xff1a;该代码在Debug下会死循环而在release版本下会正常运行&#xff0c;因为release会优化代码。 &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;深度剖析数据在内存中的存储&#xff01;&#xff01;&#xf…

如何为PDF文件设置打开密码以保护文档安全

为PDF文件设置打开密码是一种有效的保护措施&#xff0c;它能防止未经授权的用户访问文件内容。以下是一份专业指南&#xff0c;详细介绍如何为PDF文件设置打开密码。 打开pdf编辑器&#xff0c;我们点击工具栏中的【文件】功能&#xff0c;选择里面的【属性】 然后在属性设置…

代码生成:自动化开发

在现代集成开发环境中&#xff0c;智能代码补全和代码生成功能是两个至关重要的组成部分。 智能代码补全利用当前上下文和代码库信息&#xff0c;向程序员推荐合适的代码选项&#xff0c;而代码生成则根据指定输入创建遵循语法和语义规范的代码片段。 许多先进的IDE如Visual St…

家里猫毛到处飞怎么办?如何清理?用宠物空气净化器去除猫毛

我家三只布偶原住民&#xff0c;都是掉毛怪&#xff0c;刚好还是不同的颜色&#xff0c;黑的灰的白的...家里和画板似的&#xff0c;每天都被猫毛上色&#xff0c;清扫时超级崩溃。沙发上、床上、地板上这些常见的地方就不用说了&#xff0c;甚至水杯和碗筷边偶尔也能看见猫毛&…

CTFHub~JWT漏洞靶场最详细教程

什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed…

新手教学系列——Redis分布式锁进阶版:如何实现支持同一个Key多把锁,并带有超时重试功能

在现代分布式系统中,锁机制是解决并发访问资源问题的重要手段之一。Redis作为一个内存数据库,由于其高效的读写能力和天然的分布式特性,常常被用作实现分布式锁的基础工具。然而,如何合理地实现一个支持多把锁的Redis锁,并且在失败时支持超时重试,这是一个进阶的问题。 …

前端面试——this指向

最近看到了面试题目有关于this指向的问题&#xff0c;网上搜了一篇文章&#xff0c;看了之后受益匪浅&#xff0c;特地总结一下。 原文章链接&#xff1a;前端面试中的“this”&#xff0c;你真的了解吗&#xff1f; - 哔哩哔哩 什么是this&#xff1f; this是一个特殊的关键…

华为鲲鹏技术认证是什么?为什么要通过认证?

华为鲲鹏技术认证是什么&#xff1f; 华为鲲鹏技术认证是华为推出的一项生态合作伙伴计划&#xff0c;旨在积极推动从芯片到硬件系统&#xff0c;再到软件、服务的整个国产产业链的共建、共享、共赢。该认证要求测试产品自主可控&#xff0c;满足各地政府信息技术国产化替代工…

【五】阿伟开始学Kafka

阿伟开始学Kafka 概述 人生若只如初见&#xff0c;阿伟心里回想起了第一次和Kafka见面的场景&#xff0c;记忆虽然已经有些模糊&#xff0c;但是感觉初次见面是美好的。积累了一些实战经验之后&#xff0c;阿伟感觉不能再是面对百度开发了&#xff0c;于是决心系统的学习一下Ka…

数据库MySQL之事务、索引

目录 1.概述 2.事务 3.索引 3.1索引结构 3.2操作语法 1.概述 场景&#xff1a;假如我们需要解散教学部&#xff0c;那么该部门下的所有员工都需要删除。如果教学部成功删除了&#xff0c;但员工出于某些原因(比如SQL语句写错了等)并没有删除&#xff0c;此时就会出现数据…

Node 网络详解

Node 网络详解 1、 OSI & TCP/IP模型设计1.1 OSI七层模型应用层&#xff1a;&#xff08;Application Layer&#xff09;表示层&#xff1a;&#xff08;Presentation Layer&#xff09;会话层&#xff1a;&#xff08;Session Layer&#xff09;传输层&#xff1a;&#x…

Mycat分片-水平拆分

目录 场景 准备 配置 测试 续接上篇&#xff1a;Mycat分片-垂直拆分-CSDN博客 场景 在业务系统中, 有一张表(日志表), 业务系统每天都会产生大量的日志数据 , 单台服务器的数据存 储及处理能力是有限的, 可以对数据库表进行拆分。 准备 准备三台服务器&#xff0c;具体的结…

2024年Google开发者大会:AI赋能的Web、移动和云开发

一、大会概览 1.1 开幕与主题演讲 在北京国家会议中心举办的2024年Google开发者大会&#xff0c;是一场汇聚了全球顶尖开发者和技术爱好者的盛会。大会的开幕由Google大中华区总裁陈俊廷先生的主题演讲引领&#xff0c;他不仅回顾了中国开发者在全球技术舞台上的卓越表现&…

华硕飞行堡垒键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号&#xff1a; 型号 ASUS FX53VD&#xff08;华硕-飞行堡垒&#xff09; 板号&#xff1a;GL553VD 故障情况描述&#xff1a; 键盘无法使用&#xff0c;键盘除开机键外…

小型无人机训练与运用技术研究

1. 基础理论与概念 小型无人机&#xff08;Small Unmanned Aerial Vehicle, sUAV&#xff09;作为近年来快速发展的技术领域&#xff0c;其基础理论与概念是理解其全貌的基石。小型无人机通常指质量轻、尺寸小、易于携带和操作的无人飞行器&#xff0c;广泛应用于航拍、环境监…

基于yolov5 红绿灯交通检测,可对道路红绿灯进行检测可根据界面信息直接上传图片,视频等

模型训练&#xff1a;使用特定的数据集来训练YOLOv5模型以准确识别红绿灯。Web界面&#xff1a;构建一个用户友好的Web界面&#xff0c;让用户能够轻松上传图片或视频进行检测。性能优化&#xff1a;针对实时应用进行性能优化&#xff0c;确保检测速度足够快。部署&#xff1a;…

【高级IO-1】探索五种 I/O 模型及其高级I/O技术:基于 fcntl() 的代码应用

文章目录 1. 五种IO模型2. 高级IO的重要概念2.1 同步通信 与 异步通信2.2 阻塞与非阻塞2.3 如何理解四者间的关系&#xff1f; 3. 其他高级IO3.1 非阻塞 I/O3.2 纪录锁&#xff08;Record Lock&#xff09;3.3 系统 V 流机制3.4 I/O 多路复用&#xff08;I/O Multiplexing&…