关于计算机网络原理问题

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实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu