关于计算机网络原理问题

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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装