ip-协议

文章目录

  • 1. 网络层
  • 2. `ip`协议
    • 2.1 `ip`协议格式
    • 2.2 网段划分
      • 基本概念
      • 网段划分的两种方式
      • 为什么要网段划分?
      • 特殊的IP地址
      • IP地址数量不足
    • 2.3 私有IP与公网IP
    • 2.4 路由
  • 3. IP的分片与组装
      • 为什么要分片与组装?
      • 如何分片?
      • 如何组装?

1. 网络层

IP地址是一个32位的整数,再细致一点,它是由若干位网络号 + 主机号构成,IP = 网络号 + 主机号

一台主机发出的报文,经过多重路由,为什么就能到达指定的主机?这是因为报文中填写了目的IP地址,有了IP地址,报文就能到达目的地址

这表明IP真正的意义在于提供了一种"能力":将报文跨网络送至另一台主机的能力

所谓具有某种能力,指的是有很大概率做成某件事,但不一定百分百做成,也就是不一定"可靠",我们需要的是不仅仅具有将报文跨网络送至另一台主机的能力,还要"可靠"的送至,谁提供可靠呢?---- tcp协议

因此,tcp协议提供报文传输的策略,ip协议提供报文传输的能力、具体的执行,两者合作,我们的主机就具有将报文可靠的跨网络送至另一台主机的能力

2. ip协议

2.1 ip协议格式

在这里插入图片描述

  1. 如何将报头与有效载荷分离?

    tcp类似,ip协议的报头也有4位首部长度,每1bit位代表4字节,可表示范围[0, 60]字节;减去固定的20字节,就是选项,剩余的就是数据

  2. 如何分用?

    封装时,网络层知道上层是tcp/udp向下交付的,在8位协议字段中填入,解包时读取,就得知应该交给上层哪个协议了

其他字段:

  • 4位版本:通常是ipv4或者ipv6
  • 8位服务类型(TOS):从最小延迟、最大吞吐量、最高可靠性、最小成本中选取一个,报文传输时会根据要求选择不同的路线,一般telnet/ssh选择最小延迟,ftp选择最大吞吐量
  • 16位总长度:ip协议不仅有4位首部长度,还有自身的总长度字段
  • 8位生存时间(TTL):网络是一个相当复杂的结构,难免有时会出现漏洞,报文在传输时可以会路由循环,每当报文经过一个路由,TTL–,如果路由器收到TTL为0的报文,就直接丢弃

我们通常用源端口、目的端口、源IP、目的IP、协议号这样的五元组,来标识一个网络通信

2.2 网段划分

基本概念

IP地址是一种有用且有限的资源,不同国家、组织、地区拿到IP地址后,就需要对它进行合理的划分;因此,我们所见的IP地址都是被精心设计过的

IP地址 = 网络号 + 主机号,处在同一网络的IP主机,它们IP地址的网络号一定相同

路由器是一种设备,通常跨两个网络,也就意味着它最少有两张网卡,也就有两个IP地址

它不仅仅能对报文进行路由,还能构建子网,给每台连接到自身子网中的主机动态分配IP地址(DHCP技术)

网段划分的两种方式

第一种是将IP地址分为5类

在这里插入图片描述

不同类别的网段容纳主机数不同,A类容纳的主机数过多,导致大部分可能没有使用,被浪费了

大部分人都申请B类,随着互联网的发展,IP地址又逐渐够用了,因此,这种网段划分的方式不常用了

第二种是CIDR方案

引入子网掩码,是一个32位的整数,通常前面若干bit位全1,代表网络号,后面全0~全1代表主机号

将IP地址 & 子网掩码 = 网络号

在这里插入图片描述

为什么要网段划分?

在学校中,我们的学号也是被划分过的,比如前几位代表院号,后几位代表学号,接下来以一种简化的模型来帮助理解

在这里插入图片描述

其中,正方形代表每个院的负责人,它们之间一定处在一个群,且互相知道对方的院号

此时你走在路上,捡到一张学生证,上面的学号是0100 0011,你非常热心,想要归还这张卡给本人,无奈整个学校人太多,总不可能找人一一匹对

于是,你将学号与你们的院号进行按位与,得到0100 0000,由此你能知道,该学生一定不是你们院的,具体是哪个院的,你也不知道,你只能把学生证给你们院的负责人

负责人一定知道每个院的负责人是谁,也知道每个院的院号,根据按位与的结果,判断学生一定是计院的,于是就交给计院的负责人,计院的负责人在它们的计院群通知,于是,学生证也就物归原主了

在整个过程中,每个院就是一台路由器,学生证就是要发送的报文

如果没有对每个院进行合理的划分,我就需要找遍学校里的所有人,才能将学生证物归原主;有了划分之后,只要进行一次按位与操作,就能排除其他所有院,只剩一个院,大大提高了查找的效率

因此,网段划分的真正意义:网段划分后,未来就能提高报文查找到目标主机的效率

特殊的IP地址

  • 主机地址全为0,表示网络号,代表整个局域网
  • 主机地址全为1,表示广播地址,用于向同一局域网内的所有主机发送报文

IP地址数量不足

随着互联网的发展,目前IP地址的数量早已严重不够用了,虽然使用子网掩码的划分方案(CIDR)缓解了IP地址不足的现状,但并没有提高IP地址的数量上限,不过也出现了解决方案

  1. 动态IP地址分配(DHCP):路由器能为接入到自身构建子网的主机动态分配IP地址,也就是说不同时间段接入同一局域网的主机IP地址可能相同
  2. NAT技术
  3. ipv6

2.3 私有IP与公网IP

想要上网,得先有网,也就是得先组建网络,而组建网络离不开各种网络基础设施的建设:将光纤入户、站台建设等等,所有的这些我们貌似不需要做,我们好像只需要买台路由器就有网络了,这是因为这些工作已经有人帮我们做了

早在几十年前,我们国家政府就开始网络基础设施的建设了,也就有了三大运营商,它们帮我们做好了建好了基础设施;基础设施做好了,家家户户才能上网,各种互联网公司才有了生存的土壤

根据RFC 1918的规定,组建局域网的IP地址只能是这3种:

  1. 10.*(前8位是网络号)
  2. 172.16.* ~ 172.31.*(前12位是网络号)
  3. 192.168.*(前16位是网络号)

其余的IP地址都是公网IP地址

  • 私有IP地址不能出现在公网中
  • 不同私网(子网/局域网/内网)中,私有IP地址可以重复
  • 虽然存在公网,但我们都必须先接入到指定的私网中
  • 我们每个人都处于私网中

网络世界 = 私网 + 公网

在这里插入图片描述

每台路由器能构建子网,路由器本身通常是该子网中第一个主机,因此它有一个LAN口IP地址;同时,路由器又在其他路由器构建的子网中,在该子网中,它是一台主机,因此它也有一个WAN口IP地址

假设报文由私网上的一台主机发出,主机一定知道自身的网络号,发现目的地址不是自己处在的网络,将报文交给家用路由器,由于私有IP地址不能出现在公网中,因此会将源IP地址替换为家用路由器的WAN口IP地址

家用路由器查自身路由表,发现没有与之对应的网络号,交给运营商路由器,同时将源IP地址替换为运营商路由器的WAN口IP地址

运营商路由器处于公网中,能直接发送报文到目标主机

在这里插入图片描述

上述过程中,源IP地址的替换称为NAT转换,只在进出私网时才会做转换

直接与公网相连的路由器也称为出入口路由器

可以看到,报文都是交给运营商进行转发的,这也是为什么我们手机欠费就没网络的原因,运营商能直接将你的报文丢弃,不做NAT转换和转发

私网我们很好理解,但对于公网,上面只是简单带过,究竟什么是公网呢?下面以一种简化的模型举例

在这里插入图片描述

在上述模型中,国家之间的网络、省份之间的网络、市之间的网络、市内各种公司之间的网络就是公网

2.4 路由

在这里插入图片描述

每个工作在网络层的设备都有一张路由表,每台主机也不例外,这是云服务器上的路由表

当报文转交给路由器时,路由器会根据路由表来查询报文应该往哪走

上述例子中,一共有3个条目,从下往上看,将报文中的目的IP地址与条目中的genmask做&运算,如果与destination相同,则交给gateway地址的主机

其中flags如果有G,则表示下一跳的地址是某个路由器的地址(gateway),如果没有G,则表示目的地址与本机接口相连,直接向Iface的接口发送报文即可

如果都匹对完了,还是没有,则进行缺省路由,将报文送至上层路由器

3. IP的分片与组装

ip协议的报头字段中,我们还剩三个字段没讲,它们主要用来进行IP的分片和组装

在这里插入图片描述

为什么要分片与组装?

在这里插入图片描述

对于传输层,它将数据交给网络层,要求网络层将数据送至对方主机,网络层的确有这个能力,但数据链路层具有MTU的限制,那只好由网络层自己将报文进行分片,到达对方主机再进行组装

需要注意的是,报文被分片后,如果在传输过程中丢失了任意一个分片,则认为整个报文丢失,对方的网络层收到分片后不会将剩余的向上交付,而是等待tcp超时重传,IP再进行分片

那么问题来了,一个报文分成多片发送,丢包概率高,还是作为一个整体发送,丢包概率高?答案肯定是前者,也就是说分片后,报文的丢包概率更高;因此,IP分片不应该称为主流做法,应当避免分片

这时,网络层就对传输层说了,如果你给我交付的数据过大,我必须得进行分片,这样会导致丢包概率变大,从而你就要超时重传,对双方都是不利的;传输层听完后,细想好像确实如此,于是制定了策略,控制一个报文的大小

,该策略是什么呢?滑动窗口,在很多场景下,我们看到tcp滑动窗口内的数据都是被分成一块一块的,为什么不合并起来,一并发送呢?原因就是为了减少IP的分片

上面解释了三个问题:为什么要分片?为什么不想分片?如何做到不分片?

如何分片?

在这里插入图片描述

  • 16位标识:标识IP报文的唯一性,如果报文被分片了,则该报文的每片16位标识都相同

  • 3位标志:

    第一位保留(保留的意思是当前不用,但不代表之后不会用)

    第二位为1表示禁止分片,此时如果报文超过MTU,IP层就会直接丢弃该报文、

    第三位表示更多分片,如果报文进行了分片,则最后一片该位为0,其他片该位为1

  • 13位偏移量:

    如果每分片,为0

    如果分片了,则为当前分片的有效载荷在整个报文有效载荷中的偏移量,必须为8的倍数

IP报文的总长度可能16位的,最大可能2^16字节,此时用13位偏移量来表示后面分片的偏移量,是存不下的,因此,13位偏移量真实存的值是偏移量 >> 3,这也是为什么偏移量必须是8的倍数

如果报文长度超过MTU,IP进行分片,每个分片最多1500字节,这里拿总的报文长度为3000字节举例

在这里插入图片描述

如何组装?

  1. 如何判断收到的报文是否分片?

    假设报文时分片的,则

    在这里插入图片描述

    于是,如果 (更多分片为0 && 片偏移量为0) ----> 没有分片的报文

    更多分片为1 || 片偏移量不为0 ----> 分片报文的其中一片

  2. 如何判断分片的报文收全了?

    将报文按片偏移量升序排序,下个分片中的片偏移量 = 当前报文的片偏移量 + 有效载荷的长度,逐次检查,直到确认有更多分片为0的分片

  3. 确认收全后,将每个分片中的报头去掉,只留下一个报头,逐次组装起来,交付给上层

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ECharts散点图-气泡图,附视频讲解与代码下载

引言: ECharts散点图是一种常见的数据可视化图表类型,它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图,包括图表效果预览、视频讲解及代码下载,让你轻松掌握…

Jmeter录制https请求

jmeter 5.5版本,chrome浏览器 1、首先添加Test Plan-Thread Group-HTTP(S) Test Script Recorder 2、设置HTTP(S) Test Script Recorder界面的Port(监听端口,设置浏览器代理时需要与这里保持一致)、HTPS Domains(录制…

【Git 常用操作:pull push】

Git 基本概念 Git 是一个先进的开源的分布式版本控制系统,常用于管理工作内容、项目代码等功能。 Git 工作流程 图片来源:https://www.runoob.com/git/git-basic-operations.html 说明: workspace:工作区staging area&#xff…

LLaMA-Factory GLM4-9B-CHAT LoRA 指令微调实战

🤩LLaMA-Factory GLM LoRA 微调 安装llama-factory包 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git进入下载好的llama-factory,安装依赖包 cd LLaMA-Factory pip install -e ".[torch,metrics]" #上面这步操作会完成…

基于kraft部署kafka集群

kafka介绍 Apache Kafka 是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。 Kafka是一个拥有高吞吐、可持久化、可水平扩展,支持流式数据处理等多种特性的分布式消息流处理中间件,采用分布式…

Day13 苍穹外卖项目 工作台功能实现、Apache POI、导出数据到Excel表格

目录 1.工作台 1.1 需求分析和设计 1.1.1 产品原型 1.1.2 接口设计 1.2 代码导入 1.2.1 Controller层 1.2.2 Service层接口 1.2.3 Service层实现类 1.2.4 Mapper层 1.3 功能测试 1.4 代码提交 2.Apache POI 2.1 介绍 2.2 入门案例 2.2.1 将数据写入Excel文件 2.2.2 读取Excel文…

Web前端基础知识(三)

表单的应用非常丰富&#xff0c;可以说&#xff0c;每个网站都会用到表单。下面首先介绍表单中的form标签。 --------------------------------------------------------------------------------------------------------------------------------- <form></form&g…

NLP中的神经网络基础

一&#xff1a;多层感知器模型 1&#xff1a;感知器 解释一下&#xff0c;为什么写成 wxb>0 &#xff0c;其实原本是 wx > t ,t就是阈值&#xff0c;超过这个阈值fx就为1&#xff0c;现在把t放在左边。 在感知器里面涉及到两个问题&#xff1a; 第一个&#xff0c;特征提…

docker安装MySQL--宝塔面板操作版

记录 1 在centos中安装宝塔面板 参照宝塔面板官方网页上步骤进行操作&#xff0c;然后登录网页地址 成功后直接拉取 成功后可以在本地镜像中看到 2 创建配置文件 cd /home/mysql/conf vim my.cnf [rootplmomn-gw conf]# cat /home/mysql/conf/my.cnf [client] #设置客户端…

C++简明教程(3)(初识VS)

一、编程工具大揭秘——IDE 当我们准备踏入 C 编程的奇妙世界时&#xff0c;首先要认识一个重要的“魔法盒子”——集成开发环境&#xff08;IDE&#xff09;。IDE 就像是一个全能的编程工作室&#xff0c;它把我们写代码所需要的各种工具都整合到了一起&#xff0c;让编程这件…

电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决

电脑蓝屏是让许多用户头疼的问题&#xff0c;其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法&#xff0c;能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏&#xff0c;如金手指氧化、芯片…

分布式调度框架学习笔记

一、分布式调度框架的基本设计 二、线程池线程数量设置的基本逻辑 cpu是分时复用的方法&#xff0c;线程是cpu调度的最小单元 如果当前cpu核数是n&#xff0c;计算密集型线程数一般设为n&#xff0c;io密集型(包括磁盘io和网络io)线程数一般设置为2n. 计算密集型线程数一般设…

快速排序算法 -- 深入研究

一 . 快排性能的关键点分析 快排性能的关键点分析 : 决定快排性能的关键点是每次单趟排序后 &#xff0c; key 对数组的分割 &#xff0c; 如果每次选key 基本二分居中&#xff0c;那么快排的递归树就是颗均匀的满二叉树&#xff0c;性能最佳。但是实际中虽然不可能每次都是二…

ORA-65198 PDB clone 时 不能新加datafile 以及hang的一个原因

create pluggable database XX from SS keystore identified by "YYY" parallel 32 service_name_convert( _srv, _srv); 20TB 4小时 update /* rule */ undo$ set name:2,file#:3,block#:4,status$:5,user#:6,undosqn:7,xactsqn:8,scnbas:9,scnwrp:10,inst#:11,…

Android--java实现手机亮度控制

文章目录 1、开发需求2、运行环境3、主要文件4、布局文件信息5、手机界面控制代码6、debug 1、开发需求 需求&#xff1a;开发一个Android apk实现手机亮度控制 2、运行环境 Android studio最新版本 3、主要文件 app\src\main\AndroidManifest.xml app\src\main\res\layou…

HarmonyOS NEXT 实战之元服务:静态案例效果--- 日出日落

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …

一起学Git【番外篇:如何在Git中新建文件】

在介绍Git之前&#xff0c;我们需要了解一下如何在Git里添加、编辑和删除文件。 首先&#xff0c;需要使用文件编辑器进行文件的创建&#xff0c;常见的文件编辑器有以下几种&#xff1a; Vim&#xff1a;一种基于命令行的编辑器&#xff0c;功能强大&#xff0c;适合开发者和…

叉车作业如何确认安全距离——UWB测距防撞系统的应用

叉车在工业环境中运行&#xff0c;常常需要在狭窄的空间内完成货物的搬运和堆垛&#xff0c;这对操作员的技术水平和安全意识提出了极高的要求。传统的叉车作业依赖操作员的经验和视觉判断来确认安全距离&#xff0c;然而这种方式往往存在误差&#xff0c;特别是在视线受阻或光…

hi168大数据离线项目环境搭建

hi168大数据离线项目环境搭建 ## **1. 服务器准备**##### 1.1 创建集群应用节点 集群服务器使用“我的应用“中的Ubuntu22.04集群模版创建三个节点应用&#xff0c;并且进入“我的应用”中去修改一下节点名称&#xff08;node1对应master&#xff0c;node2对应hadoop1&#xf…

分布式专题(10)之ShardingSphere分库分表实战指南

一、ShardingSphere产品介绍 Apache ShardingSphere 是一款分布式的数据库生态系统&#xff0c; 可以将任意数据库转换为分布式数据库&#xff0c;并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。Apache ShardingSphere 设计哲学为 Database Plus&#xff0c;旨在…