网络层 IP协议(1)

前置知识

主机:配有IP地址,但是不进行路由控制的设备

路由器:既配置了IP地址,又能进行路由控制的设备

节点:主机和路由器的总称

IP协议主要完成的任务就是

地址管理和路由选择

地址管理:使用一套地址体系,将网络设备的地址描述出来

路由选择:一个数据报如何从源地址到目的地址

IP协议头格式

下面开始解释这里的含义

1.4位版本号

这里表示的是IP地址使用的是IPv4还是IPv6的地址

2.4位首部长度

这里就是和TCP报头一样,表示的是IP报头也是可变长的 (同样单位是4字节)

0-15 代表这里最大长度仍然是60字节

3.8位服务类型(TOS) 

分别是三位优先权字段(已弃用),一位保留位和四位TOS字段

这里的四个字段分别表示 最小延时 最大吞吐量 最高可靠性(相对TCP的可靠性还是有差距,意思位相对的最高可靠性)  最小成本 

这里相对不同的应用场景会使用不同的服务,像ftp这样的程序使用最大吞吐量比较重要

4.16位总长度

表示了IP数据报整体占用多少个字节

这里就并不是64KB的限制了,因为IP协议包含了拆包组包的功能

比如说一个相对大的TCP包这里分三个IP数据包装

到对端就会按照顺序组包

5.16位标识 3位标志 13位片偏移

之所以把它们放在一起说是因为它们彼此是有联系的,

在数据较大的情况下分包就会用到这三个表示

16位标识:表示几个IP数据包是同一个数据拆分而成

3位标志:一位标志着数据是否分包,一位标志着结束的标志,一位则作为保留位

13位片偏移:排序的依据,标志着分块的变量在原报文中的位置

6.8位生存时间(TTL)

表示着报文在传输过程中的最大生存时间,这里的时间并不是真正的时间,衡量单位是"次",就是一个报文在网络传输中传输了多少次还没有到达目的地址那么就将其丢弃,常见的生存时间为32/64次

为啥这么少的次数就能达到对方??

因为其增长的速度是指数级别的增长

7.8位协议

表示上层协议的类型,也就是传输层使用什么协议

TCP/UDP/KCP???

8.16位首部检验和  和之前一样,检验报文传输过程中是否发生了比特翻转

9.32位源地址和目标地址 

表示发送方和接收方的地址

10.选项  和之前一样可有可无

如何管理IP地址

最早是使用IPv4地址来描述一个IP地址的

IPv4地址本质上是一个32位整数

为了方便表示,我们使用点分十进制的方式来表示

例如 192.168.1.1 

通过三个点来讲32位分成四个部分,每个部分取值范围分别为0-255

总共能表示一个42亿左右大小的数字

实际上现在全球使用网络的终端设备远远超过了42亿,给每个人分配一个网络地址都不够

所以我们提出了如下的解决方案

1. 动态分配IP地址(治标不治本)

全世界的设备也不可能同一时刻上网,利用现有空闲的IP地址

2.使用Nat机制(网络地址映射) 仍然治标不治本

常用方案

这个机制将IP地址分为两个大类 私网IP 公网IP

私网IP

  10.*       192.168.*     172.16 - 172.31.*

其余的是公网IP

要求公网上的设备使用公网IP  

局域网之间使用私网IP,只需要保证局域网之间的内部IP不重复即可,不同的局域网之间的IP允许重复

由于上述的设定,就有一些限制

1.公网设备相互访问,没有限制

2.局域网内设备相互访问,没有限制

3.局域网设备访问其他局域网设备,不允许访问

4.局域网设备访问公网设备,就需要对局域网设备进行IP地址转换

5.公网设备访问局域网设备是不允许主动访问的

试想下面一个场景

我的电脑访问一下服务器,

此时源ip就是 192.168.2.10

目的IP就是1.2.3.4

一般路由器会带有两个地址

WAN口地址 :可能是局域网IP也可能是公网IP 这里假设为5.6.7.8

LAN口地址:往往是局域网IP

这里想从这个路由器发起转发,这里源IP就变成了5.6.7.8,目的IP不变

不是每个路由器都会替换

数据包到达服务器的时候,服务器感受到的IP就是5.6.7.8

进行了上述替换本质上就是一个公网IP能对应多个设备,就起到了节省IP的效果

此时主机abc三个想与外界访问都只能通过路由器

'

此时这个NAT机制使得发出去的数据的源ip替换了,那么服务器怎么找到替换前的IP呢??

试想一个这样的场景

此时在转换的时候路由器就会保存一个路由表来记录替换前的ip和替换后的ip

此时服务器发送报文的时候,如果找到对应的表项的时候,就可以转发回去了

'

如果同一个局域网多个设备访问一个服务器,形式还会更复杂

保存的就是

替换前ip  替换后ip 服务器ip 源端口  目的端口

192.168.1.10 5.6.7.8  1.2.3.4 9090   10000 

192.168.1.20 5.6.7.8  1.2.3.4   9090  20000

这就区分了两者

IP报头 + TCP 报头 + 应用层数据包

就可以让路由器收到响应后看传输层的目的端口来比对一下

万一局域网中的两个设备端口也相同??

此时路由器也会对端口号进行映射

将端口也进行替换,假设两个端口号都是10000

就会将两个进行替换 也许是 10001 10002

所以路由器也会修改传输层的报头 

总结:

大部分情况下,访问的服务器不同,此时使用端口号就能区分

少数情况下,访问的是相同的服务器,此时就可以映射不同的端口来区分

3.IPv6策略(根本解决问题)

将IP地址从32位增加成了128位

相当于变成了2^128 个地址

"给每粒沙子都分配一个地址"

迟迟没有完全落地  因为所有的硬件设备都得换,而且对体验提升不大

但是中国已经覆盖到70%,虽然使用率一般,但是防止了美国在IP地址上的垄断操作

避免美国直接给你断网

今天的分享就到这里,待续.....

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

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

相关文章

【LVGL源码移植】

LVGL源码移植 ■ LVGL源码移植一:下载LVGL源码二:修改LVGL文件夹1: 将这5个文件,复制到一个新的文件夹2: 简化文件,减少内存消耗(去除不必要的文件)3: 为了规范化,我们将下列文件进行重命名 三&…

git使用方法(简易版)

一、git使用过程 1.注册git账号,并新建一个仓库; http://t.csdnimg.cn/ePcsx可以参考链接 2.在电脑文件夹中,右键选择 Git Bash Here,输入git init(初始化仓库); git init - 初始化仓库。 Git 使用 git …

张维迎《博弈与社会》多重均衡与制度和文化(1)多重均衡问题

什么是多重均衡 我曾经在课堂上做过这样一个实验:随机选择男女两位同学参加一个选数字的游戏。游戏的基本规则为:每一个同学随机地从1到10十个数字中任意选择5个。如果两人选择的数字没有任何重复的话,则每人可以得到50元;如果两人…

Google Gemini Pro 国内版

Google Gemini Pro 国内版:【直达链接】 Google Gemini Pro 国内版 能力分类基准测试描述更高分数更好Gemini UltraGPT-4通用MMLU57个主题(包括STEM、人文等)的问题表示是90.0%86.4%(5-shot, 报告)推理Big-Bench Hard…

微信小程序(二十九)交互提示-界面加载框和提示框

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.showLoading加载框示范 2.showToast提示框示范 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"it…

音视频数字化(音乐CD)

上篇文章【音视频数字化(音频数字化)】我们聊了音频数字化原理,其中谈到了音乐CD,结尾也提到了一个小问题:“CD音质是最高吗?为什么?”不知道大家是怎么理解的。 其实CD质量只是“无损”存储,但是数字化标准只是“44.1kHz,16bit”,因此相对于现在,音质不能说最高。 …

故障诊断 | 一文解决,BP神经网络的故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,BP神经网络的故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

解决:IDEA无法下载源码,Cannot download sources, sources not found for: xxxx

原因 Maven版本太高&#xff0c;遇到http协议的镜像网站会阻塞&#xff0c;要改为使用https协议的镜像网站 解决方案 1.打开设置 2. 拿到settings.xml路径 3. 将步骤2里箭头2的User settings file&#xff1a;settings.xml打开&#xff0c;作以下修改 保存即可。如果还不行…

15. 三数之和(力扣LeetCode)

文章目录 15. 三数之和题目描述双指针去重逻辑的思考a的去重b与c的去重 15. 三数之和 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 …

全志H713红外IR遥控配置方法

篇头 全志H713 Soc是一颗 A53四核心&#xff0c;支持MAX 2GB DDR&#xff0c; 支持1920x1080P LVDS接口&#xff0c; 支持梯形校正功能的芯片&#xff0c;非常适合用于开发投影仪&#xff0c;尤其是低成本的LCD投影。本文详细介绍此平台&#xff0c;配置一个新的红外遥控器的方…

【无刷电机学习】电流采样电路硬件方案

【仅作自学记录&#xff0c;不出于任何商业目的】 目录 AD8210 INA282 INA240 INA199 AD8210 【AD8210数据手册】 在典型应用中&#xff0c;AD8210放大由负载电流通过分流电阻产生的小差分输入电压。AD8210抑制高共模电压(高达65V)&#xff0c;并提供接地参考缓冲输出&…

gtkmm xml ui 例子(from string)

文章目录 前言来看一个从字符串中生成UI的例子 前言 glade生成的xml格式不被gtkmm4支持, 需要作修改 来看一个从字符串中生成UI的例子 #include <gtkmm/application.h> #include <gtkmm.h> #include <iostream> using namespace std;class ExampleWindow :…

51单片机编程应用(C语言):独立按键

目录 1.独立按键介绍 2.独立按键控制LED亮灭 1.1按下时LED亮&#xff0c;松手LED灭&#xff08;按一次执行亮灭&#xff09; 1.2首先按下时无操作&#xff0c;松手时LED亮&#xff08;再按下无操作&#xff0c;所以LED亮&#xff09;&#xff0c;松手LED灭&#xff08;松手时…

音频几个相关概念及心理声学模型

系列文章目录 音频格式的介绍文章系列&#xff1a; 音频编解码格式介绍&#xff1a;音频几个相关概念及心理声学模型 https://blog.csdn.net/littlezls/article/details/135499627 音频编解码格式介绍&#xff1a;音频编码格式介绍 https://blog.csdn.net/littlezls/article/d…

RabbitMQ快速上手

首先他的需求实在什么地方。我美哟明显的感受到。 它给我的最大感受就是脱裤子放屁——多此一举&#xff0c;的感觉。 他将信息发送给服务端中间件。在由MQ服务器发送消息。 服务器会监听消息。 但是它不仅仅局限于削峰填谷和稳定发送信息的功能&#xff0c;它还有其他重要…

标准化编程系列(常用模式状态介绍)

任何事情任何编程都是有方法可循的,我们所要做的工作就是在看似没有规律的运行中,发现规律总结一般性的方法。这篇博客主要介绍标准化编程相关的基础知识,编程化编程离不开大家扎实的编程基本功,所以在学习标准化的同时,大家需要提升对于子程序,模块FB 、FC等的应用知识,…

【Linux网络编程一】网络基础(网络框架)

【Linux网络编程一】网络基础&#xff08;网络框架&#xff09; 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点&#xff1a;网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装&…

HiveSQL题——数据炸裂和数据合并

目录 一、数据炸裂 0 问题描述 1 数据准备 2 数据分析 3 小结 二、数据合并 0 问题描述 1 数据准备 2 数据分析 3 小结 一、数据炸裂 0 问题描述 如何将字符串1-5,16,11-13,9" 扩展成 "1,2,3,4,5,16,11,12,13,9" 且顺序不变。 1 数据准备 with da…

【Windows】用来替代令人发指的Windows自带图片浏览器的一些免费软件

缘由&#xff1a;今天[2024.2.1] 使用"照片"打开图片时出现如下提示 如果是涉及到一些本地无法实现的功能&#xff08; 比如AI方面的图像处理 &#xff09;要去联网我无可厚非&#xff0c; 但是我只是TMD查看图片而已&#xff0c;就想偷偷上传我的图片就过分了&…

【Tomcat与网络6】 Tomcat是如何扩展Java线程池的?

目录 1.Java 的线程池 2.Tomcat 的线程池 学习Tomcat的时候&#xff0c;有很多绚丽的技术值得我们学习&#xff0c;但是个人认为Tomcat的线程池扩展是最值得研究的一个部分&#xff0c;线程池的应用太广了&#xff0c;也重要了&#xff0c;Java原生线程池的特征我相信很多人都…