一、说说HTTP中TCP的三次握手
SYN-----同步标记位;ACK-----确认标记位;FIN-----终止标记位
seq-----序列号;ack-----确认号,只有当ACK为1时有效
第一次握手
:客户端发送SYN=1和随机产生的序列号seq=x进行请求连接,然后客户端进入SYN_SEND状态第二次握手
:服务端发送SYN=1,ACK=1,ack=x+1和随机产生的序列号seq=y回应,然后服务端进入SYN_RCVD状态第三次握手
:客户端发送ACK=1,ack=y+1和seq=x+1,然后客户端进入ESTABLISHED状态;当服务端收到包后也进入ESTABLISHED状态- TCP握手结束,进行数据传输
二、为什么是三次握手而不是二次或四次握手
答: 第二次握手时服务端响应客户端的请求并做出同步连接,如果只有二次握手,这时就建立好了连接;然而当客户端第一次发送请求时由于网络或者其他原因导致包停留而没有发送服务端,客户端由于没接到响应包会再次发包请求,第二次这个正常并传输数据,当第二次连接结束后第一次发送的包发给服务端了,然后服务端响应再次建立连接了,但客户端已经没有数据要传输了从而导致浪费资源;所以两次握手会让滞留的失效的连接再次连接从而导致资源的浪费,还有三次握手是让双方都互知可以通信了
,三次握手客户端已经知道服务端知道自己要请求连接,而服务端也知道了客户端知道自己同意并进行同步连接了,那么就可以进行正常传输了,如果还进行第四次握手,就比较多余了,也由于这次多余的握手浪费了资源
谢谢阅读,如有不对之处请指出!