TCP三次握手与四次挥手

TCP协议的建立

TCP是面向连接的的协议,连接后传送TCP报文。每次连接过程中都需要建立与释放。即三个过程:

- 连接建立
- 数据传送
- 连接释放

在建立连接时应考虑到的问题
- 要是每方确认对方的存在,而且确认成功收到连接的请求和有关数据,也要让自己知道请求成功
- 允许双方在建立连接时协商一些数据(最大窗口值,时间戳,服务质量等)
- 能够对运输实体资源(缓冲大小,连接表中的项目等)进行分配。

三次握手建立连接

TCP需要三次握手,建立连接

三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号交换TCP窗口大小信息。

这里写图片描述
B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后B服务器进程就处于监听状态,等待客户的连接请求。

- 第一次握手:A客户进程也要创建自己的TCB,再向B服务器发出连接请求报文段。同步位SYN=1,初始化序列seq=200.TCP规定SYN=1时,不能携带数据,但要消耗一个序列。这时,TCP客户进程进入同步已发送的状态。
- 第二次握手:B服务器收到连接请求报文段后,如同意建立连接,则向A发送确认。发送序号为500,确认序号为201,标志位SYN=1,ACK=1。这时B服务器进程进入同步收到状态。
- 第三次握手:A客户机收到服务器的确认信号后,还要向B服务器给出确认。发送信号为201(自己的发送序号+1),确认序号是501(对方的发送信号+1),标志位ACK=1.
此时TCP已经建立。

四次挥手连接释放

在数据传输结束后,通信的双方都可释放连接
这里写图片描述

  • 第一次:客户端向服务器发出连接释放报文段,并停止发送数据,主动关闭TCP连接。终止FIN=1,序号seq=u(传送数据最后一个字节+1)。这时客户机进入终止等待1状态
  • 第二次:服务器收到连接释放报文段给出确认。确认序号ack=u+1,自己的序号为sea=v,标志位ACK=1。然后服务器进入关闭等到状态。TCP服务器通知上层应用进程,此时客户端到服务器的方向的连接释放。TCP连接处于半关闭状态。客户端没有数据要发,但服务器有数据,客户端仍要接受。
  • 第三次:客户端收到服务器的确认后,就进入终止等待2状态。等待服务器的释放连接报文段。若服务器没有数据后,就向客户机发送同意释放连接的报文段。序号seq=w,确认序号ack=u+1.FIN=1,ACK=1。
  • 第四次:客户端收到服务器连接释放的报文段后,对此发出确认。ACK=1;seq=u+1,ack=w+1.然后进入时间等待状态。

    现在TCP连接还没有释放掉。必须经过时间等待计时器设置的时间2MSL后,客户端才能进入CLOSED状态。

    为什么建立连接是三次握手,连接释放是四次挥手

    建立连接三次握手主要是为了防止已经失效的报文段又传送到服务器。客户端发送的连接请求报文丢失没有收到确认。客户端就会重新再发一次。这时客户端就发送了2个请求连接报文段。当但客户端发送的第一个请求报文并没有丢失,而是在某些网络结点长时间滞留了,没有及时到达服务器。这一个失效的报文段延期到达服务器,但服务器以为客户端发送了新的连接请求。于是就确认连接。没有第三次握手,当服务器确认收到连接请求后,新的连接就建立了。由于客户端此时并没有发送连接的请求,而服务器以为建立连接了,就一直等待客户端的数据,此时资源浪费。采用三次握手建立连接,避免这种情况,第三次客户端不会向服务器发送确认,服务器收不到确认就不会建立连接。
    释放连接四次挥手:当服务器收到释放连接报文段时,并不会立即关闭socket,给客户端发送确认报文后,还需要把服务器的所有报文发送完,才能发送FIN连接释放报文。最后客户端确认报文。四次挥手,连接释放。

     为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

    保证客户端发送的最后一个ACK报文段成功达到服务器
    防止已失效的报文段出现在本连接中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值