TCP为什么要三次握手(三次数据传输)而不是两次?TCP为什么要释放连接?
- TCP的运输连接
TCP的运输连接石油三个阶段:建立连接、数据传送和连接释放。
- TCP的连接过程
假设A就是客户程序,B就是TCP服务器程序
第一次握手:A的TCP客户端给服务器端TCP会发送一个特殊的TCP数据段,其是不包含应用层数据的,单它需要一个数据段头部的一个标记字段,SYN=1(该信号是指请求和服务器端计算机的序号同步),并会发送一个初始顺序号。
第二次握手:B收到A的连接请求报文后,如果同意就会向A回复确认信息。SYN依旧为1,此事确认信息seq+1(意思应该是我收到了,我确认了你的初始序号),并且发送自己的***seq=y(sever_isn)。这时也是不允许携带应用层数据的。(虽然被授予连接了,但是没有获得服务器的允许连接分配缓冲区和变量)
第三次握手:A收到B的回复,允许连接数据后发送回复确认ACK置1,ack=y+1,自己为seq=x+1(不携带信息,不消耗***,自己本身不用确认,***不变)。然后连接服务器的允许连接分配缓冲区和变量。这时连接就建立了。
TCP为什么要三次握手(三次数据传输)而不是两次?
答:第一次,第二次握手只是告知对方的***初始值,但是没有真正的进行连接。如果只是两次握手,只有发起方的其实***被确认,而服务器端的***的不到确认,未能实现连接,也没有获得分配的缓冲区,无法进行数据传送。为了实现***同步,实现有效可靠的数据传输。
三次握手(三次数据传输)?(源于计算机网络书籍)
TCP为什么要释放连接?
答:假设不释放连接的话,若A向B发送的某个丢失分组又回传到B(之前发送因为网络原因或其他原因丢失,B没有收到),B就会认为传输没有结束,会继续等待A的后续分组到来,这会导致过期的连接再次回传到服务器,但是A认为传输已经结束了(它的实际需要发送的数据已经全部发送),对B的载答确认不知道如何回应,就会导致服务器一直超时重传(超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止),那么服务器会一直发送ACK报文。