Net1

tcp 三次握手time_wait

This project is maintained by wangfakang

三次握手四次挥手的过程:

1.tcp协议的简单讲解:

   首先tcp是位于传输层的协议,tcp协议的特点:面向连接,字节流,可靠传输等特点.

2.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.

3.tcp断开连接时的四次挥手:

   为何建立连接的时候就只需要三次握手,而断开连接的时候就要四次挥手恩?原因很简单,由
   于此种建立的连接是双向的,要彼此都断开才是真的断开了,否则会处于一种半连接状态.
   其过程如下:

   当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,这样可以进行    迟来的报文进行丢弃.

4.什么情况下我们会收到一个rst(复位报文段):

  第一种:当我们访问一个不存在的一个端口的时候.
  第二种:当向处于time_wait的状态的端口发送连接.
  第三种:当向半连接状态的对端写数据的时候(注意对端是指主动断开的一端).
  第四种:异常终止对方连接,可以向对端发送一个rst进行断开.

5.tcp报文的结构:


  16位源端口           16位目标端口
 

                 32位序列号       

          32位确认号 
4位头部长度 6 U A P R S F   16位窗口大小

16位校验和            16位紧急指针 

                选项最多40字节    

      

相关6个标志位解释:

URG:紧急数据指针
ACK:确认
PSH:立即接受缓冲区数据
RST:复位
SYN:同步
FIN:结束报文

 

欢迎一起交流学习

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

Thx

Author