网络原理-IP协议

一、IP协议报头

 

  1. 版本号:用来表示IP协议的版本,现在常用的IP协议有两个版本,IPv4和IPv6,其他版本可能只存在于实验室中,并没有被广泛的使用。

  2. 首部长度:用来表示IP报头的长度,因为存在"选项"字段,所以IP报头是可变长的,此处单位为4个字节。取值范围:20-60字节。

  3. 服务类型:虽然有8位但是真正只有4位才有效,用来表示IP协议的4工作模式:最小延时、最大吞吐量、最高可靠性、最小成本,四种模式互斥,只能切换到一种模式。虽然IP协议支持这个机制,但在实际中很少用到。

  4. 总长度:表示的是整个IP数据报的长度,即IP报头长度+载荷的长度。这里的总长度使用了16bit,只能表示到64kb的数据,所以当携带的数据比较多的时候,IP协议会自动将数据报拆成多份,而数据到了接收方又会进行合并操作。

  5. 标识+标志位+片偏移:用来帮助IP协议正确拆包组包。当IP的载荷数据比较多的时候,会进行拆包,而同一个数据报中多个包的标识是相同的,然后再根据包的先后顺序进行片偏移的赋值。其中的标志位,一共3bit,一位不作使用,一位用来表示是否允许拆包,还有一位用作"结束标记",判断是否为最后一个包。

  6. 生存时间(TTL):表示一个数据包在网络上最多被转发多少次,每经过一个中间节点就减1,比如有一个TTL的初始值为32,在经过32次转发后就会减为0,此时这个数据包就会被丢弃,表示不可达。

  7. 协议:表示上层使用的是哪种协议。

  8. 首部校验和:检验IP协议数据包的头部是否出现错误,后面的载荷为TCP/UDP,可以自己检验。

二、IP地址

在网络的世界中有许多的主机,彼此之间要使用IP地址找到对方才能通信,因此每个IP地址原则上是不能重复的。而所谓的IP地址本质上是一个32位的整数。不过为了便于叙述与记忆往往会使用点分十进制表示。

32位能表示的数据量是有限的,大约为42亿,随着网络的迅速发展,上网的设备越来越多已经超出了32位能表示的范围了,如何解决32位IP地址不够用呢?

DHCP(动态分配IP)

通过使用类似分时复用的方式,当主机需要上网的时候进行分配一个IP地址,不需要就先不分配,这种方式无法改变总量,只能缓治(你咋确定不会正好有42亿人一起上网呢?)。

NAT机制(网络地址转换)

NAT机制本质上是使用了IP地址的复用,将网络分为了两大类,一类为内网,另一类为外网。外网之间可以直接通信,而内网之间不可以。

 

由于内网可以复用,因此就会出现两台不同的主机的IP地址相同的情况,此时要通信的话,需要借助外网。

大致流程如下:

在发送的过程中,每经过一个路由器的时候就会触发NAT机制,路由器会将自己IP地址替换到当前IP数据报的源IP地址,因此接收端也无法知道这个数据报是源自哪的,只知道是上一级交付的。对于每一个带有NAT机制的路由设备也都会使用一个映射表来维护对应关系,这样当一个数据报过来之后,通过查表就知道发给谁了。

在NAT机制下,一个外网IP代表的不一定是一个设备了,而是很多很多设备,但是NAT也有非常明显的缺点:

非常繁琐,不方便直接访问局域网设备,需要多层路由转发才能访问另一个局域网中的设备。

虽然NAT进一步提高了利用率,但是也没有从根本上解决问题,但为啥还是在当今广泛使用呢?这是因为NAT是一个纯软件实现的方案,开发商只需要更新一下软件,这样就能大大降低成本。

IPv6

IPv6算是从根本上解决了IP地址不够用的问题。因为IPv6增长到了16个字节,128位,其能表示的数据范围相当于能给地球上的每一粒沙子都分配一个IP地址。

 

但是IPv6并没有发展起来,这是因为IPv4使用的是4个字节,因此两个协议无法兼容,要想升级IPv6就得更换硬件,但这并不会提高网速,用户也就感知不到,运营商也就赚不到钱......

更多知识可参考:电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅_哔哩哔哩_bilibili

IP地址组成

IP地址由两部分组成:网络号+主机号

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

主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是主机号必须不同。


那么如何区分网络号和主机号呢?使用子网掩码

子网掩码和IP地址一样,也是4个字节,32位的整数,但是子网掩码要求,左侧必须为连续的1,右边必须为连续的0,即0和1不能穿插出现。其中1的范围就描述了IP地址的网络号,0的范围则是主机号。

这里就表示前23位为网络号,后9位为主机号。

子网掩码是现代的一种划分网络号的办法,上古时期还有一种:

特殊的IP地址

1.IP地址中的主机号全部位0,就成了网络号。

2.IP地址中的主机号全部设为1,就成了广播地址。例如:192.168.0.255,子网掩码:255.255.255.0,此时这个地址就是广播地址了,往这个地址发送UDP(TCP无法和广播地址握手)数据报,那么这个局域网中所有设备都会接收到。

3.127.*的IP地址用于本机环回地址,通常为127.0.0.1。

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

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

相关文章

日期类的实现

目录 Date.h Test.cpp 测试代码Test.cpp 日期类的实现 代码分享 Date.h #pragma once #include<iostream> using namespace std; #include<assert.h>class Date {//友元函数声明friend ostream& operator<<(ostream& out, Date& d);friend…

[渗透测试学习] Headless-HackTheBox

Headless-HackTheBox 信息搜集 使用nmap扫描一下 nmap -sV -sC -v --min-rate 1000 10.10.11.8可以发现5000端口是开放的,继续扫一下目录 访问/dashboard发现只有admin才可以,我们注意到cookie值为JWT加密,拿到揭秘网站验证下猜想 cookie为user用户,那么我们要想访问必须…

[阅读笔记29][AgentStudio]A Toolkit for Building General Virtual Agents

这篇论文是24年3月提交的&#xff0c;提出了一个用于agent开发的全流程工具包。 作者提到目前agent开发主要有两个阻碍&#xff0c;一个是缺乏软件基础&#xff0c;另一个是缺乏在真实世界场景中进行评估。针对这两个阻碍&#xff0c;作者涉及了一个开发工具包&#xff0c;包括…

[已解决]react打包部署

react打包部署 问题 npm install 命令无反应 思路 换成 yarn install 安装完hadoop的环境后&#xff0c;使用node的yarn会报错&#xff1a; 我们在cmd使用where yarn&#xff0c;如下&#xff1a; 看你想保留哪一个&#xff0c;我平时node用的多&#xff0c;就把hadoop的y…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…

使用AOP切面做防止用户重复提交功能

在我们的项目中&#xff0c;需要考虑到有时候因为网络原因或者其他原因用户对同一个接口进行同一批数据的重复性操作&#xff0c;如果不做这样的处理很可能会在数据库中添加多条同样的数据。 我们可以通过使用aop来解决这样的问题&#xff0c;接下来看看具体怎么做吧~ 自定义…

网络原理-UDP和TCP

在传输层中有两个非常重要的协议&#xff0c;UDP和TCP&#xff0c;现在就来研究一下这两个协议。 UDP 报文格式 我们观察可以发现&#xff0c;里面UDP报文长度为2个字节&#xff0c;那么是多少呢&#xff1f;我们需要快速反应如下固定字节数据类型的取值范围&#xff1a; 字…

Jenkins服务器IP更换,Jenkins URL地址更换

服务器的网络地址发生变动&#xff0c;修改jenkins服务器IP地址后&#xff0c;jenkins网页能够打开&#xff0c;但是job中的配置钩子没有自动改变&#xff0c;如图所示&#xff1a; 经过查询资料了解&#xff0c;需要修改jenkins本地化配置地址才可以显示正确&#xff1a; 1、…

初识ansible变量及实例配置

目录 1、为什么要使用变量 2、变量分类 3、 变量详解 3.1 vars,vars_files , group_vars 3.1 .1 vars 剧本中定义变量 3.1.2 vars_file 将变量存放到一个文件中&#xff0c;并在剧本中引用 3.1.3 group_vars 创建一个变量文件给某个组使用 实例1-根据不同的主机…

Java关键字和API

1 this和super关键字 1.this和super的意义 this&#xff1a;当前对象 在构造器和非静态代码块中&#xff0c;表示正在new的对象 在实例方法中&#xff0c;表示调用当前方法的对象 super&#xff1a;引用父类声明的成员 无论是this和super都是和对象有关的。 2.this和sup…

通过实例学C#之序列化与反序列化XmlSerializer类

简介 可以将类序列化成xml文件&#xff0c;或者将xml文件反序列化成类对象&#xff0c;一般用于保存或加载项目参数。 构造函数 XmlSerializer() 不使用函数创建一个xmlSerializer对象。 XmlSerializer(Type type) 使用type对象创建一个xmlSerializer对象&#xff0c;注意&…

【001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂】

001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂 文章目录 001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂创作背景通信模型ISO/OSI七层模型 和 TCP/IP四层模型网络通信数据包格式&#xff08;Ethernet II&…

20240421阿夏的CSDN创作纪念日(3周年)

缘 提示&#xff1a;可以和大家分享最初成为创作者的初心 3年前我写下第一篇CSDN&#xff0c;开启了Python研究之旅win10系统64位&#xff08; 惠普&#xff09;台式电脑自动开机、关机图文详细解&#xff08;一&#xff09;_惠普主板设置自动开机-CSDN博客文章浏览阅读4.2k次…

深入OceanBase内部机制:资源隔离实现的方式总结

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 1. 为何HTAP需要资源隔离2. OceanBase的资源隔离机制概述租户间资源隔离租户内资源隔离物理资源隔离大查询请求的隔离优先级…

4月21敲一篇猜数字游戏,封装函数,void,无限循环,快去体验体验

今天敲一篇猜数字游戏 目录 今天敲一篇猜数字游戏 1.打开先学goto语句&#xff1a; 2.开干&#xff1a; 首次我们学习随机数&#xff1a; 讲解一下&#xff1a; 改用srand; 加入时间变量&#xff1a; 获取时间&#xff1a;哈​编辑 3.我本来想已近够完美了&#xff0…

Flink学习(七)-单词统计

前言 Flink是流批一体的框架。因此既可以处理以流的方式处理&#xff0c;也可以按批次处理。 一、代码基础格式 //1st 设置执行环境 xxxEnvironment env xxxEnvironment.getEnvironment;//2nd 设置流 DataSource xxxDSenv.xxxx();//3rd 设置转换 Xxx transformation xxxDS.…

Spring Boot中接收各种各样的参数

一、接收json参数&#xff0c;封装为Map 1.1、核心代码 /*** 接收json参数&#xff0c;封装为Map* param servletRequest* return* throws Exception*/ PostMapping("/getParam") public R getParam(HttpServletRequest servletRequest) throws Exception {Map<…

Bootstrap 5 保姆级教程(十二):弹出框 消息弹窗

一、弹出框 1.1 创建弹出框 通过向元素添加 data-bs-toggle"popover" 来来创建弹出框。 title 属性的内容为弹出框的标题&#xff0c;data-bs-content 属性显示了弹出框的文本内容&#xff1a; 注意: 弹出框要写在 JavaScript 的初始化代码里。 以下实例可以在文…

投入产出表的分析要点有哪些

投入产出分析是利用投入产出表、投入产出系数和投入产出模型&#xff0c;对国民经济各部门之间的技术经济联系和影响进行分析的一种经济数据分析方法。 一、什么是投入产出表 我国的投入产出表是描述国民经济中各种产品的来源与使用去向的棋盘式平衡表 , 是产品部门 产品部门…

【已解决】电脑设置notepad++默认打开txt

1、以管理员的方式打开notepad 步骤&#xff1a;打开设置 -> 首选项 -> 文件关联 2、 设置Notepad默认打开 按照以下步骤将Notepad设置为默认打开.txt文件&#xff1a; 右键单击任何一个.txt文件。选择“属性”。在“常规”选项卡中&#xff0c;找到“打开方式”&#…