IP协议的相关特性

IP协议相关特性

报头结构

报文结构解释

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

IP地址相关问题

从报文结构得知,IP地址是一个4字节,32位的整数.我们通常会把这个整数转换为点分十进制的表示方法:这样一串东西就是我的IP地址,三个点把整数分为了4个部分,每部分都是一个字节,每个部分的取值范围0~255
这样一串东西就是我的IP地址,三个点把整数分为了4个部分,每部分都是一个字节,每个部分的取值范围0~255.

那么32位整数可以产生多少个不同的地址?42亿9千万个,在互联网的发展下,这个数目已经不够用了,那么如何解决地址不够用的问题呢?

  1. 动态分配IP地址只给正上网的设备分配地址
  2. **

NAT机制

**

NAT的工作机制可以以10.0.0.10的主机与163.221.120.9的主机进行通信为例讲解,具体如下:

当10.0.0.10的主机需要与163.221.120.9主机进行通信时,NAT路由器会将源地址从10.0.0.10转换为全局的IP地址(202.244.174.37)再发送数据。 当响应数据从163.221.120.9发送过来时,NAT路由器会将目标地址(202.244.174.37)先转换成私有IP地址10.0.0.10以后再被转发。

NAT机制将IP地址分为了两大类,一类我们称为内网,一类分为外网

  • 内网IP可以重复出现,内网IP地址是由路由器分配的本地IP地址,在同一个局域网内不会出现重复的情况。
  • 外网IP:剩下的所有IP 外网IP必须唯一
    NAT背景下如何通信

1、外网设备 >> 外网设备,可以直接通信
2、内网设备 >> 其他内网设备, 不允许
3、外网设备 >> 内网设备, 不允许
4、内网设备 >> 外网设备,对应的内网设备的路由器,触发NAT机制进行IP替换,此时就会给这个网络数据报的源IP替换成路由器自己的IP。

IP地址组成

IP地址分为两个部分,网络号和主机号

网络号:标识网段,保证相互连接的两个网段具有不同的标识。
主机号: 标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

子网掩码

在这里插入图片描述
从二进制角度来看,左侧都为1右侧都为0,为1的部分有几位,就有几位网络号,剩下的就是主机号了.

特殊的IP地址

  • 主机号全部为0的
    例如:192.169.0.0 这个就是一个网络号,局域网中不存在某个主机的主机号为0。
  • 主机号全部为1的
    192.168.0.255 这是一个广播地址。
  • ip为127.*开头的我们成为环回IP
  • 主机号为1的,一般作为网关IP,这个不是绝对的。

MTU

一般我们把数据链路层的数据帧的最大载荷为MTU,若承载的数据长度超过这个MTU,那么就会在IP层进行分包,
另外,我们需要关注3个内容:

  • 16位标识:一个大的IP数据报拆分为小的报后这个标识都是一样的
  • 3位标志位:有1位不用,一位表示是否分包,还有1位表示当前这个分包是否是最后一个(结束标志)
  • 13位片偏移:总得来说就是表示每个小的数据报的先后顺序,用来组包的.

MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包

将较大的IP包分成多个小包,并给每个小包打上标签;

每个小包IP协议头的 16位标识(id) 都是相同的;

每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记
(当前是否是最后一个小包,是的话置为1,否则置为0);

到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;

一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数 据;

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

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

相关文章

自造简易版音频进度条

最近在做音乐播放器页面, 积累了很多有趣的经验, 今天先分享播放进度条的开发过程. 效果 话不多说,先看效果 支持点击修改进度,拖拽修改进度,当然大家肯定都知道ui库里面有现成的,为何要自己造一个 首先著名的ui库中确实都要这…

【校招VIP】java线程池考点之核心线程数

考点介绍: 线程池是这一两年java大厂提问频度飙升的考点,需要从池子的概念理解相关参数和方法 java线程池考点之核心线程数-相关题目及解析内容可点击文章末尾链接查看! 一、考点试题 1、请列举一下启动线程有哪几种方式,之后再…

springboot web 增加不存在的url返回200状态码 vue 打包设置vue.js 单文件使用

spring boot项目增加 html web页面访问 1. 首先 application.properties 文件中增加配置,指定静态资源目录(包括html的存放) spring.resources.static-locationsclasspath:/webapp/,classpath:/webapp/static/ 2. 项目目录 3. 如果有实现 …

老站长带你全面认识基站和天线

认识基站 作为数量最多的移动通信设备 基站几乎是随处可见 其实 基站也分为很多种 基站的天线,也分为很多种,真正都能区分清楚的人其实不多。 什么是基站 Base Station 一般特指“公用移动通信基站” 大家都知道,基站就是给手机提供信…

数据结构与算法(C语言版)P1---算法效率

算法的效率:算法的时间复杂度和空间复杂度 【本节目标】 1.算法效率2.时间复杂度3.空间复杂度4.常见时间复杂度以及复杂oj练习 1、算法效率 1.1、如何衡量一个算法是的好坏 如何衡量一个算法的好坏呢?比如斐波那契数列: long long Fib(…

常用的8位单片机+2.4g遥控芯片的“化学”反应

8位单片机通常是微控制器,它们具有相对简单的处理能力,但对于许多嵌入式系统和低复杂度应用而言,它们足够使用。这些芯片通常具有较低的功耗,价格相对实惠。 2.4GHz无线通信芯片,则具备强大的无线通信能力。它们可以实…

npm发布自定义vue组件库

npm发布自定义vue组件库 创建项目 vue create test-ui自定义组件 创建自定义组件,组件名称根据你的需求来,最好一个组件一个文件夹,下图是我的示例。 src/components 组件和你写页面一样,所谓组件就是方便实用,不用…

linux入门---命名管道

如何创建命名管道 使用mkfifo函数就可以在程序里面创建管道文件,该函数的声明如下: 该函数需要两个参数,第一个参数表示要在哪个路径下创建管道文件并且这个路径得待上管道文件的名字,因为每个文件都有对应的权限,所…

汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址

汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址 一、新建轴与轴控代码编写 1. 新建轴 (1)新建一个轴 (2)将轴名字更新为实际名字 可以后面实例化后再更改,汇川可以在更新名字时同步更新…

Peppertype.ai:人工智能内容营销平台

【产品介绍】 名称 Peppertype.ai 具体描述 Peppertype.ai是一个AI驱动的文章生成工具,可以帮助你在几秒钟内为各种渠道创建吸引人 的内容。无论你是想要写广告文案、社交媒体标题、博客大纲还是网站内容,Peppertype…

代理HTTP使用不当会出现哪些问题?如何正确使用代理服务?

代理HTTP是一种常见的网络代理方式,它为客户端和服务器之间提供中间层,转发上下游的请求和响应。正确使用代理HTTP可以提高采集效率、增加网络安全性、加速网络速度、保护用户隐私。但是,使用不当就难以达到预期的效果,在使用代理…

influxdb2.7基本介绍安装与启动

概念 timestamp: influxdb所有的数据都会有一个列_time来存timestamp。默认是以nanosecond格式存储的。field: field就是mysql中的字段,field key存储在_field字段中,field value就是字段值,存储在_value字段中。field key和field value对组…