tcp 三次握手time_wait
This project is maintained by wangfakang
三次握手四次挥手的过程:
首先tcp是位于传输层的协议,tcp协议的特点:面向连接,字节流,可靠传输等特点.
首先client想server端发送syn(同步报文段)此时client的状态变为synsend,当server端
收到的时候其server状态变为synrecved.此时server进行向client发送syn 和 ack报文,当
client收到的时候server端的syn ack的时候则client状态变化为estableished,然后给server
发送ack当server端收到ack的时候则完成了三次握手,server状态变化为estableished.
为何建立连接的时候就只需要三次握手,而断开连接的时候就要四次挥手恩?原因很简单,由
于此种建立的连接是双向的,要彼此都断开才是真的断开了,否则会处于一种半连接状态.
其过程如下:
当client向server发送fin(结束报文)的时候,此时client的状态就变成fin_wait_1,当server收到
的时候就会向client发送ack此时client收到的时候client变为fin_wait_2而且server处于closed_wait,
此时状态就是一种半连接状态,方式二:此时如果server发送fin +ack的话则client直接变为time_wait,
server变为last_ack状态.最后当client发送ack,server收到的话就变成了close_wait.
注意:
上面提到的client变为time_wait状态,注意处于time_wait默认状态下,该连接是不可用的.之所以存在
一个time_wait状态,原因就是有可能server端没有收到c发的ack所以此时s会继续发送一个fin让其c给回复
ack.所以此时的c的连接是不可以与其他进行建立连接.
默认:
time_wait的时间是2倍的MSL(MSL:是报文段的最大生存时间),之所time_wait设置为2MSL,这样可以进行
迟来的报文进行丢弃.
第一种:当我们访问一个不存在的一个端口的时候.
第二种:当向处于time_wait的状态的端口发送连接.
第三种:当向半连接状态的对端写数据的时候(注意对端是指主动断开的一端).
第四种:异常终止对方连接,可以向对端发送一个rst进行断开.
16位源端口 16位目标端口
32位序列号
32位确认号
4位头部长度 6 U A P R S F 16位窗口大小
16位校验和 16位紧急指针
选项最多40字节
相关6个标志位解释:
URG:紧急数据指针
ACK:确认
PSH:立即接受缓冲区数据
RST:复位
SYN:同步
FIN:结束报文
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流