一. TCP协议
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
基于流的方式;
-
- 面向连接;(在通信之前要通过三次握手建立链接)
- 可靠通信方式;(确保数据不会丢失)
- 在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;(拥塞控制)
- 通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。
因为有着拥塞控制和可靠数据传输的要求所以导致了TCP协议的传输效率相对于UDP要低,但是不会像UDP一样出现丢包现象。
二. TCP协议的报文格式
三. 链接状态
1.客户端
- CLOSED状态:为关闭状态;
- SYN_SENT状态:为请求连接状态,如果连接成功了就变为ESTABLISHED;
- ESTABLISHED状态:连接成功。
2.服务端
- LISTENING状态:监听状态, State显示是LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来;
- SYN-RCVD状态:收到和发送一个连接请求后等待对方对连接请求的确认;
- ESTABLISHED状态:连接成功
补充:SYN-RCVD状态,当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,
如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂。如果发现有很多SYN_RCVD状态,那你的机器有可能被SYN Flood的DoS(拒绝服务攻击)攻击了。
四. TCP的三次握手
五. 相关网络攻击
SYN Flood的攻击,在进行三次握手时,攻击软件向被攻击的服务器发送SYN连接请求(握手的第一步),但是这个地址是伪造的,如攻击软件随机伪造了51.133.163.101等地址;
服务器 在收到连接请求时将标志位 ACK和 SYN 置1发送给客户端(握手的第二步),但是这些客户端的IP地址都是伪造的,服务器根本找不到客户机,也就是说握手的第三步不可能完成;
这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级;
大量的伪造访问,服务端需要维护大量的半连接,同时需要不断的进行重试,这会消耗非常多的CPU 时间和内存。此时从正常客户的角度看来,服务器失去响应,这种情况我们称做: 服务器端受到了SYN Flood攻击(SYN洪水攻击 )