当前位置: 首页 > news >正文

IP 协议的相关特性

1. IP协议定义和特性

  IP(Internet Protocol)协议是互联网中使用的网络协议之一,它的特性包括:

1. 无连接性:IP协议是一种无连接协议,每个数据包都是独立发送和处理的。因此,每个数据包都需要包含完整的源和目的地址信息,以便被正确路由到目的地。
2. 不可靠性:IP协议不提供任何可靠性保证,数据包在传输过程中可能会在网络拥塞、链路故障等情况下丢失或重复,需要应用层自行处理数据的可靠性。
3. 分组交换:IP协议使用分组交换技术,将数据分成若干个固定大小的数据包进行传输,每个数据包都有其独立的路由路径和传输时间。
4. 网络层协议:IP协议在OSI模型中属于网络层,主要负责数据包的寻址和路由选择。
5. IPv4和IPv6:IP协议有两个版本,IPv4和IPv6,其中IPv4是现有网络中广泛使用的版本,而IPv6则是一种新的IP协议版本,主要为了解决IPv4枯竭的地址问题。
6. 头部格式:IP协议的数据包头部包括源地址、目的地址、协议类型、TTL等信息,具体数据包头部格式不同于IPv4和IPv6版本的不同而有所区别。

格式: 

 

4位版本号:指定IP协议的版本,对于IPv4来说,就是4。

4位头部长度:IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。

8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。 这四者相互冲突,只能选择一个。(这个可以理解成选择一个作为IP协议的特点,类似一些角色的变换形态)

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

16位标识:唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每 一个片里面的这个id都是相同的。(用于拆包合包时的身份标识,同一个包的标识是一致的)

3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。 第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位 表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。

13位分片偏移:是分片相对于原始IP报文开始处的偏移。其实就是 在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此, 除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了,这个偏移量越小代表这个包的顺序越前)。

8位生存时间:数据报到达目的地的最大报文跳数。一般是64或者128。每次经过一个路由,TTL就会减一,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。

8位协议:表示上层协议的类型。

16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏(报文部分的完整性校验已经由传输层协议校验过了,所以不需要再次校验)。

32位源地址和32位目标地址:表示发送端和接收端。

选项字段(不定长,最多40字节):略。

2. IP协议的作用 

 2.1 地址管理

  IP地址本质上是一个32位整数,为了方便,就会把IP表示成点分十进制的方式,那32位整数,能表示多大的范围呢?大概为42亿9千万,这个数字看起来很大,大师其实并不算很大,发展太快了,人人都有手机,总的设备的数量达到百亿级别还是可能,如何解决IP地址不够用,就成了上个世纪90年代非常严峻的问题了。

  2.1.1 动态分配IP地址

  全世界的设备,也不是同一时刻都在上网,更充分的利用现有的IP地址(并没有从根本上解决问题)。

 2.1.2 NAT机制(网络地址映射)

 NAT 机制的工作流-CSDN博客

 2.1.3 IPV6(从根本上解决问题的方案,增加IP地址个数)

  IPv6使用了16个字节表示IP地址。(2^128)但是IPv6的报头结构和IPv4 是不兼容的。引入IPv6就意味着当前网络设备(路由器,就不能支持)就需要更换支持IPv6的设备,那就需要多花钱!!

 2.2 路由选择

  简单来说就是规划出一条路,网路结构太复杂了,每个路由器都无法掌握全局的信息,只能掌握一部分局部信息,此时路由器出来规划出来的线路,只能是一个“较优解”。数据包中包含了“目的IP”字段就是要问路的目标,每个路由器对于网络环境(和他相邻的设备情况)有一定的了解,此时就可以,根据他了解告诉我们下一步往哪个方向走。

相关文章:

  • 「优选算法刷题」:计算布尔二叉树的值
  • Java学习day27:join方法、生产者消费者模式(知识点详解)
  • 通过 React 来构建界面
  • Android PMS——系统应用位置解析(四)
  • redis redisson报错 Unsupported protocol问题原因和解决方案
  • 微信小程序(二十八)网络请求数据进行列表渲染
  • 数据库管理-第143期 Oracle DB 19c需要调整的基本参数V2(20240202)
  • JSON字符串作为入参时,转换为具体对象
  • Leetcode—2881. 创建新列【简单】
  • VBA数据库解决方案第八讲:SQL语句及打开记录集
  • 图片热区功能
  • Flutter的安装与环境配置
  • 机器学习 | 如何利用集成学习提高机器学习的性能?
  • 030 可变参数
  • [SWPUCTF 2021 新生赛]ez_unserialize
  • 分享的文章《人生如棋》
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 2017-08-04 前端日报
  • android 一些 utils
  • FastReport在线报表设计器工作原理
  • JavaScript 一些 DOM 的知识点
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MySQL几个简单SQL的优化
  • SAP云平台里Global Account和Sub Account的关系
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 深度解析利用ES6进行Promise封装总结
  • 实战|智能家居行业移动应用性能分析
  • 微信小程序设置上一页数据
  • 正则学习笔记
  • 仓管云——企业云erp功能有哪些?
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​ssh免密码登录设置及问题总结
  • ​第20课 在Android Native开发中加入新的C++类
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #Linux(make工具和makefile文件以及makefile语法)
  • #微信小程序(布局、渲染层基础知识)
  • $L^p$ 调和函数恒为零
  • (10)ATF MMU转换表
  • (20050108)又读《平凡的世界》
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (学习日记)2024.01.19
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .Net 6.0 处理跨域的方式
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [CISCN 2019华东南]Web11
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件
  • [emuch.net]MatrixComputations(7-12)
  • [git]git命令如何取消先前的配置