【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录

    • TCP/IP协议族
      • ARP
      • DNS
        • 标志字段:协商具体的通信方式和反馈通信状态
        • DNS查询问题的格式
        • 资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段
    • IP协议
      • IP服务的特点
        • 无状态
        • 无连接
        • 不可靠
      • IP头部结构
        • IPv4头部结构
        • IPv6头部结构
        • IPv6扩展头部
      • IP分片
        • 头部信息
        • 例子:携带ICMP报文的IP数据报被分片
      • IP路由
        • IP模块工作流程
        • 路由机制
      • IP转发
      • 重定向

TCP/IP协议族

见上篇 【HarmonyOS学习日志(12)】计算机网络之TCP/IP协议族(一)-CSDN博客

ARP

实现任意网络层地址到任意物理层地址的转换。

主机向自己所在网络广播一个ARP请求,请求中包含目标机器网络地址,这个网络上的其他所有机器都会收到这个请求,但只有被请求的目标机器会应答一个ARP应答,其中包含自己的物理网址。

在这里插入图片描述

在该流程中,硬件类型定义物理地址类型,协议类型要表示要映射的协议的地址的类型,两个长度为硬件地址长度字段和协议地址长度字段。

操作则有四种:ARP的请求、ARP的应答,RARP请求和RARP的应答,分别对应的值为1234。

发送端填充除了目的端的以太网地址外的其他三个字段构建ARP请求并发送,而接收端发现该请求目的端的IP地址就是自己,所以就把自己的以太网地址填进去,然后交换这个目的端地址和两个发送端的地址,构建了ARP的应答然后返回,并且把操作的这个字段设置为2,ARP应答。

ARP维护者一个高速的缓存,包含着经常访问和最近访问的机器的IP地址到物理地址的映射。

DNS

域名服务,将机器域名转换成IP地址

DNS是一套分布式的域名服务系统。每个DNS服务器上存在大量的机器域名和IP地址的映射,并且是动态更新的

在这里插入图片描述

16位问题个数,16位应答资源记录个数,16位授权资源记录数目,16位额外资源记录数目这四个部分表示资源的记录数目。

标志字段:协商具体的通信方式和反馈通信状态

在这里插入图片描述

  • QR:查询/应答标志。查询报文(0),应答报文(1)
  • Opcode:定义查询和应答的类型。标准查询(0),反向查询(1),请求服务器状态(2)
  • AA:授权应答标志,仅由应答报文使用。授权服务器(1)
  • TC:截断标志,仅当DNS报文使用UDP服务时使用
  • RD:递归查询标志。迭代查询(0),递归查询(1)
  • RA:允许递归标志,仅由应答报文使用。DNS服务器支持递归查询(1)
  • Zero:未用,置0
  • Rcode:应答状态。无错误(0),域名不存在(3)
DNS查询问题的格式

在这里插入图片描述

32位的查询名包含16位的查询类型和16位的查询类

  • 查询名:以一定格式封装了要查询的主机域名。

  • 查询类型:表示如何执行查询操作。

    • A(1):获取目标主机的IP地址
    • CNAME(5):获得目标主机的别名。
    • PTR(12):反向查询。
  • 查询类:表示获取因特网地址(IP地址)

资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段

在这里插入图片描述

  • 32位域名:该记录中与资源对应的名字。
  • 16位类型:含义与DNS查询问题中对应字段相同。
  • ·16位类:含义与DNS查询问题中对应字段相同。
  • 32位生存时间:该查询记录结果可被本地客户端程序缓存多长时间。

IP协议

IP服务的特点

IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。

无状态

IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接受都是相互独立、没有上下文关系的。

这种服务最大的缺点就是无法处理乱序和重复的IP数据报,比如发送端发送出的第N个IP数据报可能比第N+1个IP数据报后到达这个接收端,在这两种情况下IP模块就无法检测到乱序和重重复,因为没有任何的上下文关系。接收端的IP数据模块只要接收到了完整的数据报就会将其数据部分交给上层协议。

上层协议看来是乱序的、重复的。面向连接的协议,比如TCP协议就能够自己处理乱序、重复的报文段。

无状态的服务优点也十分明显:简单、高效。

我们无需为保证通信的状态而分配一些内核资源,也无需每次传输数据的时候携带一些状态的信息。

无连接

IP通信双方都不长久地维持对方的任何信息,每次发送数据时都必须指定对方IP地址。

不可靠

IP协议不能保证IP数据报准确地到达接收端,只是承诺尽最大努力(best effort)

IP头部结构

IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。

IPv4头部结构

在这里插入图片描述

4位的版本号指定IP协议的版本(IPv4中的4)

4位头部长度是标识IP头部有多少个32位字也就是四字节

8位服务类型(TOS)包括一个3位的优先权字段,4位的TOS字段和一个保留的字段,保留字段必须要置0。4位的TOS字段分别表示最小延迟、最大吞吐量、最高可靠性和最小费用。

16位总长度是整个IP数据报的长度,因此IP数据报最大的长度单位是65535字节。但由于MTU的限制,数据报都会被分片传输。接下来的3个字段来标识如何进行分片。

  • 16位的标识字段是标识主机发送的每个数据报,初始值由系统随机生成,每发送一个数据报,值就+1
  • 3位的标志字段的第一位保留,第二位DF表示禁止分片,如果设置了这个位的话IP的这个模块就不会对数据报进行分片,在这种情况下如果IP数据报长度超过了MTU的话将会丢弃数据报并返回一个差错报文。
  • 13位片偏移是分片相对原始IP数据报开始处的偏移,实际的偏移值是该值左移三位也就是乘8之后得到的

8位的生存时间(TTL)是指数据包到达目的地址前允许经过的路由器的跳数。常见的数值是64,没经过一个路由就会被路由器减1,到0就会丢弃并返回一个差错报文,这样可以防止陷入路由循环.

8位协议用来区分上层的协议,其中ICMP是1,TCP是6,UDP是17。

16位头部校验和由发送端填充,接收端对其使用CRC的算法以检验头部是否损坏(仅检验头部)

32位的源端IP地址和目的端IP地址用来标识发送端和接收端。

选项字段是可变长的可选信息,最多包含4字节的可选选项包括:

  • 记录路由(record route):告诉数据报途径的所有路由器都将自己的IP地址填入头部的选项部分,这样就可以跟踪传输路径。
  • 时间戳(timestamp):告诉每个路由器都将数据报被转发的时间填入选项部分,以测量传输时间。
  • 松散源路由选择(loose source routing):制定一个路由器的IP地址列表,数据报发送过程中必须严格经过所有的路由器。
  • 严格源路由选择(strict source routing):与松散源路由选择相似,不过是数据报只能经过指定的路由器
IPv6头部结构

在这里插入图片描述

4位的版本号(version)指定了协议的版本,对于IPv6来说,其值是6。

8位的通讯类型(traffic class)指示数据流通讯类型或优先级

20位的流标签(flow label)是IPv6新增加的字段,对于某些对连接服务质量有特殊要求的通信,比如音频和视频的实时传输数据。

16位的净荷长度(payload length)是指IPv6扩展头部和应用程序之间的和,不包括固定的头部长度。

8位的下一位包头(next header):指出紧跟这个固定头部的头部类型,比如扩展头部或者某个上层协议头部。

8位的跳数限制(hop limit):与TTL相同。

IPv4地址一般使用点分十进制来表示的,而这个IPv6的这个地址是用16进制来表示的

IPv6扩展头部

可变长的扩展头部使得IPv6能支持更多的选项,并且很便于将来的扩展需要。它的长度可以是0,表示数据报没有使用任何扩展头部。一个数据报可以包含多个扩展头部,每个扩展头部的类型由前一个头部(固定头部或扩展头部)中的下一个字段指定。

在这里插入图片描述

IP分片

当IP数据报的长度超过帧的MTU时,它将被分片传输。

头部信息

在这里插入图片描述

头部中有三个字段提供了足够多的信息:数据报的标识、标志和片偏移。除了最后一个分片之外,其余分片都要置MF标志。此外每个分片的IP的头部的总长度字段都将设置为该分片的长度

例子:携带ICMP报文的IP数据报被分片

在这里插入图片描述

在这个例子里面长度是1501字节的IP数据报被拆分成了两个IP分片,其中一个IP分片的长度为1500字节,第二个IP分片的长度为21字节。那么每个IP分片都包含自己的IP的头部20字节,且第一个IP分片的IP头部被设置了MF标志,而第二个则没有设置该标志,因为它是最后一个分片。

原始的IP数据报中,IP头部的内容被完整的复制到了第一个IP的分片中,而第二个IP分片不包含ICMP的头部信息,因为IP模块重组该ICMP的报文的时候只需要一份信息就足够。

ICMP的报文的头部长度取决于报文的类型,变化范围非常的大

IP路由

IP路由决定发送数据报到目标机器的路径

IP模块工作流程

在这里插入图片描述

当IP模块接收到了来自数据链路层的IP数据报的时候,它首先对该数据报的头部做CRC的校验,确认无误后再分析具体信息。如果IP数据报头部设置了源站选路选项,则调用数据报转发子模块来处理数据报。如果IP数据报的头部中的目标IP就是本机的某个IP地址或者是广播地址,则该数据报就是发送给主机的。这个IP的模块就根据数据报头部中的协议字段来确定将派发给哪一个上层的应用(分用)。

如果IP模块发现这个数据报不是发送给本机的,也是调用转发子模块来转发出去。转发子模块首先检测子系统是否允许转发,不允许就丢弃,如果允许就执行一些操作,它交给IP数据报输出子模块。

IP模块实现了数据报路由的核心的数据结构是路由表,那么这个表按照数据报的目标的IP地址进行分类,同一个类型的IP数据报将被发往相同的下一跳路由器。

IP的输出队列存放的是所有等待发送的数据报,除了需要转发的数据报之外还包括封装了本机的上层数据的IP数据报。

路由机制

那么路由表是如何按照IP地址分类的?给定数据报的目标IP地址,它将匹配路由表中的哪一项?

路由机制:

  1. 查找路由表中和数据报的目标IP地址完全匹配的主机IP地址。如果找到,就使用该路由项,没找到则转2。
  2. 查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址。如果找到,就使用该路由项,没找到则转3。
  3. 选择默认路由项,这通常意味着数据报的下一跳是网关。

IP转发

将不是发送给本机的IP数据报交由数据包转发子模块进行转发。

对于允许IP数据报转发的文件系统(主机/路由器),数据报转发子模块将对期望转发的数据报执行以下操作:

  1. 检查数据报头部的TTL值。如果TTL为0,则丢弃该数据报。
  2. 查看数据报头部的严格源路由选择选项。如果该选项被设置,则检测数据报的目标IP地址是否是本机的某个IP地址。如果不是则返回一个ICMP源站选路失败报文。
  3. 给源端发送一个ICMP重定向报文,以告诉它一个更合适的下一跳路由器(如果有必要)
  4. 将TTL值减1
  5. 处理IP头部选项
  6. 执行IP分片操作(如果有必要)

重定向

ICMP重定向报文

ICMP重定向报文也能用于更新路由表,因此简要讨论ICMP重定向报文。

在这里插入图片描述

ICMP重定向报文的数据部分含义都十分明确,它给接收方提供了如下两个信息:

  • 引起重定向的IP数据报的源端IP地址。
  • 应该使用路由器的IP地址

接收主机根据这两个信息就可以断定引起重定向的IP数据报应该是由哪一个路由器来进行转发,并因此来更新路由表,通常是更新路由表的缓冲而不是直接更改。

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

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

相关文章

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

集成 Applitools 进行视觉回归测试(快速入门) 简介Applitools 的核心特点Applitools 的应用场景1. 准备工作2. 获取示例项目2.1 下载示例代码2.2 安装依赖2.3 选择测试运行方式3. 代码解析3.1 测试用例示例4. 运行测试4.1 设置 Applitools API 变量4.2 设置 Applitools Eyes …

javaScript交互补充

1、元素的三大系列 1.1、offset系列 1.1.1、offset初相识 使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等 ●获得元素距离带有定位祖先元素的位置 ●获得元素自身的大小(宽度高度) ●注意:返回的…

【Linux】-学习笔记09

第六章、nfs网络文件系统 1.nfs网络文件系统简介 NFS(Network File system,网络文件系统)是由SUN公司研制的UNIX表示层协议,它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系列操作系统上使用。…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干: 给定一个链表数组,每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中,返回合并后的链表。 解法:优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

xvisor调试记录

Xvisor是一种开源hypervisor,旨在提供完整、轻量、移植且灵活的虚拟化解决方案,属于type-1类型的虚拟机,可以直接在裸机上启动。 启动xvisor步骤: 1、搭建riscv编译环境 首先从github上下载riscv-gnu-toolchain很费劲,建议直接从国内的源下载 git clone https://gitee…

minGW安装教程

一、下载 1.通过官网WinGW官网下载 http://www.mingw-w64.org 2.通过SourceForge网站下载MinGW https://sourceforge.net/projects/mingw/files/latest/download 二、安装 右键mingw-get-setup.exe,以管理员身份运行 点击Install安装 点击“Change”修改安装地…

BFS入门

目录 定义二叉树层次遍历电梯问题倒可乐BFS基本思想算法 四方访问 定义 BFS 通常是指广度优先搜索(Breadth - First Search),它是一种图形数据结构的遍历算法。从给定的起始顶点开始,首先访问起始顶点的所有邻接顶点,然…

【数据库】Oracle

文章目录 1. 批量更新 1. 批量更新 这种方式将所有更新操作放在一个事务中执行,减少了与数据库的交互次数,从而可能提高性能。此外,事务处理还可以确保数据的一致性和完整性。begin; update mytable set STATE 102,STATE_DATE now() …

SQL Server数据库中设置索引的策略

在 SQL Server 中,索引通过加快数据检索速度在优化查询性能方面发挥着关键作用。在数据库中设置索引的策略受数据库结构、表的大小和将要运行的查询类型的影响。索引策略通常涉及考虑维度表、事实数据表、大型表和小型表之间的差异。以下是如何将索引应用于这些不同…

如何将CSDN的文章保存为PDF?

目录 1、打开CSDN文章2、按F12或者鼠标右键选择检查并进入控制台3、在控制台输入以下代码4、然后回车(Enter)如果纵向显示不全就横向 1、打开CSDN文章 2、按F12或者鼠标右键选择检查并进入控制台 3、在控制台输入以下代码 (function(){ $("#side&q…

25考研软件工程 西南大学跟重庆大学哪个难?

需知晓,西南大学每年报考人数众多,可这不代表报考软件工程专业的人数就多呀,况且西南大学的优势学科并非工科,故而软件工程的报考热度不会如题主所言那般高呢。 其次得明白,软件工程专业上岸难度方面,重庆大…

普通算法——二维前缀和

二维前缀和 题目链接:https://www.acwing.com/problem/content/798/ 题目描述: 输入一个 n n n 行 m m m 列的整数矩阵,再输入 q q q 个询问,每个询问包含四个整数 ** x 1 , y 1 , x 2 , y 2 x1,y1,x2,y2 x1,y1,x2,y2 &…

【无标题】dom不更新 萤石云 ezuikit-js class赋值失败

原因&#xff1a;EZUIKit类赋值到dom节点后影响到dom节点更新 解决&#xff1a;外层嵌套一层节点&#xff0c;v-for外层节点如下 <div :class"item" v-for"item in videoPlay2" :key"item"> <div :id"item"></div> …

Mock神器:Easy-Mock 私有化部署及使用介绍

在现代前后端分离的开发模式中&#xff0c;后端接口的数据模拟是一个常见且必要的需求。尤其是在后端接口尚未开发完成时&#xff0c;前端开发需要依赖模拟数据进行开发与测试。Easy-Mock 是一个非常流行的开源工具&#xff08;虽然它已经停止更新好长时间了&#xff09;&#…

力扣第96题 不同的二叉搜索树

力扣第96题 - 不同的二叉搜索树 题目描述 给定一个整数 n&#xff0c;求以 1 到 n 为节点组成的所有 不同的二叉搜索树&#xff08;BST&#xff09; 的个数。 题目分析 二叉搜索树的性质 对于一个二叉搜索树&#xff0c;以 i 为根节点&#xff1a; 左子树的节点值来自 [1, i…

List与Set、数组与ArrayList、ArrayList与LinkedList的区别

List 与 Set 的区别&#xff1a; 项ListSet重复允许重复的对象&#xff08;多个null也可以&#xff09;不允许重复的对象&#xff08;null也只能有一个&#xff09;有序性有序的。 保持了每个元素的插入顺序。即输出顺序就是输入顺序。 有序和无序都有。 HashSet&#xff1a;无…

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…

01_Node.js入门 (黑马)

01_Node.js入门 知识点自测 从 index.js 出发&#xff0c;访问到 student/data.json 的相对路径如何写? A&#xff1a;../public/teacher/data.json B&#xff1a;./public/student/data.json C&#xff1a;../student/data.json <details><summary>答案</sum…

2024.12.5——攻防世界Training-WWW-Robots攻防世界baby_web

2024.12.5—攻防世界Training-WWW-Robots 知识点&#xff1a;robots协议 dirsearch工具 本题与第一道Robots协议十分类似&#xff0c;不做wp解析 大致步骤&#xff1a; step 1 打开靶机&#xff0c;发现是robots协议相关 step 2 用dirsearch进行扫描目录 step 3 url传参r…

springboot第84集:Java进阶之路, Netty

# kafka-map文件夹 cd /usr/local/kafka-map # 根据需求自行修改配置 vi application.yml # 启动 java -jar kafka-map.jar byte minByte -128; byte maxByte 127; 用于表示一个 8 位&#xff08;1 字节&#xff09;有符号整数。它的值范围是 -128&#xff08;-2^7&#xff0…