首页 > 其他分享 >网络层 :IP协议详解

网络层 :IP协议详解

时间:2023-06-08 17:46:23浏览次数:40  
标签:首部 IP 网络层 详解 偏移 分片 bit 数据包

       网络层的目的就是实现终端节点之间的通信,即点对点通信。具体功能包括路由选择与地址管理等。
       这一层主要有IP和ICMP两个协议组成,在这里就先重点讲解IP协议,后面会单独将IP协议相关的如ICMP,DNS,NAT,NAPT,DHCP等协议单独写一篇博客汇总。

       IP层协议是实现网络数据传输的重要协议之一,它承担着将数据从源主机发送到目标主机的任务。IP层协议的数据包包含多个字段,其中每个字段都承载着特定的信息。下面就是IP层协议字段的详细介绍。

一、网络层简述
一个IP数据包的首部至少是20个字节!

二、网络层首部–版本,首部长度,区分服务,总长度

版本:

就是指出IP数据包是什么版本;常见的版本就是0100 IPV4和 0110 IPV6;
首部长度:
整个IP数据包的首部长度,不包括数据部分;
但是首部长度只用4个bit存储,表示最大值也是1111,即15;
而我们实际上首部长度还需要乘于5才可以得到实际答案;
假如首部长度为0101,也就是4,那么实际的首部长度为4×5=20;
假如首部长度为1111,也就是15,那么实际的首部长度为15×4=60;
常见的首部长度一般都是20字节,因为IP数据包至少需要20字节

区分服务:
整个字段主要是用来提高网络服务质量的,至于细节我们不用深究!举个例子描述以下它是如何提高网络服务质量的,比如说我们有一个客户端要给服务器发数据包,这中间过程需要经过路由器,而路由器接收到这个IP数据包时候,会检查它的首部字段的区分服务是否有设置什么值,这些值是可以提高网络服务的,比如可能会优先传送该IP数据包,大概就是这样!!!

总长度:

总长度表示IP数据包整个大小;
总长度占两个字节,也就是说有16个bit可以表示总长度,也就是说总长度的范围是0-65535数据范围;
但是我们知道网络层的数据包需要传输给数据链路层的帧数据部分,而数据链路层帧的数据部分长度不可以超过1500;也就是IP假如是65535那么大的话,是无法传输给数据链路层的帧部分的,那么我们就需要对IP数据包进行分片,拆分成小于1500的数据包再传输给数据链路层;至于如何分片,分片后如何找到那些片段是同一个数据包,传输过去后,如何正确的拼回原来的数据包都是未解决的问题。接下来都会讲到这几个问题。

三、网络层首部–标识,标志,片偏移

 

标识:
就是标识该数据包是某一个大的IP包的分片包,标识一样的数据包都是属于同一数据包的分片中的某一片;
比如有一个IP包很大:3800字节,很明显,传输给数据链路层是无法接收的,那么就需要分片,假设分了3片,那么这三片数据包的标识都是一模一样的,因为这三片数据包都是同一个大的IP数据包分片出来的;
标识的字段也解决了一个问题,就是分片后的数据包,是如何找回来的拼接成为原来的大IP数据包的问题。

片偏移:

片偏移字段主要是说明:该数据包被分片后,相对于第一片偏移了多少个字节;
但是实际上我们在IP数据包看到的片偏移字段结果不是实际的结果,实际的结果还是需要片偏移的值×8,也就是字节偏移;
如上图:我们IP数据包3800字节,被分了三片!
片偏移字段的主要作用是:说明该IP数据包是分片后的具体位置在哪一片中,根据片偏移可以一个一个的拼凑成一个完整的包,相当于拼会成原来大的IP数据包有了参考一样;
比如上图:当我们在服务器的网络层拿到了三个分片的IP数据包后,我们是可以根据每个包的标志位,和片偏移位组合成为一个完整的IP数据包!

有一个问题:为什么字节偏移需要用片偏移字段×8才可以得到实际的值呢?
其实很好想,因为片偏移只有13个bit去存放片偏移的信息,很明显13个bit存放的信息是有限的,所以我们为了表示更多的信息,就需要×8才可以;

实际上:我们仅仅通过标识和片偏移是无法确定IP数据包是什么时候拼接结束的问题,我们拿到片偏移,只能确定拼接的顺序,而结束的标志却没有!
所以为了解决这个问题,我们的IP数据包首部字段中还是有一个比较重要字段:标志位

标志位:
标志位:占3个bit;
第一个bit我们通常作为保留位:直白一点就是基本不用这个位的信息,通常我们抓包见到都是0;
第二个bit表示不要分片的意思:也就是说,当我们看到第二个bit位置是1时候, 表示这个数据包不需要分片;为0时候就表示需要分片;通常该数据包过大时候需要分片那么该数据包的第二个bit就是为1;
第三个bit表示更多分片:直白点就是该位置为1时候,表示不是最后一片,为0时候就是最后一片数据包;

四、网络层首部–生存时间,协议,首部检验和

我们先来看看协议字段
协议:

协议字段表示上一层传输下来的是什么协议!如上图,不同的值表示不同的协议;
假如说IP数据包数据部分,封装是TCP协议,那么就说明协议字段的值为6,假如为UDP,那么值为17;
抓个ICMP包看看,对于协议字段的值为1;也就是表面为上一层传下来是ICMP包

 

首部检验和:
其实这个字段没什么好说的就是检验你的包是否正确;

生存时间:
TTL一般是操作系统内定设置好的,每个操作系统的TTL的值都可能不一样!

五、可选字段,填充字段,源IP,目标IP,
可选字段一般都是在一个IP数据包头部的20个字节无法表达完整信息时候,才会使用它;
填充字段一般也是为了筹够20个字节的IP数据包的首部才会使用;
其实这个两个字段都不是很常见,也就是说,我们通常看到的IP数据包的首部这两个字段是无具体信息的!
源IP地址和目标IP地址,我们都很清楚,发数据包过去肯定需要这两个字段的信息。

六、总结
其实要学明白IP数据包的首部各个字段,最主要的是结合理论信息,通过手动抓包分析去理解各个字段!反正这写字段理解了就很容易记住!
而我并没有放抓包的信息的图,因为我觉得这个放上去可能信息有点乱,但是你们不会学习时候,必须自己抓包分析,这样才会理解深刻!

标签:首部,IP,网络层,详解,偏移,分片,bit,数据包
From: https://www.cnblogs.com/lyfily-p-7439305/p/17467232.html

相关文章

  • 动态ip和静态ip
    IP地址:IP协议中有一个非常重要的内容,那就是给互联网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。为了通过网络发送或接收数据,传输控制......
  • 【漫画详解】用iframe障眼法,骗取用户点击
    做过Web开发的朋友曾经都有过这么个念头:在自己的页面里内嵌一个其他网站的网页,然后可以用脚本去获取他们页面里的信息,甚至可以。。。显然,有这么好的事也肯定轮不到你来尝了:)一个叫沙箱模型的东西被发明出来,就是防止有这种想法的人搞破坏。。。所以现在的我们只能远观,不可亵......
  • 前端进化笔记-JavaScript(三)
    人类在白色的底色上描绘图画,地球在黑色的底色上创造生命。变量、作用域与内存JavaScript的变量可以说是独树一帜。只需要一个(或两个等)关键字(const,let)就可以创建变量,创建时不考虑变量的类型,这是其他语言少有的强大功能。当然强大的功能总是伴随着问题。值原始值:Undefined,Null......
  • Javascript常用正则表达式集合
    1.匹配正整数:/^[0-9]*[1-9][0-9]*$/2.匹配非负整数(正整数+0):/^\d+$/3.匹配中文:/^[\u4e00-\u9fa5]/4.匹配Email:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/5.匹配网址URL:/^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?/6......
  • 转:Http详解-下
    转自:https://juejin.cn/post/71495493492890665045.未来5.1HTTP/2特性概览HTTP有两个主要的缺点:安全不足和性能不高。通过引入SSL/TLS在安全上达到了“极致”,但在性能提升方面却是乏善可陈,只优化了握手加密的环节,对于整体的数据传输没有提出更好的改进方案,还只能依赖于“......
  • grep命令详解
    如果你是一个新手,请从头阅读这篇文章,如果你只是忘记了grep命令的一些常用选项,直接查看文章尾部的总结部分即可。 先说说grep命令能做什么?我们可以使用grep命令在文本中查找指定的字符串,就像你在windows中打开txt文件,使用快捷键“Ctrl+F” 在文本中查找某个字符串一样,说白了,......
  • Ubuntu下制作deb包的方法详解
    http://t.csdn.cn/ApH7uhttps://blog.csdn.net/gatieme/article/details/52829907#:~:text=Ubuntu%E4%B8%8B%E5%88%B6%E4%BD%9Cdeb%E5%8C%85%E7%9A%84%E6%96%B9%E6%B3%95%E8%AF%A6%E8%A7%A3%201%201%20%E8%AE%A4%E8%AF%86deb%E5%8C%85%201.1%20%E8%AE%A4%E8%AF%86deb%E5%8C%8......
  • 详解驱动开发中内核PE结构VA与FOA转换
    摘要:本文将探索内核中解析PE文件的相关内容。本文分享自华为云社区《驱动开发:内核PE结构VA与FOA转换》,作者:LyShark。本章将探索内核中解析PE文件的相关内容,PE文件中FOA与VA、RVA之间的转换也是很重要的,所谓的FOA是文件中的地址,VA则是内存装入后的虚拟地址,RVA是内存基址与当前......
  • 如何查询本机网络IP地址?(两种方式)
    1.情景展示如何查询电脑所使用的网络IP地址?(IPv4地址)2.错误方式如上图所示,这是局域网IP,不是可供外网访问的IP地址。3.解决方案方式一:百度搜索在浏览器地址栏输入:www.baidu.com,打开百度(其中,www.可以省略掉),并按回车键,跳转到百度网页。在百度搜索栏输入:IP。一直往下划拉,找......
  • 初学者必看!Mock.js 示例详解
    Mock.js基础用法介绍Mock.js是一个常用于生成随机数据和拦截Ajax请求的JavaScript库。本文将介绍Mock.js的用法,包括安装和基础用法,在开始前我们可以看下看:了解Mock.js的语法规范。安装可以通过npm安装Mock.js:npm install mockjs基础用法随机生成一个用户信息使用Mock.js可以很......