什么是TCP协议

发布时间:2018/7/13 9:40:00

TCP协议

TCP协议基本定义;
   TCP位于TCP/IP模型的传输层,它是一种面向连接的端到端协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。

TCP协议连接方式;
   TCP允许一个主机同时运行多个应用进程。每台主机可以拥有多个应用端口,每对端口号、源和目标IP地址的组合唯一地标识了一个会话。
   TCP通常使用IP作为网络层协议,这时TCP数据段被封装在IP数据包内。TCP数据段由TCP Header(头部)和TCP Data(数据)组成。TCP最多可以有60个字节的头部,如果没有Options字段,正常的长度是20字节。(TCP是一种可靠的,面向连接的全双工传输层协议)
   TCP连接的建立是一个三次握手的过程。
1. 主机A(通常也称为客户端)发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号(seq)为a。

2. 服务器A回复标识了SYN+ACK的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认。

3. 主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文的确认。
(目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复)
注:TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。
TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。

TCP状态
1.CLOSED:表示初始状态.

2.LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受连接。

3.SYN_RCVD:这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手 过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。

4.SYN_SENT:这个状态与SYN_RCVD有关,当客户端发送SYN报文,因此也随即会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

5.ESTABLISHED:表示连接已经建立了。

6.FIN_WAIT_1:其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当接受到对方回应ACK报文后,则进入到FIN_WAIT_2状态。

7.FIN_WAIT_2:实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求关闭连接,另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。

8.TIME_WAIT:表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标 志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

9.CLOSING:这种状态比较特殊,正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却收到了对方的FIN报文。(如果双方几乎在同时close一 个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接)。

10.CLOSE_WAIT:这种状态的含义其实是表示在等待关闭。当对方close一个SOCKET后发送FIN报文给自己,系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。并确认是否还有数据发送给对方,如果没有的话, 就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。

11.LAST_ACK: 被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,即可以进入到CLOSED可用状态。

全部11种状态
1. 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。
2. 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。
3. 共有的:(1)CLOSED (2)ESTABLISHED 。

LISTEN - 侦听来自远方TCP端口的连接请求;   
SYN-SENT -在发送连接请求后等待匹配的连接请求;   
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;   
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;   
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;  
FIN-WAIT-2 - 从远程TCP等待连接中断请求;   
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;   
CLOSING -等待远程TCP对连接中断的确认;   
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;   
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;   
CLOSED - 没有任何连接状态;

TCP攻击方式

1.完成三次握手后,不发送任何报文,一直维持这些TCP连接。
2.完成三次握手后,立刻发送FIN或RST报文,释放本端连接,同时快速发起新的连接。
3.连接过程中呈现给服务器端很小的TCP windows size,导致服务器TCP协议栈资源耗尽。
4.发送大量TCP重传请求,以很小的流量即可导致被攻击网络上行链路拥塞。



Copyright© 2004-2020 河南海腾电子技术有限公司 版权所有   经营性ICP/ISP证 备案号:B1-20180452   豫公网安备 41019702002018号    电子营业执照