3分钟搞懂TCP通信过程!

一、需求?

网络的高速发展迫切需要解决两台计算机之间互相通信的问题。

二、面临的问题?

  1. 发送方如何确认接收方准备好接收信息了:解决方式是三次握手
  2. 信息量过大:解决方式是分段传输
  3. 信 息 丢 失 : 解决方式是失败重传

三、两台计算机通过TCP进行通信的过程?

  1. 建立连接:客户端和服务器需要通过三次握手建立连接
    tcp3ack
    第一次客户端发送syn问服务器:你能收到我消息不?
    第二次服务器发送消息问客户端:ack(我能收到消息)+syn(你能收到我消息不)?
    第三次客户端发送消息回答服务器:ack (能收到消息)
    进入estalished(连接已建立)状态
    2、发送消息:客户端会将一份数据分成多份来发送,最多发送三份数据,过段时间收到几份服务器的签收信息就再发送几份,保证不超过三份正在发送的数据,如果超时仍然收不到某些数据的签收信息就重新发送对应的数据信息。
    3、断开连接:通过四次挥手断开连接
    tcp4fin

第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。

第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。

第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。

第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。

猜你喜欢

转载自blog.csdn.net/peanutwzk/article/details/105398143