每天一道面试题:day07

252 阅读2分钟

question:什么是三次握手,四次挥手?
answer:
三次握手,四次挥手形象地形容了客户端与服务端根据TCP协议建立连接的过程。

先说三次握手。首先客户端和服务端都处于closed状态,然后服务端监听某一端口处于listen状态。接着当客户端请求建立连接时,会发送一个SYN报文给客户端,并指明客户端初始序列号x,此时客户端处于syn-sent状态。当服务端收到客户端的SYN报文后,会回复自己的SYN报文,并将序列号初始为y,同时将x+1作为ack的值,返回一个ACK作为确认,此时服务端处于syn-revd状态。当客户端收到服务端发送的SYN和ACK后,会回复一个ACK,把y+1作为ack的值,序列号是x+1,此时客户端处于established状态。当服务器收到ACK报文后,也处于established状态,此时,双方完成建连。

接着说说四次挥手。初始状态是客户端服务端都处于established状态。当客户端请求断开连接时,会发送一个FIN报文,并指定序列号为p,此时客户端处于fin-wait-1状态。当服务端收到FIN报文后,会回复一个ACK表示收到,并设置ack值为p+1,此时服务端处于closed-wait状态,客户端收到后处于fin_wait-2状态。当服务端准备好断开连接后,服务端会发送一个序列号为q的FIN报文给客户端,同时携带ACK,ack的值是p+1,此时服务端处于last-ack状态。当客户端收到服务端的FIN报文后,会回复一个ACK作为确认,ack值是q+1,此时客户端处于time-wait状态,等待2msl(最长报文存活时间,防止服务端没有收到最后的ACK)后就会自动关闭并处于closed状态。当服务端收到客户端ACK时,就会关闭连接,处于closed状态。