Tcp协议中的3次握手与4次挥手过程分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhou920786312/article/details/83850065

转载https://blog.csdn.net/u012824097/article/details/52490091

客户端与服务端的通信中步骤

  • 1建立Tcp连接
    • 3次握手
  • 2再进行数据传输
  • 3数据传输完成后,断开连接。
    • 4次挥手

建立Tcp连接

1 Client ---> Server:(员工:老板看到我发的消息没)

设置SYN=1,seq=J,并将该数据包和SYN请求信号发送给Server,Client进入syn_sent(发送)状态,等待Server确认。

2Server --->Client :(老板:看到了,你确定下看到我消息没)

接收数据包后,设置SYN=1,ACK=1,ack=J+1 ,seq=K,发送给Client,表示确认收到了Client的请求,Server进入syn_rcvd(已收到)状态;

3 Client---> Server:(员工:我也收到你的回复的,你看下收到我的回复了没,收到说明我们通信连接成功了)

Client:检查是否 ACK=1 && ack=J+1,如果是则设置ACK=1,ack=K+1,并将数据包发送给Server;

Server:检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入established(确认)状态,三次握手完成,

注意

半连接

在三次握手过程中,Server发送SYN+ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect)

SYN攻击

在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:

断开连接:

 

Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

1 Client---> Server(数据发送完了,关闭连接吧)

Client发送一个FIN,表示Client要发送的数据已经发送完成,请求结束连接,Client进入fin_wait_1状态;

2 Server---> Client(收到你的信息,请确定你也收到我的信息)

Server收到Client的FIN后,会向Client发送一个ACK,表示收到了Client的FIN请求,确认序号为收到序号(A)+1(即ack=A+1),Server进入close_wait状态(此时Server可能没有完成向Client的数据传输);

3 Server---> Client(收到你的信息,我的信息已发送完毕,请确定收到我的信息)

 当Server完成向Client的数据传输后,向Client发送一个FIN ,,表示Server已经完成发送,Client可以断开连接,Server进入last_ack状态;

4 Client---> Server(收到你的信息,我过一定就关闭了,你也关闭吧)

 Client:接收到Server的FIN后,Client进入time_wait状态,并向Server发送一个ACK,确认序号为收到序号(C)+1(ack=C+1)

Server:检查客户端信息正确,Server进入closed状态,Client断开连接,Server关闭连接,四次挥手完成。

注意

在time_wait状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。
 

猜你喜欢

转载自blog.csdn.net/zhou920786312/article/details/83850065
今日推荐