TCP协议(传输控制协议)
TCP协议简单介绍
TCP(Transmission Control Protocol)[传输控制协议]
1.是一种面向连接的、可靠的、基于字节流的[传输层]通信协议
2.提供面向连接的可靠的数据传输、适合传输大数据、速度慢
3.用于2台机子之间的通信
4.在建立通信时必须经历TCP三次握手
5.在终止通信时必须经历TCP四次挥手
TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK)
TCP各个连接状态
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三次握手
TCP是面向连接的,在一方向另一方建立连接前或在一方向另一方发送数据之前,都必须在双方之间建立一条通道。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接通过三次握手进行初始化。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
第一次握手
在握手开始前,服务器先开启对应服务,进入LISTEN监听状态,服务器首先向服务器发送建立连接的请求报文段,请求报文段的内容为将SYN位置设置为1,seq(Sequence Number)设置为x,发送成功后客户端进入SYN_SEND状态,等待服务器确认连接请求
第二次握手
服务器在受到客户端发送的请求连接报文段以后,对客户端发送的请求进行确认,将ACK(Acknowledgment Number)设置为x+1,并对客户端发送确认收到请求连接的报文段,报文段内容为ACK+SYN,
SYN为1,seq为y,ACK为x+1,发送成功后服务器进入SYN_RCVD状态,等待客户端回复确认建立连接的请求
第三次握手
客户端收到服务器的请求报文段以后,将ACK设置为y+1,向服务器发送ACK报文段,发送完毕后客户端与服务器都进入ESTABLISHED状态,TCP三次握手完成,服务器与客户端可以进行数据传输
TCP四次挥手
TCP连接是全双工通信,因此每个方向都必须单独进行关闭,当一方完成数据传输任务就发送一个FIN来终止这个方向的连接,收到一个FIN就说明这一个方向上没有数据流动,但另一个TCP连接在收到一个FIN后仍能发送数据。TCP四次挥手首先是进行关闭的一方将执行主动关闭,另一方执行被动关闭。TCP连接断开需要发送四个包,因此成为四次挥手,客户端与服务器均可主动发送挥手动作
第一次挥手
主机1(服务器或客户端)设置seq(Sequence Number)位置为2,ACK(Acknowledgment Number)为y+1,向主机2发送一个FIN报文段,并进入FIN_WAIT_1状态,表示已经没有数据在发送给主机2
第二次挥手
主机2收到主机1发送的FIN报文段以后,向主机1发送一个ACK报文段,内容为seq=x+3(ACK为seq加1),表示同意主机1的关闭请求主机2,进入CLOSE_WAIT状态,等待主机1收到请求,主机1收到请求后1进入FIN_WAIT_2状态
第三次挥手
主机2继续向主机1发送一条FIN报文段,seq为y+1,请求主机1同意关闭连接,同时进入LAST_ACK状态
第四次挥手
主机1收到主机2的报文段以后,向主机2发送一条ACK报文段,内容为ACK=y+2
然后主机1进入TIME_WAIT状态,主机2收到ACK报文段以后关闭连接,不再向主机1发送数据,主机1等待2MSL后没有收到主机2的回复,则证明主机2已经成功关闭,主机1取消TIME_WAIT状态,关闭连接
TCP三次握手与四次挥手问题
为什么是三次握手不是两次或四次
两次握手
将第二次握手删除,不发送ACK报文段,不能确认连接安全性
将第三次握手删除,不向服务器发送报文段,不能建立可靠的连接
四次握手
将第二次握手分两次发送,第二次握手每次发送都会进入一个SYN_RCVD状态,造成SYN_RCVD状态过多
为什么是四次挥手
三次挥手,主机1如果不发送一个告诉主机2没有数据继续发送的信息,主机2收到关闭连接请求后还继续等着主机1发送数据
TIME_WAIT状态过多
TIME_WAIT状态过多主要发生在服务器上,服务器主动关闭多个连接
DDOS攻击
SYN_RCVD状态过多,发生在第二次握手与第三次握手之间,服务器在收到客户端请求后进入SYN_RCVD,客户端不发送信息回复服务器,服务器囤积SYN_RCVD请求,降低WEB服务器访问速度,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪
三次握手与四次挥手简单理解
三次握手
客户端:在吗
服务器:我在,你还在吗
客户端:我还在
开始通信
四次挥手
客户端:你没东西给我了,我想关闭连接
服务器:同意你关闭连接
服务器:我没有数据发给你了
客户端:好的,收到了
服务器先关闭连接,客户端等待2MLS后仍然没收到信息,则关闭连接