TCP协议
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流
的传输层通信协议,由IETF的RFC793 定义。
TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。
TCP的主要特点
支持面向连接的服务(IP不可靠,TCP自己解决)
支持字节流传输(无丢失重复乱序,缓存,收端判断位置)
支持全双工通信(收发双方均设置有缓存)
支持多个并发连接(套接字支持一对多的连接)
支持可靠的传输服务(序号确认、流量控制、拥塞控制)
TCP报文格式
TCP报文又称为报文段(segment)
TCP报头长度为20~60B。其中,固定部分长度为20B;选项部分长度可变,最多为40B
TCP连接建立 三次握手
三次握手是TCP连接建立过程中的一种协议,用于确保客户端与服务器之间能够正常通信。
三次握手的过程如下:
1. 客户端向服务器发送一个SYN(同步)报文,表示客户端要发起连接请求。
2. 服务器收到SYN报文后,回复一个SYN+ACK(同步+确认)报文,表示服务器已收到客户端的连接请求,并且同意建立连接。
3. 客户端收到服务器的SYN+ACK报文后,再回复一个ACK(确认)报文,表示客户端已收到服务器的确认,并且连接建立成功。
通过三次握手,客户端和服务器可以确认彼此之间的连接状态,确保双方都准备好进行数据传输。每次握手都需要等待对方的确认,以确保可靠性和数据的准确传输。
三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,由于网络延迟等原因,服务端可能会认为是新的连接请求,从而产生错误。通过三次握手,可以防止这种情况的发生,确保连接的稳定和可靠性。
TCP连接释放 四次挥手
四次挥手是指在TCP连接中,断开连接的过程。它是建立在三次握手的基础上的,用于确保双方都完成了数据传输并且关闭连接。
四次挥手的过程如下:
1. 主动关闭方(Client)发送一个FIN(结束)报文给被动关闭方(Server)来请求关闭连接。
2. 被动关闭方收到FIN报文后,发送一个ACK(确认)报文作为应答,表示已收到关闭请求。
3. 被动关闭方发送一个FIN报文给主动关闭方,表示它也准备关闭连接。
4. 主动关闭方收到FIN报文后,发送一个ACK报文作为应答,表示已收到关闭请求。此时连接被完全关闭。
通过四次挥手,双方都可以确认对方已经收到关闭请求并完成了关闭操作。这样可以保证数据的可靠传输和连接的正常关闭,避免数据丢失或混乱。
需要注意的是,在四次挥手的过程中,每次发送报文都需要等待对方的确认,因此会有一定的延迟。而且在关闭连接后,如果有未到达的数据包仍然在传输中,会被丢弃,因此需要在应用层确保所有数据都已经传输完毕再进行关闭操作。
在TCP的三次握手和四次挥手过程中,需要注意以下问题:
1. 重复的握手或挥手请求:在网络中,可能出现因为网络延迟、丢包或其他原因导致的报文重复发送的情况。
给出建议:
接收方需要在收到重复的请求时进行判断,只响应一次,并忽略后续的重复请求。
2. 超时和延迟:在握手和挥手过程中,由于网络延迟或其他原因,可能导致某个报文的确认丢失或长时间未收到。
给出建议:
发送方需要设置适当的超时时间,并在超时后进行重传操作。接收方需要及时响应并发送确认,以避免不必要的延迟。
3. 半开连接:在四次挥手的过程中,可能出现半开连接的情况,即一方已经关闭连接,而另一方仍然发送数据。
给出建议:
接收方需要在收到关闭请求后,停止发送数据,并回复确认报文。发送方也需要在收到确认后停止发送数据,并进行关闭操作。
4. 状态同步:在三次握手和四次挥手的过程中,双方需要保持状态的同步,确保双方在正确的时间点进行操作。
给出建议:
发送方和接收方都需要记录连接的状态,并根据规定的流程进行操作,确保双方的操作顺序正确。
5. 拥塞控制:在TCP连接建立和关闭的过程中,可能会出现拥塞的情况,即网络中的传输带宽不足以处理全部的数据流量。
给出建议:
TCP协议有拥塞控制机制,可以根据网络状况动态调整数据传输的速率,以避免网络拥塞。