RFC 791 (2) - Overview

目录

总览

操作

Addressing 与 Fragmentation

Addressing

Fragmentation


总览

RFC791文档的第二部分就是对IP进行总浏览:可以看到,我们的五层划分是这样的:

                                    
                 +------+ +-----+ +-----+     +-----+  
                 |Telnet| | FTP | | TFTP| ... | ... |  
                 +------+ +-----+ +-----+     +-----+  
                       |   |         |           |     
                      +-----+     +-----+     +-----+  
                      | TCP |     | UDP | ... | ... |  
                      +-----+     +-----+     +-----+  
                         |           |           |     
                      +--------------------------+----+
                      |    Internet Protocol & ICMP   |
                      +--------------------------+----+
                                     |                 
                        +---------------------------+  
                        |   Local Network Protocol  |  
                        +---------------------------+  
​
                         Protocol Relationships

可以这样理解这些协议之间的关系:最上一层是应用层的协议,比如说telnet, FTP, TFTP等传统应用层协议!他们是使用了TCP或者udp这样一些传输协议的服务来完成自身的服务,而TCP UDP这些传输层的服务则是基于IP或者是ICMP的网络层服务完成自身的服务的,而IP和ICMP又是依靠或者说是依赖于本地网络的一些协议来完成他们的工作!可以看到层层的抽象共同完成了进程之间的报文传输!

由于RFC791着重描述与IP的工作原理,所以这里我们从IP的报文封装与拆包来进行分析!

操作

IP的封装与拆包实际上是按照这样的流程完成的。

为了严谨假设,我们假设两台主机之间需要通过一个网关跳转才能够完成传输!那么对于发送报文的应用进程,它需要准备好它的数据,然后调用本地的网络模型来发送数据。他把数据放到了一个上层应用已经结束封装的数据包,然后准备使用IP协议来构建IP报文,它向里面填充自身的源地址,目标地址,数据以及一些选项等。

在这里它需要向网关发送数据,那么这里的目标地址就需要填写网关的IP。然后他就会把这样的一个IP报文发送给网关,网关接收到了这样的IP报文之后它首先要剥离协议的头,从而把数据包从中裸露出来方便处理。他需要查看装在了数据段的目标地址,网关查看自己的转发表,这样他才能决定要转发到哪一个网关或者主机上!

由于在这个场景里面我们的表里面已经存储了目标主机的IP地址,所以在这里他直接往目标主机发送IP报文。于是他再一次封装IP报文,然后向目标主机投递这个IP报文,目标主机接收到了这个IP报文后向上传递,最终以一种系统调用的方式通知目标进程接收网报数据!所以整个流程就可以使用这样的图来简单的描述

   Application                                           Application
   Program                                                   Program
         \                                                   /      
       Internet Module      Internet Module      Internet Module    
             \                 /       \                /           
             LNI-1          LNI-1      LNI-2         LNI-2          
                \           /             \          /              
               Local Network 1           Local Network 2            
​
​
​
                            Transmission Path
​

AddressingFragmentation

我们知道IP报文是会在主机与主机之间进行传递!那么我们应该如何标识他们?

我们传递的报文可能会很大!在这种情况下一个报文可能并没有办法完全容纳我们的数据!这个时候它可能就需要分片!下面我们来讨论IP协议提要求提供的这两个基础功能是怎样的

Addressing

我们之前就说过,IP提供的最基础的两个服务,一个是Addressing(寻址),另一个就是Fragmentation(分片)。我们是怎么区分寻址的呢?答案是使用一些区分字段:

names:主机的名称,这个地方是不是想起来DNS了?是的!这里就是记载着names - Address映射对

addresses:主机的地址

route:记载着如何到达

当然,IP地址实际上也需要向下转化为本地的网络协议使用的地址(比如说MAC地址)

一般的,我们考虑IP地址,在1980年那个主机并不太多的时代,将IP地址分成ABC类。我们后面会进一步详细的讨论

Fragmentation

我们下面就讨论分片这个事情:分片,简而言之就是把一个巨大无比的数据报将它分解为小的一个分组就可以容纳的小碎片!当然一个数据报段文可以标记为不要分段!那么这个时候被标记了不要分段的数据包将会被解释为不是分段的,所以如果这个数据报它确实需要分段才能够发送,但是被标记为不分段时,它会被遗弃掉!

我们如何指示我们的数据报是分段的呢?答案很简单,在header里有所指示就行!我们的发送方将数据进行分段,然后传递出去!那么接收方就要依赖identification(身份)段中的标识来接受报文(这表明了这是这个分段组的!)

举个例子。假如说,我们要发送一个很大的报文时:这个巨大的数据包被拆分成一个一个数据段(注意第一个IP报文的数据段必须是64位大小的整数倍,后面的无所谓),每个数据包前面添加IP协议控制报文段,从而将这些将一个巨大的数据包转化为若干的IP分组报文!

第一个标识中写入自己的分组偏移量是零,之后的分组按照顺序依次递增,而同时在第一个报文中设置“是否有更多分组”的标志位中设置唯1,在最后一个分组中“是否有更多分组”的标志位中设置为0!这样我们的接收方它首先查看偏移量来表明这是第几个报文,同时查看是否有更多分组来决定还不还要继续接收这个报文流!直到接收到一个报文其分组标识为零的时候,它才会停止接收这个报文流!

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

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

相关文章

算法提高之能量项链

算法提高之能量项链 核心思想&#xff1a;区间dp 通过观察发现可以将n个珠子最后的n1个数看作石子 合并石子 在l~r的范围内 找k作隔断 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110,M N<<…

景源畅信:个人抖音小店怎么开通?

在数字时代的浪潮中&#xff0c;个体创业已不再是遥不可及的梦想。特别是随着短视频平台的崛起&#xff0c;抖音不仅成为人们娱乐消遣的新宠&#xff0c;更是众多创业者眼中的“新大陆”。你是否也曾憧憬过在抖音上开一家属于自己的小店?那么&#xff0c;如何开通个人抖音小店…

[微信小程序] 入门笔记2-自定义一个显示组件

[微信小程序] 入门笔记2-自定义一个显示组件 0. 准备工程 新建一个工程,删除清空app的内容和其余文件夹.然后自己新建pages和components创建1个空组件和1个空页面. 设定 view 组件的默认样式,使其自动居中靠上,符合习惯.在app.wxss内定义,作用做个工程. /**app.wxss**/ /* 所…

【强训笔记】day12

NO.1 思路&#xff1a;哈希表&#xff0c;建立bool数组&#xff0c;将要删除的字符串存入哈希表&#xff0c;并标为true&#xff0c;再遍历要做处理的字符串&#xff0c;如果在哈希表中为false&#xff0c;就输出。 代码实现&#xff1a; #include <iostream> #includ…

大数据技术原理与技术简答

1、HDFS中名称节点的启动过程 名称节点在启动时&#xff0c;会将FsImage 的内容加载到内存当中&#xff0c;此时fsimage是上上次关机时的状态。然后执行 EditLog 文件中的各项操作&#xff0c;使内存中的元数据保持最新。接着创建一个新的FsImage 文件和一个空的 Editlog 文件…

Python深度学习基于Tensorflow(4)Tensorflow 数据处理和数据可视化

文章目录 构建Tensorflow.data数据集TFRecord数据底层生成TFRecord文件数据读取TFRecord文件数据图像增强 数据可视化 构建Tensorflow.data数据集 tf.data.Dataset表示一串元素&#xff08;element&#xff09;&#xff0c;其中每个元素包含一个或多个Tensor对象。例如&#xf…

Mac虚拟机软件哪个好用 mac虚拟机parallels desktop有什么用 Mac装虚拟机的利与弊 mac装虚拟机对电脑有损害吗

随着多系统使用需求的升温&#xff0c;虚拟机的使用也变得越来越普遍。虚拟机可以用于创建各种不同的系统&#xff0c;并按照要求设定所需的系统环境。另外&#xff0c;虚拟机在Mac电脑的跨系统使用以及测试软件系统兼容性等领域应用也越来越广泛。 一、Mac系统和虚拟机的区别 …

windows 双网卡同时接入内外网

在公司使用wifi接入使用桌面云&#xff0c;但是公司wifi不能上外网&#xff0c;查资料不方便&#xff0c;通过手机同时接入外网。 同一台电脑设置同时连接内外网&#xff08;wifi或共享的网络&#xff09;_win7电脑同时使用手机和usb网卡使用wifi-CSDN博客 route print查看当前…

2024年CSC公派联合培养博士项目申报即将开始~

一、选派计划 联合培养博士研究生面向全国各博士学位授予单位选拔。 联合培养博士研究生的留学期限、资助期限为6-24个月。留学期限应根据拟留学单位学制、外方录取通知&#xff08;或正式邀请信&#xff09;中列明的留学时间确定。个人申报的资助期限应不超过留学期限&#…

静态分配IP,解决本地连接不上Linux虚拟机的问题

在Window环境下&#xff0c;使用远程终端工具连接不了VMware搭建的Linux虚拟机&#xff08;CentOS 7&#xff09;&#xff0c;并且在命令行ping不通该Linux虚拟机的IP地址。下面通过配置网关解决本地与Linux虚拟机连接问题&#xff1a; 1 查看虚拟机网关地址 在VMware虚拟机上…

代码随想录第52天|300.最长递增子序列 718. 最长重复子数组

300.最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之子序列问题&#xff0c;元素不连续&#xff01;| LeetCode&#xff1a;300.最长递增子序列_哔哩哔哩_bilibili 给你一个整数数组 nums &#xff0…

SQL查询语句(一)简单查询和简单条件查询

MySQL的所有语句中&#xff0c;我们日常用的最多的其实就是查询语句。因此这篇文章主要介绍查询语句中的一些基础语法。 目录 简单查询 简单条件查询 简单查询 最简单的查询语句的语法如下所示&#xff1a; SELECT * FROM student; 它的语法解析如下&#xff1a; SELECT关…

【busybox记录】【shell指令】sort

目录 内容来源&#xff1a; 【GUN】【sort】指令介绍 【busybox】【sort】指令介绍 【linux】【sort】指令介绍 使用示例&#xff1a; 排序 - 默认排序 排序 - 检查所给文件是否已经排序 排序 - 输出已经排序过的文件&#xff0c;不会重新排序 排序 - 忽略每行前面的空…

鸿蒙OpenHarmony【基于Hi3516DV300开发板(时钟应用开发)】

概述 本文将介绍如何快速搭建基于OpenHarmony标准系统&#xff08;Hi3516DV300开发板&#xff09;的应用开发环境&#xff0c;并基于一个时钟APP示例逐步展示应用的创建、开发、调试和安装等流程。示例代码可以通过本链接获取。 时钟App是一款显示实时时间的应用&#xff0c;…

Sarcasm detection论文解析 |CAT-BiGRU

论文地址 论文地址&#xff1a;CAT-BiGRU: Convolution and Attention with Bi-Directional Gated Recurrent Unit for Self-Deprecating Sarcasm Detection | Cognitive Computation github:Ashraf-Kamal/Self-Deprecating-Sarcasm-Detection (github.com) 论文首页 笔记框架 …

传统汽车空调系统工作原理

1.首先讲一个概念 液体变成气体&#xff1a;吸热 气体变成液体&#xff1a;放热 2.在汽车空调系统中热量的传递的介质不是水&#xff0c;而是氟利昂&#xff0c;简称&#xff1a;“氟”。 3.传统式汽车空调结构如下 该三个部件位于车头进气口位置 该部位位于汽车驾驶车厢前方…

QX-mini51单片机学习(1)---电子电路基础

目录 1电平特性 2单片机io口简绍 3初识电容电阻 4初识电路原理图 5单片机最小系统结构 6单片机工作基本时序 1电平特性 单片机是一种数字集成芯片&#xff0c;数字电路中两种电平&#xff0c;高电平与低电平 高电平&#xff1a;5v 低电平&#xff1a;0v TTL电平信号…

重庆大足某厂不锈钢管件酸洗钝化-智渍洁

简报&#xff1a;重庆大足某厂不锈钢管件酸洗钝化 重庆大足某厂不锈钢管件酸洗钝化 - 重庆智渍洁环保科技有限公司简报&#xff1a;重庆大足某厂不锈钢管件酸洗钝化https://www.zhizijie.com/hl/zixun/gongsi/237.html

数据流转的艺术:深度解析tee命令的应用技巧

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据流转的艺术&#xff1a;深度解析tee命令的应用技巧 前言tee命令简介tee命令的基本用法tee命令的高级功能 前言 在Linux的世界里&#xff0c;有一位不太引人注意但却异常强大的命令&#xff0c;那…

上海个人购房提取公积金经历和注意事项(收藏不踩坑)

在前一篇文章中&#xff0c;我介绍了 2024 年 4 月 24 日上海个人购房个税退税经历&#xff0c;我于 4 月 27 日周六&#xff0c;顺利办理租房公积金提取业务&#xff0c;资金在业务办理完成后 10 分钟左右到账。通过本文分享办理过程的材料和注意事项&#xff0c;避免大家踩坑…
最新文章