生活资讯
三次握手协议 、chap三次握手协议
2023-04-15 01:17  浏览:30

计算机网络中什么叫“三次握手”?

TCP/IP是很多的不同的协议组成,实际上是一个协议组,TCP用户数据报表协议(也称作TCP传输控制协议,Transport Control Protocol。可靠的主机到主机层协议。这里要先强调一下,传输控制协议是OSI网络的第四层的叫法,TCP传输控制协议是TCP/IP传输的6个基本协议的一种。两个TCP意思非相同。 )。TCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。 通过每个TCP传输的字段指定顺序号,以获得可靠性。是在OSI参考模型中的第四层,TCP是使用IP的网间互联功能而提供可靠的数据传输,IP不停的把报文放到 网络上,而TCP是负责确信报文到达。在协同IP的操作中TCP负责:握手过程、报文管理、流量控制、错误检测和处理(控制),可以根据一定的编号顺序对非正常顺序的报文给予从新排列顺序。关于TCP的RFC文档有RFC793、RFC791、RFC1700。

在TCP会话初期,有所谓的“三握手”:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。由于TCP需要时刻跟踪,这需要额外开销,使得TCP的格式有些显得复杂

TCP协议为什么需要三次握手?

最近一段时间,看了Linux内核中的网络部分源码。在看完之后,一个很基本又经典的问题又浮现在我的脑海即“TCP协议为什么需要三次握手”,以前看过一些文章,但自己觉得都不是很清晰。下午有了点自己的想法,记录一下。

我们知道,TCP协议是一个面向连接的,可靠,全双工的传输协议。其中全双工的意思是说,通信双方可以同时发送,接收数据,类似于打电话。那么为了能确保这样的连接可以成功建立,至少需要保证通信双方至少可以可靠地发送,接受一次数据。为了方便叙述,假设参与通信的双方称为A,B。则在建立连接时,需要让A和B都认为自己和对方都可以发送,接收数据。在连接还没开始建立时,双方均认为自己无法发送和接收数据。方便表述,列表如下(左上角的字母表示站在谁的视角)

假设A发起TCP连接,向B发送SYN包。如下图所示。

在B还未收到该SYN包之前,A和B的对自身能力的认知的变化是,A可以认识到自己是有发送数据包的能力的,至于自己能否接收数据包,B能否接收,能否发送数据包,都是未知的,就认为没有此能力。如下图

在B接收到SYN包后,B就可以认为自己有接收数据包的能力,也可以知道对端A有发送数据包的能力(因为接收到了SYN包)。A的认知还未变化,如下图所示。

B收到SYN包后,按照协议,会发送SYN+ACK包。如下图所示。

在这之后,在A接收到该包之前。B就可以认为自己有发送包的能力。此时,A,B的认知变为:

在A收到SYN+ACK包后,A就可以认为自己有接收数据包的能力,并且B成功收到了自己的SYN数据包,B也有了接收数据的能力。同时这个SYN+ACK是B发来的,也就知道了B有发送数据的能力。此时,A,B的认知变成:

在此时,看到A端已经可以认为自己,对端B都具有了发送,接收的能力。但这是B还无法确认A有正常接收自己数据包的能力。所以需要A再次发送一个ACK包,来让B确认自己可以正常接收数据包,“点亮”B的所有“认知”。从而正常地进行全双工通信,如下图:

在B成功接收A发来的ACK包后,A,B就都可以认为自己,对端都有发送和接收数据的能力。如下图

从以上流程可以看到,3次握手,是可以让通信双发达成自己,对方都可以进行正常全双工通信认知的最少“捂手”次数。所以TCP选择了3次握手~

简述TCP协议的三次握手过程,以及序列号和确认号的作用

(1)***次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

TCP会话的每一端都包含一个32位(bit)的序列号,该序列号被用来跟踪该端发送的数据量。每一个包中都包含序列号,在接收端则通过确认号用来通知发送端数据成功接收

TCP/IP三次握手具体过程?

一、TCP握手协议

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

***次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

Backlog参数:表示未连接队列的***容纳数目。

SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的***重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

三次握手协议的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于chap三次握手协议、三次握手协议的信息别忘了在本站进行查找喔。

发表评论
0评