TCP首部20个字节
1、为什么TCP要三次握手建立连接?
TCP连接过程,客户端发送请求到服务器,服务器确认请求发送到客户端,客户端再发送确认请求到服务器
原因:简言之,为了防止失效的连接请求发送到服务端,造成服务端以为建立了连接一直等到客户端的数据,知道超出了保活计数器的设定值,才意识到客户端出了问题,才会关闭这个连接, 如果有三次握手就不会建立连接。
网上解释的详细原因:
“
前两次的握手很显然是必须的,主要是最后一次,即客户端收到服务端发来的确认后为什么还要想服务端再发送一次确认呢?这主要是为了防止已失效的请求报文段突然又传送到了服务端而产生连接的误判。
考虑如下的情况:客户端发送了一个连接请求报文段到服务端,但是在某些网络节点上长时间滞留了,而后客户端又超时重发了一个连接请求报文段该服务端,而后正常建立连接,数据传输完毕,并释放了连接。如果这时候第一次发送的请求报文段延迟了一段时间后,又到了服务端,很显然,这本是一个早已失效的报文段,但是服务端收到后会误以为客户端又发出了一次连接请求,于是向客户端发出确认报文段,并同意建立连接。假设不采用三次握手,这时服务端只要发送了确认,新的连接就建立了,但由于客户端比你更没有发出建立连接的请求,因此不会理会服务端的确认,也不会向服务端发送数据,而服务端却认为新的连接已经建立了,并在一直等待客户端发送数据,这样服务端就会一直等待下去,直到超出保活计数器的设定值,而将客户端判定为出了问题,才会关闭这个连接。这样就浪费了很多服务器的资源。而如果采用三次握手,客户端就不会向服务端发出确认,服务端由于收不到确认,就知道客户端没有要求建立连接,从而不建立该连接。
”
2、为什么TCP断开连接要四次握手?
客户端发送关闭请求到服务器,表示客户端的数据已经全部发送给服务器。同时服务器端也要发送关闭请求到客户端,表示自己也没有数据要发送给客户端了。