[网络]TCP/IP协议 之 网络层IP协议(3)

文章目录

  • 一. IP协议报头
  • 二. NAT机制
  • 三. IP地址管理的基本规则
    • 1. 网段划分
    • 2. 特殊的IP地址
  • 四. IP路由选择

网络层主要做的事情:
1.路径规划(路由器选择)
2.地址管理

一. IP协议报头

在这里插入图片描述
1)4位版本
指定IP协议的版本, 4 => ipv4 , 6 => ipv6

2)4位首部长度
4位bit能表示0-15, 单位也是4字节, 所以IP报头最长60字节, 最短20字节

3)8位服务类型(TOS)
type of service, 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本. 这四者相互冲突, 只能选择⼀个.只能有一个置为0

  1. 16位总长度
    整个IP数据包的长度, 报头 + 载荷, 最大64KB
    但是TCP协议是不限制数据包大小的, 所以IP自身实现了拆包组包这样的功能, 如果携带的载荷超出长度上限, IP就会自动拆分成多个数据包, 每个数据包携带一部分, 发送到对方之后, 再拼接好
    (IP并不关心传输的内容是啥应该怎么分, 只是粗暴地分成多份)
    在这里插入图片描述

在这里插入图片描述
IP数据包会根据上述三个属性进行拆包组包
16位标识: 用来区分哪些数据包要合并, 用来区分哪些数据包是一组的
3位标志位: 只有两个位有效
一个用来表示, 该数据包是否触发了拆包, 是否需要组包
另一个用来表示, 结束标记, 当前包就是最后一个需要组包的部分
13位片偏移: 若干个要拼接数据包的先后顺序

6)8位生存时间(TTL)
IP数据包要在网络上转发, 但是转发的次数是受限的
一个IP数据包, 初始情况下, 有一个TTL的值(32/64/128…这样的整数)
这个次数每经过一个路由器的转发, 就要 -1, 减到0, 这个数据包就会被丢弃

7)8位协议
这里就描述了载荷部分, 是哪种协议的数据包, 再分用的时候, 要交给上层的哪个协议, 都是有明确声明的

传输层 => 应用层: 端口号区分
网络层 => 传输层: 报头中有这个 8位协议 字段, 不同的取值就对应不同的传输层协议
数据链路层 => 网络层: 报头中的类型字段, 用来区分是IP数据包, 还是其他的

8)16位首部校验和
只针对IP首部进行校验, 载荷部分不关心

9)在这里插入图片描述
一个IP地址, 是一个32位的整数, 能表示的范围是 0-42亿6千万

二. NAT机制

原则上来说, 不同的设备, IP地址应该是唯一的, 显然这个数字, 在移动互联网的时代, 是不够用的
IP地址不够有, 有两个方案:

方案一: 动态分配IP地址
某个设备, 上网就分配IP, 不上网就不分配IP
这样的办法, 没法从根本上解决问题

方案二: NAT机制, 网络地址映射
首先, 把IP地址, 分成两大类:
公网IP(广域网使用的) 和 私网IP(局域网内部使用的)

私网IP:
10.*
172.16-172.31.*
192.168.*

私网IP允许在不同的局域网中重复, 但公网IP是唯一的

那么设备之间的通信就分成了下述几种情况:
1)同一个局域网内部, 设备之间通信
由于一个局域网内部设备之间的IP是不能重复的, 此时这些数倍都能正常相互交互

2)广域网设备和广域网设备之间通信
要求广域网中的设备IP本身就是唯一的

3)局域网1中的设备A尝试访问局域网2中的设备B
这种情况是不允许访问的!!

如果需要进行上述操作, 往往需要搭配广域网中的服务器, 进行数据转发

4)广域网设备主动访问局域网设备
这种情况是不允许访问的!!

5)局域网中的设备主动访问广域网设备
这个过程中, NAT机制就开始发挥作用了
(我们为了简化过程, 省去了中间结点)
在这里插入图片描述

此时的运营商路由器, 就可以认为是一个NAT设备, 它就会对中间经过的数据包, 进行网络地址转换
当内网设备经过运营商路由器访问外网的时候, 就会把IP数据包中的源IP, 替换成他自己的IP
目的就是让自己的外网IP, 取代之间的内网IP
在这里插入图片描述

此时这个数据包到达cctalk服务器之后, cctalk就会看到一个5.6.7.8这样的设备给他发的一个请求, 但是cctalk对于我的电脑的内网ip,是一无所知的
这样的一个运营商路由器, 一般是按片区的, 这个运营商服务器的局域网中的几千台内网设备, 都是通过同一个外网IP, 在公网上进行传输的
你的电脑插到哪个路由器上, 你的私网IP就是由哪个路由器给你分配的

我们上网上搜索IP查询, 查到的就是你公网ip地址, 就是你运营商服务器的ip地址
在这里插入图片描述

现在cctalk服务器要返回给我相应的数据, 此时cctalk构造的数据包:
在这里插入图片描述
这个数据包就会返回给运营商路由器
在运营商路由器内部, 维护了一个"映射关系"
记录当前这个对应的请求时从哪个内网设备发过来的
从而把目的IP替换回最初的内网IP
在这里插入图片描述
查询到结果后, 就把IP和端口替换过来了
在这里插入图片描述
如果此时, 我们家的另一台电脑B也要访问cctalk(和我的电脑A同一个运营商路由器)
在这里插入图片描述
此时路由器就会将私网IP改成公网IP
在这里插入图片描述

此时站在cctalk的角度, 虽然这两个数据包来自同一个IP, 但是是不同的端口号, 就能够根据端口号来区分要把数据交给哪个客户端
cctalk返回的数据包:
在这里插入图片描述
这时在运营商路由器中, 就会维护这样的表:
在这里插入图片描述
此时, 运营商根据表, 就能找到私网IP
在这里插入图片描述
这样, 数据就能找到对应的主机啦
如果碰巧A和B的cctalk端口号相同, 那么运营商就会在映射表中将端口号也进行修改, 修改成唯一的端口号, 为了让服务器进行区分

注意: 中间结点的路由器, 有可能也是没有公网IP的, 但是也可以NAT, 直到找到有公网IP的路由器, 才能访问服务器
我们的私网IP, 是路由器提供的, 路由器有一个功能DHCP, 可以分配IP地址

NAT机制, 一个公网ip就可以表示很多个主机, 一定程度上解决了IP不够用问题
但是, 也并未从根本上解决问题

方案三:ipv6
ipv6引入了更长的字节数来表示IP地址, 用16个字节, 128位来记录
可以表示的范围就超级超级大了
足以给地球上每一粒傻子分配唯一一个IP!!!

但是, 我们当前的版本ipv4和ipv6不兼容!!!
我们大家用的路由器, 交换机, 网卡…各种设备, 都支持ipv4
如果要升级成ipv6, 就要更换所有的设备
况且ipv6从来没有使用过, 存在一定的风险
谁都不愿意花钱冒险!!

三. IP地址管理的基本规则

1. 网段划分

同一个局域网的主机, 要按照一定的规则分配IP地址
把一个IP地址分成两个部分
前半部分, 为网络号 => 标识局域网
后半部分, 为主机号 => 区分同一个局域网中的不同主机

同一个局域网内部, 主机之间的IP, 网络号相同, 主机号不同
局域网之间, 网络号可以相同, 但是相邻的两个局域网网络号不能相同(同一个路由器, wan口和lan口处于两个不同的局域网)

子网掩码:
32位整数, 左半部分都是1, 右半部分都是0
1就表示网络号, 0就表示主机号
在这里插入图片描述
(默认网关: 是路由器的LAN口IP)

240的二进制位1111 0000, 所以我的电脑前28位表示网络号, 后4位表示主机号, 可以直接写成28当做子网掩码
也就是说, 和我用同一个局域网的设备的IP地址, 一定是172.20.10.0-15

我们的电脑, 网线连在了路由器的lan口, 路由器的WAN口连上一层的路由器的lan口
网线的两端, 不管是WAN口还是lan口, 网络号是相同的
同一个路由器的WAN口和LAN口, 属于不同的局域网
在这里插入图片描述

上古时期, 还存在一种网段划分方式, 但是现在已经没有了, 但是还存在教科书中
在这里插入图片描述
这个体系下, 没有子网掩码, 具体多少位是网络号多少位是主机号都是写死的, 硬性规定

2. 特殊的IP地址

主机号全为0:
这样的IP表示网段, 不应该分配给具体的主机
主机号全为1:
这样的IP, 表示广播IP, 往广播IP上发送数据, 此时, 就会发送给局域网中的所有设备
TCP不支持广播, UDP支持, 因为广播地址不是一个真实的设备地址, 无法建立连接
广播的一个应用场景: 设备发现
例如: 手机投屏
投屏, 都是要求你的手机和电视在同一个局域网中
此时, 当你点击投屏. 手机会通过给局域网广播地址, 发送一个探测数据包, 局域网内部, 支持投屏的设备, 就会给出响应, 告知一些相关信息, 此时手机就能展示出投屏设备列表
127. :*
这样的地址, 称为环回IP(loopback)
往这个IP中发送的数据, 就是自己来接收, 即使你的电脑不联网, 也是能使用的

四. IP路由选择

从源IP到目标IP, 中间要经过许多的路由器
每一台路由器, 都无法知道整个网络的全貌, 但是可以知道它附近的网络设备的情况是咋样的(它的朋友)
所以对于路由器来说, 在转发数据的时候, 无法一下就知道, 目的IO所对应设备该如何到达, 只能通过"启发式"“探索式"方式, 逐渐找到最终的目标
当路由器收到数据的时候, 就会根据目标IP, 查询路由表, 看看路由表中是否存在
如果存在,直接按照目标位置继续转发即可
如果不存在, 就会从朋友中, 挑选一个最"神通广大"的朋友, 把这个数据交给她
这个"最神通广大"的朋友, 就是指路由表中的"下一跳表项”, 就牵扯到了"路由表生成算法", 我们不必关心

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

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

相关文章

Linux bash脚本本地开发环境(Git Bash)配置

参考资料 VSCode: Windows 下配置 VSCode运行shellVSCodeを使用したシェルスクリプトの開発環境作成 目录 一. 必备VSCode插件二. 插件配置说明2.1 Bash IDE2.2 Code Runner2.3 shell-format 一. 必备VSCode插件 Bash IDE 该插件为 Bash 脚本提供了一些实用的开发工具和功能&…

如何设置xshell关闭最后一个选项卡标签时不退出软件?

不知道你是否遇到这个问题,就是在使用xshell的时候,每次关闭最后一个选项卡标签的时候,xshell软件默认就退出了,好多次我都只是想要关闭,而非退出,所以该如何设置,才能到我们的预期的效果呢&…

人工智能GPT____豆包使用的一些初步探索步骤 体验不一样的工作

豆包工具是我使用比较频繁的一款软件,其集合了很多功能。对话 图像 AI搜索 伴读等等使用都非常不错。电脑端安装集合了很多功能。 官网直达:豆包 使用我的文案创作能力,您可以注意以下几个技巧: 明确需求: 尽可能具…

云计算和虚拟化技术 背诵

https://zhuanlan.zhihu.com/p/612215164 https://zhuanlan.zhihu.com/p/612215164 云计算是指把计算资源、存储资源、网络资源、应用软件等集合起来,采用虚拟化技术 ,将这些资源池化,组成资源共享池,共享池即是“云”。 云计算…

supermap iclient3d for cesium中entity使用

目标将西南石油大学部分区域围起来,然后引个标签显示名称,最后弄个飞机绕学校飞(这个时间有点晚了,明天弄) 围墙: wall:{positions:Cesium.Cartesian3.fromDegreesArrayHeights([104.173,30.822,500,104.178,30.837,500,104.19,3…

Qt-QPushButton按钮类控件(22)

目录 描述 使用 给按钮添加图片 给按钮添加快捷键 添加槽函数 添加快捷键 添加组合键 开启鼠标的连发功能 描述 经过上面的一些介绍,我们也尝试的使用过了这个控件,接下来我们就要详细介绍这些比较重要的控件了 使用 给按钮添加图片 我们创建…

局域网windows下使用Git

windows下如何使用局域网进行git部署 准备工作第一步 ,ip设置设置远程电脑的ip设置,如果不会设置请点击[这里](https://blog.csdn.net/Black_Friend/article/details/142170705?spm1001.2014.3001.5501)设置本地电脑的ip:验证 第二步&#x…

下载chromedriver驱动

首先进入关于ChromeDriver最新下载地址:Chrome for Testing availability 进入之后找到与自己所匹配的,在浏览器中查看版本号,下载版本号需要一致。 下载即可,解压,找到 直接放在pycharm下即可 因为在环境变量中早已配…

两个人群填充参考(CHN100K和NARD)

分别是中国人群和东北亚人群的填充参考,测试了下,中国人群的参考注册还是相对友好的,没有像有些网站一样严格限制。东北亚的没有测试,两个数据库的特点都是包含了少数民族,研究朝鲜或蒙古族或其他民族的同学&#xff0…

9.12 TFTP通信

客户端设计(仅供参考): 下载本质:读取服务器发送的数据包,写入到本地文件 上传本质:读取本地文件内容,发送给服务器。 1、建立菜单选项,上传和下载。 2、上传功能函数: …

java开发中间件学习记录(持续更新中~)

1 Redis 2JVM 3 java基础底层 4Mysql 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1:Redis 1.穿透 1.1缓存穿透 1.1.1布隆过滤器 1.2缓存击穿 2:击穿 1.3:缓存雪崩 1.4:双写一致 1.5.持久化(RDB,AOF) 1.6…

深入浅出Docker

1. Docker引擎 Docker引擎是用来运行和管理容器的核心软件。通常人们会简单的将其指代为Docker或Docker平台。 基于开放容器计划(OCI)相关的标准要求,Docker引擎采用了模块化的设计原则,其组件是可替换的。 Docker引擎由如下主…

k8s中的存储

目录 一 configmap 1.1 configmap的功能 1.2 configmap的使用场景 1.3 configmap创建方式 1.3.1 字面值创建 1.3.2 通过文件创建 1.3.3 通过目录创建 1.3.4 通过yaml文件创建 1.3.5 configmap的使用方式 1.3.5.1 使用configmap填充环境变量 1.3.5.2 通过数据卷使用c…

YOLOv10改进系列,YOLOv10颈部网络SPPF替换为FocalModulation

摘要 焦点调制网络(简称FocalNets),其中自注意力(SA)完全由焦点调制模块取代,用于在视觉中建模标记交互。焦点调制包括三个组件:(i)焦点情境化,通过一堆深度卷积层实现,从短到长范围编码视觉上下文,(ii)门控聚合,选择性地将上下文聚集到每个查询标记的调制器中…

词嵌入(二):基于上下文窗口的静态词嵌入(从NNLM、CW模型谈到基于层次Softmax、负采样的Word2Vec模型)

文章目录 一、经典神经语言模型(A Neural Probabilistic Language Model)二、C&W模型 (Collobert and Weston, 2008)2.1 文章背景2.2 模型架构(词向量的表示)2.2.1 Lookup-Table Layer(查找表)2.2.2 TD…

基于单片机的风机故障检测装置的设计与实现(论文+源码)

1 系统总体设计方案 通过对风机故障检测装置的设计与实现的需求、可行性进行分析,本设计风机故障检测装置的设计与实现的系统总体架构设计如图2-1所示,系统风机故障检测装置采用STM32F103单片机作为控制器,并通过DS18B20温度传感器、ACS712电…

VMware Fusion虚拟机Mac版 安装Win10系统教程

Mac分享吧 文章目录 Win10安装完成,软件打开效果一、VMware安装Windows10虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机(步骤和Win11安装步骤类似,此处相同步骤处没换…

dll修复工具4DDiG DLL Fixer,解决电脑dll丢失问题

4DDiG DLL Fixer是一款专业的DLL修复工具,旨在解决Windows系统中各种DLL相关问题。该工具能够快速全面地扫描计算机,检测并修复导致程序功能异常的DLL错误。它支持一键式操作,自动扫描、识别和替换缺失或损坏的DLL文件,从而帮助用…

opencv之Canny边缘检测

文章目录 前言1.应用高斯滤波去除图像噪声2.计算梯度3.非极大值抑制4.应用双阈值确定边缘5.Canny函数及使用 前言 Canny边缘检测是一种流行的边缘检测算法,用于检测图像中的边缘。它通过一系列步骤将图像中的像素边缘突出显示出来,主要分为以下几个步骤…

★ C++进阶篇 ★ 多态

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第一章----多态 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 …