莆仙生活网 > 知识库 >

说明为什么在运输连接建立时要使用三次握手

来源:莆仙生活网时间:2024-02-18 13:16:25编辑:莆仙君

传输连接的建立和释放为什么要采用三次握手协议?使用两次握手建立连接会产生死销吗?

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端 不会产生死销、但会增大额外开销的流量,因为TCP 需要时刻跟踪


TCP连接建立过程中为什么需要“三次握手”?

传输控制协议
TCP)是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的。互联网络与单个网络不同,因为互联网络的不同部分可能有着截然不同的拓扑、带宽、延迟、分组大小和其他参数。TCP的设计目标是能够动态的适应互联网络的这些特性,而且当面对多种失败的时候仍然能够健壮。
每一次TCP连接都需要三个阶段:连接建立、数据传送和连接释放。三次握手就发生在连接建立阶段。
在谢希仁著《计算机网络》第四版中讲三次握手的目的是
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。在另一部经典的《计算机网络》一书中讲三次握手的目的是为了解决
网络中存在延迟的重复分组的问题。
这两种不用的表述其实阐明的是同一个问题。
谢希仁版《计算机网络》中的例子是这样的,已失效的连接请求报文段的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用三次握手,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用三次握手的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。
这个例子很清晰的阐释了三次握手对于建立可靠连接的意义。
在Google Groups的
TopLanguage
中看到一帖讨论TCP三次握手觉得很有意思。贴主提出
的问题,在众多回复中,有一条回复写道:这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了.
。这可视为对三次握手目的的另一种解答思路。


在OSI参考模型中,保证端到端的可靠性数据传输是在(  )上完成的。

【答案】:C
本题考查网络协议——OSI参考模型。
传输层是OSI参考模型的第四层。主要任务是向用户提供透明的端到端的数据传输。所谓端到端的数据传输,就是最终用户到最终用户的传输。传输层在网络层提供的服务的基础上为用户提供面向连接和面向无连接两种基本的服务。面向连接提供的是可靠的服务,在通信过程中需要进行逻辑连接的建立和拆除,包括流量控制、差错控制和顺序控制等工作。面向无连接服务不需要建立逻辑连接,不能保证传输的信息按发送顺序提交给用户,是一种不太可靠的服务。


TCP 为什么是三次握手,而不是两次或四次?

三次握手的目的:是为了确认双方都有收发数据的能力。第一次:A->B,证明A有发消息的能力。第二次:->B&&B->A,证明B有收消息,并且有发消息的能力。第三次:A->B,证明A有收消息的能力。二次握手达不到目的,四次多余。当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

tcp为什么要三次握手?

. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。\x0d\x0a\x0d\x0a如果采用两次的话,会出现下面这种情况。\x0d\x0a比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;\x0d\x0a于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。\x0d\x0a传完东西后,断开。\x0d\x0a\x0d\x0a结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。\x0d\x0a\x0d\x0a2. 三次握手改成仅需要两次握手,死锁是可能发生\x0d\x0a\x0d\x0a考虑计算机A和B之间的通信,假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑A是否收到自己的连接请求分组。在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。而A在发出的分组超时后,重复发送同样的分组。这样就形成了死锁


上一篇:十二种颜色

下一篇:没有了

相关推荐

热门头条