TCP三次握手、四次挥手(超详细)
TCP协议概述
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,旨在适应支持多网络应用的分层协议层次结构。TCP的主要特点如下:
- 面向连接:TCP提供了一种可靠的、面向连接的字节流服务,能够保证数据在传输过程中的完整性和可靠性。
- 可靠性:TCP通过一系列机制确保数据的可靠传输,包括数据包的排序、丢失检测和重传等。
- 字节流:TCP将数据看作字节流,并将其实时传输到接收端。
- 流量控制:TCP具有流量控制机制,可以防止接收端因接收数据过快而无法处理的情况。
- 拥塞控制:TCP具有拥塞控制机制,当网络拥塞严重时,可以减缓发送速率,避免数据丢失。
TCP与UDP的区别
TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议(IP)中两种主要的传输层协议,它们有以下区别:
- 连接性:TCP是面向连接的,在数据传输之前需要通过三次握手建立连接,并在传输结束后通过四次挥手关闭连接。而UDP是无连接的,发送数据之前不需要建立连接。
- 可靠性:TCP提供了数据传输的确认和重传机制,能够保证数据的有序、可靠传输,适用于需要可靠通信的应用,如网页浏览、电子邮件等。而UDP则没有这样的保证,可能会出现数据丢失、重复或者乱序的情况,但它的简单性使其在实时应用(如音频和视频流)或需要快速传输的应用(如DNS查询)中得到广泛应用。
- 速度:由于TCP的可靠性和顺序性,其数据处理速度相对较慢。而UDP由于无需确认和重传,处理速度快,适用于对实时性要求高的应用,如流媒体、在线游戏等。
- 数据流量控制和拥塞控制:TCP具有复杂的数据流量控制和拥塞控制机制,可以根据网络状况动态调整数据传输速度,以避免网络拥塞。而UDP没有这样的控制机制。
- 应用场景:TCP主要用于需要可靠、有序数据传输的应用,如网页浏览、电子邮件、文件传输等。而UDP则适用于实时应用,如流媒体、在线游戏、VoIP(语音通话)等。
工作原理
TCP的工作原理主要包括以下几个方面:
- 建立连接:TCP通过三次握手协议建立连接,以防止错误的连接请求。
- 数据传输:TCP将数据分割成适当长度的报文段,并通过IP协议传输到接收端。接收端对已成功收到的字节发回一个相应的确认(ACK),如果发送端未收到确认,将重传数据。
- 关闭连接:当数据传输完毕后,TCP通过四次挥手协议关闭连接。
TCP建立连接(三次握手)
三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。
- 第一次握手
客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。 - 第二次握手
服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。 - 第三次握手
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
过程示意图
TCP断开连接(四次挥手)
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
- 第一次挥手
客户端发起挥手请求,向服务端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。 - 第二次挥手
服务端收到了客户端发送的FIN报文段,向客户端返回一个标志位是ACK的报文段,ack设为seq加1,客户端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。 - 第三次挥手
服务端向客户端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。 - 第四次挥手
客户端收到服务端发送的FIN报文段,向服务端发送标志位是ACK的报文段,然后客户端进入TIME_WAIT状态。服务端收到客户端的ACK报文段以后,就关闭连接。此时,客户端等待2MSL的时间后依然没有收到回复,则证明服务端已正常关闭,那好,客户端也可以关闭连接了。
过程示意图
参考文章:https://zhuanlan.zhihu.com/p/108504297