tcp的三次握手和四次回收

一、三次握手

  三次握手建立tcp连接:

    1.客户端发送syn报文给服务端

    2.服务端收到客户端端syn报文,返回syn+ack应答报文,告诉客户端可以建立连接了

    3.客户端收到服务端的应答报文后,发送一个ack报文,告诉服务端我收到服务端的响应报文了,并且进入established状态

 第3步看起来好像有点多余,到底有什么作用呢?

   1.如果客户端第1步建立连接正好网络延时,syn报文没发送到服务端。客户端收不到ack报文则会再发起一次建立连接请求这是第二次请求,服务端返回ack建立连接。这是第一次请求到达了服务端,服务端则会认为又一次新的连接请求,再建立一个连接,这就浪费服务端资源了。

   2.第2步服务端返回ack报文时由于网络延时,没有及时返回给客户端。客户端此时就会认为服务端没有同意建立连接,就不继续往下运行了,不会发送数据给服务端。而服务端此时认为已经建立好连接了,一直在等客户端发送数据过来,浪费服务端连接资源。

 syn攻击:

 攻击者模拟客户端发送syn报文给服务端,服务端为这些请求建立连接,一直等待客户端的确认报文。由于这些连接长时间得不到释放,正常客户端的请求进不来被丢弃,导致服务变慢。

   

二、四次挥手

  四次挥手释放连接:

  1.客户端发送fin报文给服务端,客户端不会再发送数据请求给服务端了,从established状态进入fin-wait-1状态

      2.服务端收到fin请求后,返回ack应答报文

      3.服务端数据处理完后,发送fin报文给客户端,不再发送数据请求给客户端了,可以断开连接了

      4.客户端发送ack报文给服务端。

  为什么关闭连接需要四次挥手呢?

  对方发送fin报文过来,只是表示对方不再发送数据过来了,你可能还有数据需要处理,所以只是立即返回一个ack报文给对方,告诉对方收到了。然后处理完数据后,再发送fin报文给对方,告诉对方你处理完了,可以关闭连接了。

参考文章:

https://www.cnblogs.com/Andya/p/7272462.html

https://www.cnblogs.com/zmlctt/p/3690998.html

原文地址:https://www.cnblogs.com/ITyannic/p/12502381.html