TCP协议的重点知识点
TCP(传输控制协议)是一种面向连接、可靠的数据传输协议,工作在传输层,提供可靠的字节流服务。它是互联网协议栈中最重要、最复杂的协议之一,也是面试中常被问到的知识点。本文将详细介绍TCP协议的各个重要概念。
TCP基本特性
TCP主要具有以下基本特性:
-
面向连接:在传输数据前必须先建立连接,形成数据通道。
-
可靠传输:TCP确保数据完整可靠地到达,如果丢包会重新传输。
-
流量控制:发送方和接收方都有数据缓冲,通过滑动窗口机制控制传输流量,防止拥塞。
-
拥塞控制:TCP会监控网络拥塞状况,并根据具体算法调整发送速率。
-
顺序传输:TCP确保按序发送,接收端也按序接收和交付应用数据。
-
面向字节:TCP以字节流的形式发送数据,没有记录边界。
TCP三次握手
TCP在传输数据前,必须先通过三次握手建立连接。主要步骤如下:
-
客户端向服务器端发起连接,发送SYN数据包,syn=1,随机产生一个初始序号seq=x。
-
服务器收到SYN包,需要对这个连接请求进行确认,回传ACK包,ack=x+1,同时也发送一个SYN包,syn=1,初始序号seq=y。
-
客户端再回复确认,ack=y+1,此时连接建立,可以开始传输数据。
通过三次握手,客户端和服务器都确认了对方发回的ACK,连接可靠地建立,也同步了序号初始值。
TCP四次挥手
当需要关闭连接时,TCP通过四次挥手完成连接断开:
-
客户端发送FIN包,标志位fin=1,序列号为x。
-
服务器收到FIN后,发回ACK确认,ack=x+1。但是服务器还可以发送数据,此时称为半关闭。
-
服务器处理完毕后,发送FIN包,fin=1,序列号y。
-
客户端回复ACK,确认服务器端关闭,ack=y+1。
经过四次挥手,可以确保双方都交付完数据,然后同时关闭各自方向的连接。
TCP流量控制
TCP为了防止拥塞,使用了滑动窗口机制进行流量控制,主要原理是:
-
接收方会维护一个窗口大小rwnd,告知发送方自己还有多大缓存。
-
发送方根据rwnd调整实际发送量swnd,进行流控。
-
接收方根据网络和自身情况动态调整rwnd。
这样通过rwnd和swnd的配合就实现了可变化的流量控制。
TCP拥塞控制
TCP主要使用了四种算法处理网络拥塞:
-
慢开始:初始化时先使用较小的窗口,然后指数级增大窗口,快速探测网络。
-
拥塞避免:设置ssthresh阈值,超过时线性增大窗口,否则指数增大。
-
快重传、快恢复:接收方收到乱序包时,立即冲减ACK通知发送方,进入快恢复模式。
-
超时重传:连续重传超时还失败,则降低传输速率。
通过上述四种算法协同运作,TCP可以动态检测并调整传输速度,避免拥塞。
TCP与UDP的区别
TCP与UDP都是工作在传输层的协议,两者有明显区别:
-
TCP面向连接,UDP是无连接的。
-
TCP提供可靠传输,会处理确认、重传、流控等;UDP不可靠。
-
TCP面向字节流,没有边界;UDP面向报文包。
-
TCP有拥塞控制,UDP没有。
-
TCP的连接建立有消耗,UDP简单高效。
-
TCP用于对可靠性要求高的场景,如文件传输;UDP用于对实时性要求高的情况。
总结
TCP通过多种机制实现了可靠、高效的数据传输,是互联网协议栈中最重要的协议之一。理解TCP的原理对网络研发问题的分析至关重要。本文概括了TCP的核心知识点,希望可以帮助大家提高TCP协议方面的理解与应用。