计算机网络之中的,序列号与确认号,怎么来计算啊???

问题描述

看了书,感觉书上写的很模糊,自己有点糊涂了,真心求教…… 问题补充:suziwen 写道

解决方案

引用TCP序列号和确认号详解完整的PDF下载:在网络分析中,读懂TCP序列号和确认号在的变化趋势,可以帮助我们学习TCP协议以及排查通讯故障,如通过查看序列号和确认号可以确定数据传输是否乱序。但我在查阅了当前很多资料后发现,它们大多只简单介绍了TCP通讯的过程,并没有对序列号和确认号进行详细介绍,结合实例的讲解就更没有了。近段时间由于工作的原因,需要对TCP的序列号和确认号进行深入学习,下面便是我学习后的一些知识点总结,希望对TCP序列号和确认号感兴趣的朋友有一定帮助。1. 序列号和确认号的简介及作用TCP协议工作在OSI的传输层,是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。响应包内也包括一个序列号,表示接收方准备好这个序列号的包。在TCP传送一个数据包时,它会把这个数据包放入重发队列中,同时启动计时器,如果收到了关于这个包的确认信息,便将此数据包从队列中删除,如果在计时器超时的时候仍然没有收到确认信息,则需要重新发送该数据包。另外,TCP通过数据分段中的序列号来保证所有传输的数据可以按照正常的顺序进行重组,从而保障数据传输的完整。2. TCP的通讯过程在TCP通讯中主要有连接的建立、数据的传输、连接的关闭三个过程!每个过程完成不同的工作,而且序列号和确认号在每个过程中的变化都是不同的。2.1 TCP建立连接TCP建立连接,也就是我们常说的三次握手,它需要三步完成。在TCP的三次握手中,发送第一个SYN的一端执行的是主动打开。而接收这个SYN并发回下一个SYN的另一端执行的是被动打开。这里以客户端向服务器发起连接来说明。1) 第1步:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,初始序列号(ISN)是客户端随机产生的一个值,确认号是0;2) 第2步:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,序列号(ISN)是服务器随机产生的一个值,确认号是客户端的初始序列号+1;3) 第3步:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,序列号是上一个同步请求数据包中的确认号值,确认号是服务器的初始序列号+1。注意:因为一个SYN将占用一个序号,所以要加1。初始序列号(ISN)随时间而变化的,而且不同的操作系统也会有不同的实现方式,所以每个连接的初始序列号是不同的。TCP连接两端会在建立连接时,交互一些信息,如窗口大小、MSS等,以便为接着的数据传输做准备。RFC793指出ISN可以看作是一个32bit的计数器,每4ms加1,这样选择序号的目的在于防止在网络中被延迟的分组在以后被重复传输,而导致某个连接的一端对它作错误的判断。2.2 TCP传输数据在TCP建立连接后,就可以开始传输数据了。TCP工作在全双工模式,它可以同时进行双向数据传输。这里为了简化,我们只谈服务器向客户端发送数据的情况,而客户端向服务器发送数据的原理和它是类似的,这里便不重复说明。服务器向客户端发送一个数据包后,客户端收到这个数据包后,会向服务器发送一个确认数据包。传输数据的简要过程如下:1) 发送数据:服务器向客户端发送一个带有数据的数据包,该数据包中的序列号和确认号与建立连接第三步的数据包中的序列号和确认号相同;2) 确认收到:客户端收到该数据包,向服务器发送一个确认数据包,该数据包中,序列号是为上一个数据包中的确认号值,而确认号为服务器发送的上一个数据包中的序列号+所该数据包中所带数据的大小。数据分段中的序列号可以保证所有传输的数据按照正常的次序进行重组,而且通过确认保证数据传输的完整性。2.3 TCP关闭连接前面我们提到,建立一个连接需要3个步骤,但是关闭一个连接需要经过4个步骤。因为TCP连接是全双工的工作模式,所以每个方向上需要单独关闭。在TCP关闭连接时,首先关闭的一方(即发送第一个终止数据包的)将执行主动关闭,而另一方(收到这个终止数据包的)再执行被动关闭。关闭连接的4个步骤如下: 1) 第1步:服务器完成它的数据发送任务后,会主动向客户端发送一个终止数据包,以关闭在这个方向上的TCP连接。该数据包中,序列号为客户端发送的上一个数据包中的确认号值,而确认号为服务器发送的上一个数据包中的序列号+该数据包所带的数据的大小;2) 第2步:客户端收到服务器发送的终止数据包后,将对服务器发送确认信息,以关闭该方向上的TCP连接。这时的数据包中,序列号为第1步中的确认号值,而确认号为第1步的数据包中的序列号+1;3) 第3步:同理,客户端完成它的数据发送任务后,就也会向服务器发送一个终止数据包,以关闭在这个方向上的TCP连接,该数据包中,序列号为服务器发送的上一个数据包中的确认号值,而确认号为客户端发送的上一个数据包中的序列号+该数据包所带数据的大小;4) 第4步:服务器收到客户端发送的终止数据包后,将对客户端发送确认信息,以关闭该方向上的TCP连接。这时在数据包中,序列号为第3步中的确认号值,而确认号为第3步数据包中的序列号+1;注意:因为FIN和SYN一样,也要占一个序号。理论上服务器在TCP连接关闭时发送的终止数据包中,只有终止位是置1,然后客户端进行确认。但是在实际的TCP实现中,在终止数据包中,确认位和终止位是同时置为1的,确认位置为1表示对最后一次传输的数据进行确认,终止位置为1表示关闭该方向的TCP连接。3. 实际数据包分析结合上面的理论,下面我们访问网页来捕获数据包,通过实际的数据包来验证序列号和确认号在TCP连接建立、传输数据以及关闭连接时的变化。打开科来网络分析系统,首先为减少数据干扰,在过滤器中设置只捕获TCP协议的数据,然后开始捕获,同时,访问,待页面下载完成后,停止捕获。此次环境中,客户端为192.168.0.92,服务器为:222.77.187.23。3.1 TCP建立连接在捕获的数据包中,首先我们来查看建立连接的三次握手信息,并且观察数据包中序列号和确认号的变化。为了让大家看的更加明白,我在这里使用了“添加数据包注释”的功能。( 建立连接第一步)客户端向服务器发起一个同步请求数据包,请求连接服务器的80端口,客户端随机产生一个初始序列号(ISN)为2712239078,确认号为0。注意:在实际情况中,我们访问网站首先进行的是域名解析,这里我们设置了过滤器所以没有捕获到DNS数据包。 ( 建立连接第二步)服务器收到客户的同步请求数据包后,并向客户端发送一个同步确认数据。这个数据包中,服务器随机产生一个初始序列号(1288781508),同时,将客户端发送的初始序列号(ISN)加1(2712239078+1=2712239079)以作为确认号发回给客户段进行确认。( 建立连接第三步)客户端收到这个同步确认数据包后,再次对服务器进行一次确认。在这个数据包中,序列号为上一个数据包的确认号(2712239079),确认号为服务器的初始序列号(ISN)加1(1288781508+1=1288781509),以对服务器的同步确认数据包进行确认,这样TCP连接就建立了。3.2 TCP传输数据TCP连接建立后,马上就开始传输数据,这里客户端主动向服务器发送一个GET请求,来提交自己的请求信息。( 传输数据)图4中的是客户端向服务器发送的GET请求据数据包,我们注意看序列号和确认号的值!该数据包中,序列号为2712239079,确认号为1288781509,这和三次握手的第三步的数据包中的序列号和确认号相同。从图4中看出这个数据包的大小为1018字节,其中减去14字节Ethernet报头,20字节的IP报头,20字节的TCP报头和4字节的FCS(1018-14-20-20-4=960),得到传输的数据大小为1432。我们将该数据包中的序列号加上该数据大小(即2712239079+960=2712240039),发现与“下一个序列号”的值完全吻合,也就是下一个数据包中服务器发送给客户端的数据包中的确认号。( 确认收到)注意:“下一个序列号”是科来网络分析系统为了方便用户查找下一个连续数据包,而根据数据包序列号和确认号自动计算得出,该字段在实际数据包中是不存在的。3.3 TCP关闭连接在传输数据完成之后,TCP会关闭连接,这里是服务器主动关闭该方向上的TCP连接。我们继续来观察捕获的数据包,先来看关闭连接的第一步,这里是服务器主动发起关闭( 关闭连接第一步)服务器向客户端主动发起确认位和终止位同时置为1的数据包,确认位置1表示对最后一次传输的数据进行确认,终止位置1表示关闭该方向的TCP连接,关闭服务器和客户端的TCP连接。在这个数据包中,序列号为客户端发送的上一个数据包中所带的确认号值(1288781777),而确认号为服务器发送的上一个数据包中的序列号+该数据包所带的数据的大小(2712238597+1432=2712240039);然后客户端收到该终止数据包,会对服务器发送一个确认数据包,该数据包中,序列号为第1步中的确认号值(2712240039),而确认号为第1步的数据包中的序列号+1(1288781777+1=1288781778);我们注意观察序列号和确认号的变化情况。( 关闭连接第二步)随后,就是来自客户端被动发起的关闭,它与服务器主动发起的关闭同理,只不过这次是被动关闭客户端方向上的TCP连接,我们就不重复说明。我们根据以上对TCP的建立连接、传输数据和关闭连接三个过程的抓包分析,成功的验证了前面所说的理论。
解决方案二:
序号字段和确认序号字段: 序号:占4个字节,是本报文段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而起数据供100字节,则下一个报文段的序号就是400; 确认序号:占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号; 由于序号字段有32比特长,可以对4GB的数据进行编号,这样就可保证当序号重复使用时,旧序号的数据早已在网络中消失了;
解决方案三:
一般这样的序列号,都是没有办法反着编译出来的只能通过一系列的算法从确认号得到序列号,而不能从序列号得到确认号这样,软件商有着对应的确认号,和算法就能辨认你的序列号是否合法目前流行的MD5算法 SHA1等MD5算法据说已经被我国王小云教授破解了,而且目前也有很多MD5数据库,专门来破解的,MD5也不能说是安全的算法了
解决方案四:
什么序列号?确认号,,,没明白你是想问MD5值?

时间: 2024-09-23 22:16:00

计算机网络之中的,序列号与确认号,怎么来计算啊???的相关文章

如何做生成序列号或卡号的功能,请高手指教

问题描述 就像移动充值卡一样,卡后面有卡号,和密码,我现在要用这种方式做一个注册功能,用户输入卡号和对应的密码即可注册,此卡根据卡号不同有不同的面额,现在的问题就是我要做大量的卡出售,后面的卡号和密码要怎么生成呢,是不是密码要根据卡号来生成呢?因为卡的数量很大,不可能人工来完成.哪位高手有什么好办法吗?谢谢,在线等~~ 解决方案 解决方案二:用Oracle类似序列的功能得到不重复的数字,再通过转换得到号码和密码解决方案三:高手快来看看呀,急用解决方案四:引用1楼locool的回复: 用Oracl

TCP三次握手应用及原理

TCP/IP是很多的不同的协议组成,实际上是一个协议组,TCP用户数据报表协议(也称作TCP传输控制协议,Transport Control Protocol.可靠的主机到主机层协议.这里要先强调一下,传输控制协议是OSI网络的第四层的叫法,TCP传输控制协议是TCP/IP传输的6个基本协议的一种.两个TCP意思非相同. ).TCP是一种可靠的面向连接的传送服务.它在传送数据时是分段进行的,主机交换数据必须建立一个会话.它用比特流通信,即数据被作为无结构的字节流. 通过每个TCP传输的字段指定顺

结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)

摘要:     本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析.   一.概述     TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,中间的分组交换机不维护任何连接状态信息.连接建立整个过程如下(即三次握手协议): 首先,客户机发送一个特殊的TCP报文段: 其次,服务器用另一个特殊的TCP报文段来响应: 最后,客户机再用第三个特殊报

《Cisco QoS认证考试指南(第2版)》一1.4 语音、视频和数据的流量特征

1.4 语音.视频和数据的流量特征 Cisco QoS认证考试指南(第2版) 你为什么需要QoS呢?QoS能够影响网络的带宽.延迟.抖动和丢包等属性.不同的应用对于带宽.延迟.抖动和丢包的要求也不相同.通过使用QoS,网络可以更好地为每种应用分配合理的QoS资源. 接下来的三个小节涵盖了语音流.视频流和数据流.早期的QoS考试中覆盖了更多有关语音.视频和数据的QoS特征:但当前QoS考试所涉及的这部分知识并不深入.很多阅读过本书前一版的读者认为下面的小节介绍了很多很好的背景知识,值得通篇阅读本章

iOS的socket开发基础

iOS的socket开发基础 首先让我们通过一张图知道socket在哪里? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口. TCP和UDP的区别 TCP:面向连接.传输可靠(保证数据正确性.保证数据顺序).用于传输大量数据(流模式).速度慢,建立连接需要开销较多(时间,系统资源). UDP:面向非连接.传输不可靠.用于传输少量数据(数据包模式).速度快. 关于TCP是一种流模式的协议,UDP是一种数据报模式的协议,这里要说明一下,TCP是面向连接的,也就是说,在连接

深入浅出--iOS的TCP/IP协议族剖析&&Socket

简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久!你能耐心看完吗?) 我在这个文章中,列举了常见的TCP/IP族中的协议,今天主角是--传输层协议. 传输层(Transport Layer)是OSI(七层模型)中最重要.最关键的一层,它负责总体的数据传输和数据控制的一层,传输层提供端到端(应用会在网卡注册一个端口号)的交换数据的机制,检查分组编号与次序.传输层对其上三层如会话层等,提供可靠的传输服务,对网络层提供可靠的目的地站

iOS Socket理论知识

iOS Socket理论知识 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议对应于应用层 tcp/udp协议对应于传输层 ip协议对应于网络层 三者本质上没有可比性.何况HTTP协议是基于TCP连接的.TCP/IP是传输层协议,主要解决数据如何在网络中传输:而HTTP是应用层协议,主要解决如何包装数

tcp-C# 如何使用socket实现基于TCP协议传输数据

问题描述 C# 如何使用socket实现基于TCP协议传输数据 我使用Socket.Send和Socket.BeginReceive完成了上位机通讯软件的编写,但是连接下位机经过分析抓包软件得到的数据包,发现似乎与标准TCP协议有出入.具体来讲是这样的: 首先根据TCP协议,数据交换的规范应该是这样的http://blog.csdn.net/moonhnney/article/details/5604677 数据交换: a ---->b a 发送数据完毕,(PSH,ACK) aseq = x,a

《趣学CCNA——路由与交换》一第2章 TCP/IP协议2.1 TCP协议简介

第2章 TCP/IP协议 趣学CCNA--路由与交换 在上一章,我们郑重其事地介绍了无聊的OSI七层参考模型,并浓墨重彩地讲述了其中每一层负责提供的功能.OSI模型出身名门.条理清晰,只有一个"小小的"缺点,那就是一直没人太拿它当回事儿.所以,如果对它太认真,你就败了. 我们是有职业精神的,因此在介绍OSI模型时反复强调了这个模型是如何地曲高和寡.我们在上一章中花大篇幅介绍OSI模型有三个目的:一是延续各类技术教材的惯例,以免将本书作为技术开蒙读物的读者在与别人讨论技术问题时,因全然不