关于计算机网络原理问题

2024-08-31 10:44

本文主要是介绍关于计算机网络原理问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
在这里插入图片描述
2017年12月07日星期四,

问题:
在这里插入图片描述
答案:
在这里插入图片描述
接下来,我们来分析和解答,

首先,你要知道,一个byte(字节)能表示两个十六进制数,那么四个字节就可以表示8个十六进制数,如下图:
在这里插入图片描述
色画出的部分就是这个从s发出的ip分组中,第一个4字节,正常的话应该是4X8=32个二进制,但是这样表示的话就太麻烦也不直观还很不直观,所以可以使用十六进制数来表示,因此,是45 、00、 00、28这4个十六进制数,

接下来,我们来看答案是怎么说的,答案中提到分组4和分组5,如下图,
在这里插入图片描述
我们先不管为什么用这两块的数值进行计算,我们来计算一下,看看结果是否和答案中给出的数值一致,

846B41D6

  • 846B41C6

00000010

因为是十六进制,因此十六进制的10等于十进制的16,既有10(H)=16(D),

与答案给出的16字节一致,因此,答案是没问题的,

接下来我们,来研究一下为什么要使用这两块的数值来参与运算,

1、
在这里插入图片描述
请注意,题目中给出的每一个分组报头都是包含两部分的,一部分是ip的报头(每个分组的第一行),另一部分是tcp的报头(每个分组的第二行),因此,不要看错行了,

请看上图,通过对图中所划黄线进行规律摸索,我们可以得出一个结论(下面我将结合此题给出的答案说明并论证此结论的正确性,这里请跟我先通过结论来理解为什么要用846b741c6和846b41d6这两块数据进行运算),就是图片中第四个分组里面的第二行中的第二个4字节数据表示源(c0a80008)主机向目标(d3444750)主机要发送数据序号从846b741c6开始的若干数据包,第一个序号的包的Sequence number(顺序号码)=846b741c6,而图中第5个分组的第二行中的第三个4字节数据则表示主机(d3444750)告诉主机(c0a80008)已收到了从846b741c6这个序号开始到最后一个序号为846b41d5的这些个数据包,Acknowledge number(确认号码)=846b41d6,请注意,这里,根据tcp/ip协议的规定,对收到的数据包的确认号码要自动加一,因此当主机(d3444750)确定收到了主机(c0a80008)的846b41d5这个数据包时,Acknowledge number(确认号码)自动加一,得到846b41d6并记录到分组中第二行第三个4字节中,

所以,结论就是每个分组中的第二行(tcp报头)中的第二个4字节十六进制数代表的是本分组中源端将要给目标端发送的数据包的序号即Sequence number(顺序号码),而每个分组中的第二行(tcp报头)中的第三个4字节十六进制数则代表本分组中源端向目标端进行的确认,确认收到了序号为【Acknowledge number(确认号码)-1】这个数据包,

接下来,我来证明,上述的结论和理论根据,

需要结合几幅图来进行说明,请看下面几张图,
在这里插入图片描述
首先我们要知道,在数据包的传递过程中,序号(Sequence number(顺序号码))的初始化是由系统通过算法来确定的,所以一般显示的都是随机的一个数,当然在本例中是有一个4字节的16进制数来表示的,846b741c6。
在这里插入图片描述
第二,我们要知道,通过对tcp报头中的两个位置的值进行分析后,可以判断出tcp连接的整个过程,
在这里插入图片描述
请注意看上图,1分组中的第二行(tcp报头)中第二个4字节的值就是Sequence number(顺序号码),它明确的告诉目标主机(d3444750)需要接收Sequence number(顺序号码)为846b741c5的数据包,然后2分组中的源主机(d3444750)对Sequence number(顺序号码)846b741c5的数据包进行确认,并按照tcp规则将Sequence number(顺序号码)加一后写入第二行的第三个4字节中即Acknowledge number(确认号码),同时,向自己的目标主机(c0a80008)发送Sequence number(顺序号码)为(e0599fef)的数据包,最后,3分组中的第二行中的第三个4字节对刚才从主机(d3444750)接收的(e0599fef)的数据包进行了确认【也是Acknowledge number(确认号码)+1】,又因为接到了主机(d3444750)对846b741c5的数据包的确认,因此将同时发送Sequence number(顺序号码)为846b741c6的数据包给目标主机(d3444750)。

参考书内容:TCP(Transmission Control Protocol)传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到主机B,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后,要确认联机信息,向A发送ack number=1234568(主机A的seq number+1),syn=1,ack=1,随机产生seq number=7654321的包;
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及ack(对A的发送来的请求,B的确认,)是否为1,若正确,主机A会再发送ack number=7654322(主机B的seq number+1),ack=1,主机B收到后确认seq number值(7654322)并且ack=1则连接建立成功。

扩展阅读材料:

TCP传输连接中的SYN、ACK、SEQ、AN分别是什么意思?他们所带的数字又是代表什么?

SYn=1.ACK=0,SEQ=200
SYN=1,ACK=1.SEQ=4800,AN=201
SYN=1,ACK=1.SEQ=201,AN=4801

SYN,ACK是标志位
SEQ,AN是数据包序号
SYN=1, ACK=0, SEQ=200 的意思是:发送端发出一个SYN请求(SYn=1),同时发送端发送了一个序号为SEQ=200的数据包,
SYN=1, ACK=1, SEQ=4800, AN=201 的意思是:接收端的确认信息,收到了序号为SEQ=200的数据包,同时接收端也发送了一个初始数据包序号为SEQ=4800的数据包,并等待发送端确认,

SYN=1,ACK=1.SEQ=201,AN=4801的意思是:首先,发送端通过接收端送回的AN=201,知道接收端已成功的接收了序号为SEQ=200的数据包,接下来发送端要发送序号为SEQ=201的数据包,并且同时告知接收端刚才送来的序号为SEQ=4800的包已收到,

August2024the31thSaturday

这篇关于关于计算机网络原理问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123682

相关文章

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁