tcp为什么要三次握手(tcp为什么要进行三次握手)

      最后更新:2022-11-04 02:54:43 手机定位技术交流文章

      TCP连接建立为何采用三次握手协议?

      一、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存活时间。
      简单而言 客户端发送一个SYN(同步序列编号),服务器收到后会发出一个SYN+ACK(确认标志)确认,客户端收到服务器发出SYN+ACK,也会向服务器确认发送一个ACK这样三次握手就完成了既然已经确认了发送方和接受方的信息 为什么还要进行握手?
      TCP连接建立为何采用三次握手协议?

      下TCP建立连接的时候为什么要三次握手?

      一、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存活时间。
      TCP需要三次握手才能建立连接,那么为什么需要三次握手呢?
      下TCP建立连接的时候为什么要三次握手?

      tcp 为什么要三次握手?

      tcp 为什么要三次握手? 我们假设A和B是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握手。 第一次握手:A给B打电话说,你可以听到我说话吗?第二次握手:B收到了A的信息,然后对A说:我可以听得到你说话啊,你能听得到我说话吗?第三次握手:A收到了B的信息,然后说可以的,我要给你发信息啦!在三次握手之后,A和B都能确定这么一件事:我说的话,你能听到;你说的话,我也能听到。这样,就可以开始正常通信了。 注意:HTTP是基于TCP协议的,所以每次都是客户端发送请求,服务器应答,但是TCP还可以给其他应用层提供服务,即可能A、B在建立链接之后,谁都可能先开始通信。如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
      三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。
      tcp 为什么要三次握手?

      TCP建立连接为什么是三次握手,为什么不是两

      建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。 (1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。 (3)采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况。
      先来将三次握手这个过程捋一遍。(S-服务端,C-客户端) 第一次握手后,S可以确认自己收报文与C发报文的功能都正常,而C呢,它什么都不能确认。第二次握手后,C可以确认自己的收发报文与S的收发报文功能都正常,也就是认为连接已建立。 那么第三次呢,S也可以确认双方能够正常通信。
      TCP需要三次握手才能建立连接,那么为什么需要三次握手呢?
      TCP建立连接为什么是三次握手,为什么不是两

      为什么TCP/IP需要三次握手

      至少这样正常的三次交流双方都能够知道并且确认对方初始的序列号,也就是说主机1告诉主机2序列号,主机2回复主机1说收到了你的序列号并告诉主机1我的初始序列号是什么,主机1收到来自主机2的序列号以后,告诉主机2,我也收到你的序列号了。看一下对于特殊情况,这三次握手是如何处理的:这个时候,主机2对与这个过期的CR包,将会发送确认给主机1问问是否真的是有这个包,而对于过期的DATA包,主机2会识别到序列号不对而忽略。这个时候,主机2收到的CR包将被忽略,而DATA包也会因为序列号不对而被丢弃这时主机2会发送一个确认请求给主机1,问问他是否存在这个请求,而主机1回应说我已经放弃这个请求了,所以回复REJECT(ACK = y)拒绝主机2,主机2知道后就不再理会。假设主机1向主机2发送一个请求,这个请求在网络中游荡了好久,主机2还没有收到,这是主机1看见没有反应,放弃不再请求,而之前发送的这个请求才到达主机2:假设主机1向主机2发送的CR(seq = x)包以及DATA(seq = y, ACK = z)包都在网络中游荡了很久,而这时主机1已经和主机2建立了可靠的连接(seq = x + 100,ACK = y + 200)假设主机1向主机2发送的CR(seq = x)包以及DATA(seq = y, ACK = z)包都在网络中游荡了很久,而这时主机1与主机2并没有建立连接总之,三次握手后能够确保双方都能知道对方的初始序列号,而防止误收数据包的一个关键就是使用序列号进行确认
      为什么TCP/IP需要三次握手

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/42288.html

          热门文章

          文章分类