TCP是面向连接的传输层协议。
每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
TCP提供可靠交付的服务,无差错,不丢失,不重复,按序到达。
TCP提供全双工通信。
- 发送缓存:准备发送的数据&已发送但尚未收到确认的数据。
- 接收缓存:按序到达但尚未被接受应用程序读取的数据&不按序到达的数据。
TCP面向字节流:TCP把应用程序交下来的数据看成仅仅是一连串的无结构字节流。
流:流入到进程或从进程流出的字节序列。
TCP的连接建立
- 客户发送连接请求报文段,无应用层数据。
- 服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
- 客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。
SYN洪泛攻击
攻击者向服务器发送大量的SYN,SYN为TCP三次握手中第一个数据包,服务器为大量的请求分配缓存和变量,并发送确认报文段,但是攻击者对这些报文段不予确认,使得大量的TCP连接处于挂起状态,浪费服务器的CPU和内存,使得服务器死机。(占着茅坑不拉屎)
TCP利用滑动窗口机制实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口的大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取决于接收窗口rwnd和拥塞窗口cwnd的最小值。