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

网络原理(5)——IP协议(网络层)

目录

一、IP协议报头介绍

1、4位版本

2、4位首部长度

3、8位服务器类型

4、16位总长度

5、16位标识位

6、3位标志位

7、13位偏移量

8、8位生存空间

9、8位协议

10、16位首部检验和

11、32位源IP地址

12、32位目的IP地址

二、IP协议如何管理地址?

  1、动态分配IP地址

  2、NAT 机制(网络地址映射)

(1)NAT机制的介绍

(2)局域网设备如何访问广域网广域网(发送请求)

(3)广域网设备如何返回响应给局域网设备(返回响应)

1、不同局域网的不同设备访问同一服务器

2、不同局域网的不同设备访问不同服务器

3、同一局域网的不同设备访问同一服务器(不同进程)

4、同一局域网的不同设备访问同一服务器(同一进程)

  3、使用IPv6(从根本上解决问题)


        目前学习的IP协议叫做 TCP/IP 协议族,或者 TCP/IP 协议栈。而对于IP协议,不做详细介绍,主要介绍其IP协议的报头和地址如何分配问题。

        IP协议,主要完成的工作:1、地址管理使用一套地址体系,来描述互联网上每个设备所处的位置(电脑、手机、路由器、服务器都会有IP地址,经典的交换机没有IP地址)2、路由选择(一个数据包,如何从网络中的某个地址,传输到另一个地址)。


一、IP协议报头介绍

        报头内信息如图

        以下是IP报头内的信息介绍

1、4位版本

        IPv4和IPv6,其中IPv4是主流的IP协议版本。

2、4位首部长度

        表示IP头部的长度(报头),也是可以变长的,单位是 4字节。

3、8位服务器类型

        里面包含3位优先权字段、1位保留位字段、4位TOS字段,(TOS)表示当前IP协议所处的模式,有以下4种:最小延时、最大吞吐量、最高可靠性、最小成本(硬件设备的开销)。

4、16位总长度

        描述一个IP数据报的长度,IP报头+载荷,这里因为16位大小,是否意味着IP数据报的大小只能64KB了呢?其实不然,传输的数据报如果大于64KB,就会把它们拆成几个数据报,再进行传输,如图:

        将一个TCP数据报拆分成多个IP数据报进行传输,就是多个IP数据报携带应该TCP数据报(IP的拆包并不是因为达到64K,而是在数据链路层还有限制),那么问题来了,拆分后怎么组包呢?下面5、6、7就是介绍组包的信息。

5、16位标识位

        表示被拆分多个的数据报,里面的载荷应该在哪里组合(放到哪里一起组合)。

6、3位标志位

        表示该数据报里的载荷是否已经组织,只有2位是有效的,其中1位表示这次的IP是否拆包了,还有1位表示结束标记(IP数据报里被拆分的载荷是不是最后一个)。

7、13位偏移量

        被拆分的数据报在IP数据包中,描述这些数据包之间的顺序

8、8位生存空间

        这里的单位不是 s / ms,而是 次数,这里存储的是一个整数,一个IP数据报,每次经过一个路由器,这里就会 -1,如果减到0,这个包就要被丢了,不能再继续传输下去。其中有一个考虑,就是为了防止环路,如果这个数据报出现异常,在网络中循环乱串,找不到目的地,这样就会增加网络的负担,浪费宝贵的网络资源。

        这里的IP数据报每经过一次路由器,TTL就会-1,当这个数值减到0,就要丢包了,而这个TTL数值一般是32 / 64,就足够当前网络的传输了(类似六度空间理论)。以下访问美国政府网站,看看要经过多少个节点。

        在CMD控制平台输入:tracert + 网站网址,如图:

        从广东这边访问到美国那边的政府网址,只需经过上面25个节点,并且最多只要30个,说明这里TTL是32就够用了。上面有些设备关闭了 “ICMP 功能” ,所以会看到求请超时,但不影响tracert的执行。

9、8位协议

        表示传输层使用的是哪个协议(UDP / TCP)

10、16位首部检验和

        这里只针对IP的首部校验,不会对载荷进行校验,因为载荷的是TCP数据报,里有TCP报头,会自动校验

11、32位源IP地址

        我们要学习的最核心的地方,表示发件人的地址

12、32位目的IP地址

        我们要学习的最核心的地方,表示收件人的地址


二、IP协议如何管理地址?

        IP地址本质是一个32位的整数,为了方便,采用点分十进制的方式进行分隔,通过3个点,将其分成4个部分,例如192.168.0.1;每一个部分为1字节,取值范围:0~255;而32位能表示的最大数是:2^32 -> 43亿9千万这是IPv4的,IPv6则大2^32倍);

        IP地址的目的就是区分网络上不同的通信设备,让每个通信设备的IP地址在网络上都是唯一的;但是43亿9千万够用吗,如今世界人口都有80亿,显然是不够用的。所以,就有以下方案解决IP地址不够用的问题。

  1、动态分配IP地址

        因为世界不同的地方,白天黑夜是不一样的,有时差;所以全世界不是同一时间使用通信设备的,所以就可以进行动态分配IP地址,进行网络通信的设备才给其分配IP地址,不通信的设备就不给其分配

        但是这个只是权宜之计,没有从根本上解决问题。

  2、NAT 机制(网络地址映射)

(1)NAT机制的介绍

NAT机制把IP分为了两大类:

        1、私网 IP / 局域网 IP

           IP地址是以“10.* ”,“172.16-172.31.*”,“192.168.*.*”

        2、公网 IP / 广域网 IP

           除了上面私网这种格式的IP地址,其他都是公网IP地址。

        这里要求,公网/广域网的IP地址不能重复,每个都是唯一的;而私网/局域网则不同,局域网要求同一个局域网内(连在同一个路由器)的IP不能有重复,但不同局域网的IP可以重复

        由于上述的设定,就有以下重要的限制:

(1)、公网设备访问公网设备没问题,可以直接访问。

(2)、局域网设备访问局域网设备(同一个局域网)没问题,可以直接访问。

(3)、局域网设备访问局域网设备(不同的局域网)不能访问。

(4)、局域网设备访问公网设备可以访问,但要对局域网设备的IP进行转换。

(5)、公网设备访问局域网设备不可以主动访问。

(2)局域网设备如何访问广域网广域网(发送请求)

        这里简单介绍一下,局域网设备访问公网设备是要经过路由器的,而这个路由器有LAN口和WAN口;LAN口是你连接的设备,你家里的电脑接这个口就相当于你家里的设备构成了局域网;而WAN口是连接运营商那边的网线的,相当于你的设备出路由器就是访问广域网了;如图:

        那路由器是怎么把局域网IP和广域网IP连接起来的呢?如图:

        经过上面的转换,也就可以使公网上的每个IP都是唯一的了本质也就是让一个公网IP可以对应多个设备IP

        说个题外话,以前的百度贴吧,就有个封IP功能,但一旦封了后,就会导致一大批的用户莫名其妙的在某个吧上发不了言,原因就是封了路由器的IP,然后很多设备访问贴吧,也是要经过哪个路由器的,在很久以前,还挺常见的。

        那返回响应的时候是如何转换的呢?以下内容介绍。

(3)广域网设备如何返回响应给局域网设备(返回响应)

        路由器这里有个表,里面包含的信息如图:

        有了这个表,就能找到是哪个设备发出的请求,给它返回响应了。有以下不同场景。

1、不同局域网的不同设备访问同一服务器

        因为是不同的局域网,所以连得路由器是不一样的,所以这里返回的响应能通过不同路由器转换IP对应到不同设备的IP,无需担心会有相同路由器转换成一样的IP,也无需担心有进程的端口号是否一样的问题,因为能通过IP就能找到对应的设备了。

2、不同局域网的不同设备访问不同服务器

        和第一个的情况一样

3、同一局域网的不同设备访问同一服务器(不同进程)

    如图:

        返回响应时,因为经过同一个路由器,所以转换回来的IP会一样,但是因为他们的目的端口不一样,就可以根据端口区分这两个响应返回给哪个设备了。

4、同一局域网的不同设备访问同一服务器(同一进程)

        如图:

        这里经过的两个设备发出的请求虽然经过路由器的转换IP是一样的,而且他们进程的端口号也相同,但是经过路由器转换,可以替换成不同的端口号,就可以区分不同的响应该发给谁了

        这里有个理论上存在,实践中不存在的问题:如果请求的主机过多,分配的端口号超过65535了,这时候经过路由器转换回来的IP是重复的,端口号也是有重复的,咋办?其实在NAT机制的管控下,端口号是够用的,而且运营商在部署网络,也会控制NAT设备管辖的设备数量,设备如果太多,有几百万个,就会多搞几个NAT,多搞几个外网IP。而且出现这种的概率极低,理论上有,但是实践上不会出现这种问题

        但这也只是个权宜之计,不能从根本上解决问题,但效果也还不错。

  3、使用IPv6(从根本上解决问题)

        IPv4使用4个字节表示IP地址,有 42亿9千万(2^32)个IP地址;

        IPv6使用6个字节表示IP地址,有2^32^32个IP地址;这个数量有多大呢?举个例子,如果我们把地球的每粒沙子都给它分配一个IP地址,都用不完,而我们的计算机设备的主要材料有二氧化硅,这个材料也是从沙子里转换过来的,想象我们的电脑是沙子的子集,全集都用不完,子集肯定更加用不完

        所以IPv6是可以从根本上解决问题。但是能不能把IPv4升级到IPv6呢?答案是技术上很容易实现,但现实很困难,因为这个升级只是增加了IP地址的数量,并不会加快网速,而且还很费钱,是一个吃力不讨好的事情(路由器、交换机、计算机里的硬件设备、手机等等都要进行升级)。是一个很大的工程,如果要升级,相关的企业就要花很多钱。同时用户也要更新设备,因为升级后可能导致IPv4和IPv6不兼容,用户也可能要花钱

        但是我们国家的IPv6的覆盖程度已经到70%了,原因就是国家出台了强制性的政策,强制要求我国的三大运营商进行升级,原因可以参考棱镜门事件,怕被美国打压。


        都看到这了,点个赞再走吧,谢谢谢谢谢!!!

相关文章:

网络原理(5)——IP协议(网络层)

目录 一、IP协议报头介绍 1、4位版本 2、4位首部长度 3、8位服务器类型 4、16位总长度 5、16位标识位 6、3位标志位 7、13位偏移量 8、8位生存空间 9、8位协议 10、16位首部检验和 11、32位源IP地址 12、32位目的IP地址 二、IP协议如何管理地址? 1、动…...

GE IS200AEPAH1BKE IS215WEPAH2BB是两种不同的压力测量模块

GE IS200AEPAH1BKE和IS215WEPAH2BB是两种不同的压力测量模块,它们都属于GE(通用电气)公司的产品。 具体来说,以下是这两种模块的一些特点和应用: IS200AEPAH1BKE:这款模块适用于需要高性价比的压力测量应用…...

Rust 与 C++ ,孰优孰劣?

Rust 与 C 是两种高级系统级编程语言,它们都在追求性能、控制底层硬件细节的同时强调安全性。以下是两者的详细对比: 目标与理念 Rust:由 Mozilla 主导开发,目标是构建一种既快速又安全的系统级编程语言,特别是解决 C…...

MySQL、Oracle的时间类型字段自动更新:insert插入、update更新时,自动更新时间戳

1.MySQL 支持的字段类型:DATETIME、TIMESTAMP drop table if exists test_time_auto_update; create table test_time_auto_update (id bigint auto_increment primary key comment 自增id,name varchar(8) …...

Testng框架集成新业务

总体框架设计见我另一篇博客&#xff1a;httpclienttestng接口自动化整体框架设计 <block&#xff1a;表示测试用例块> block后面是 测试用例的名称 ||接口名,该接口名在URL.txt里维护接口 ||get\post&#xff1a;表示请求的方法 get_1\2\3\4&#xff1a;代表加密 get: …...

springboot 单元测试

Spring Boot 单元测试是确保代码质量的重要部分&#xff0c;它允许我们在不实际启动整个应用的情况下测试我们的代码。在Spring Boot中&#xff0c;我们通常使用Spring Test模块和JUnit测试框架来编写单元测试。以下是一个简单的Spring Boot单元测试的详细代码介绍&#xff1a;…...

LeetCode---126双周赛

题目列表 3079. 求出加密整数的和 3080. 执行操作标记数组中的元素 3081. 替换字符串中的问号使分数最小 3082. 求出所有子序列的能量和 一、求出加密整数的和 按照题目要求&#xff0c;直接模拟即可&#xff0c;代码如下 class Solution { public:int sumOfEncryptedInt…...

[python] ETL 工作流程 Prefect

Prefect 是一个用于构建、调度和监控数据流程的 Python 库。它提供了一种简单而强大的方式来管理 ETL&#xff08;Extract, Transform, Load&#xff09;工作流程。下面是一个简单的示例&#xff0c;演示了如何使用 Prefect 来创建和运行一个简单的任务&#xff1a; 首先&…...

html第一次作业

常用标签 0, 骨架&#xff08;&#xff01;tap&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…...

基于java实现的KTV点歌系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…...

GPT+向量数据库+Function calling=垂直领域小助手

引言 将 GPT、向量数据库和 Function calling 结合起来&#xff0c;可以构建一个垂直领域小助手。例如&#xff0c;我们可以使用 GPT 来处理自然语言任务&#xff0c;使用向量数据库来存储和管理领域相关的数据&#xff0c;使用 Function calling 来实现领域相关的推理和计算规…...

DeepSeek-coder 微调训练记录

简介 微调过程不再细说, 参考link进行即可. 主要是数据集. 1.3b模型微调训练占用资源信息 top信息 评估 根据DeepSeek-coder的Evaluation试进行对微调后的模型进行评估. 其中的评估库主要是evol-teacher和human-eval. 新建一个eval_ins.sh文件, 填入以下内容 LANG"…...

【Android】【Bluetooth Stack】蓝牙音乐协议分析之音频控制与信息加载(超详细)

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待! 目录 1. 音乐信息加载 1.1 歌曲信息 1.1.1 key_c…...

ChatGPT无法登录,提示我们检测到可疑的登录行为?如何解决?

OnlyFans 订阅教程移步&#xff1a;【保姆级】2024年最新Onlyfans订阅教程 Midjourney 订阅教程移步&#xff1a; 【一看就会】五分钟完成MidJourney订阅 GPT-4.0 升级教程移步&#xff1a;五分钟开通GPT4.0 如果你需要使用Wildcard开通GPT4、Midjourney或是Onlyfans的话&am…...

程序员表白

啥&#xff1f;&#xff01;你说程序员老实&#xff0c;认真工作&#xff0c;根本不会什么表白&#xff01;那你就错了&#xff01;(除了我) 那今天我们就来讲一下这几个代码&#xff01;赶紧复制下来&#xff0c;这些代码肯定有你有用的时候&#xff01; 1.Python爱心代码 im…...

CSS的使用与方法

什么是CSS CSS是层叠样式表。它是一种用于描述网页或者文档外观和样式的标记语言。 层级样式表&#xff1a;就是给HTML标签加样式的。 如果说HTML是个游戏英雄 、那么CSS就是游戏皮肤。 【一】注释语法 /* 注释 */ 【二】CSS的语法结构 选择符 {样式属性: 样式属性值;样…...

(保姆级)离线安装mongoDB集群

Docker搭建MongoDB集群 副本集模式&#xff08;Replica Set&#xff09; 是一种互为主从的关系&#xff0c; Replica Set 将数据复制多份保存&#xff0c;不同服务器保存同一份数据&#xff0c;在出现故障时自动切换&#xff0c;实现故障转移。 此集群拥有一个主节点和多个从…...

面试笔记——MySQL(主从同步原理、分库分表)

主从同步原理 主从同步结构&#xff1a;主库负责写数据&#xff0c;从库负责读数据&#xff0c;如图—— MySQL主从复制的核心就是二进制日志&#xff08;BINLOG&#xff09;&#xff0c;它记录了所有的 DDL&#xff08;数据定义语言&#xff09;语句和 DML&#xff08;数据操…...

面试题2.0

目录 css 动画 深拷贝和浅拷贝 ES6新特性 事件循环 vue-router原理 flex布局 session和local storage分别是用来干嘛的&#xff1f; http状态码 原型链 虚拟dom vuex的五个属性 vue路由跳转的四种方式 vue生命周期 link和import的区别 GET 与 POST 的区别 fle…...

【剑指offer】53. 最小的k个数(java选手)(优先队列+快排+快速选择)

题目链接 题目链接 力扣题目链接 题目描述 输入 n个整数&#xff0c;找出其中最小的 k 个数。 注意&#xff1a; 输出数组内元素请按从小到大顺序排序; 数据范围 1≤k≤n≤1000 样例 输入&#xff1a;[1,2,3,4,5,6,7,8] , k4 输出&#xff1a;[1,2,3,4] 题目分析 排序算法…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...