关于计算机网络原理问题

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

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring