TCP握手与挥手

 TCP握手与挥手
(1)三次握手:

      TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小(mss)信息。根据上面的图讲解通常情况下客户端计算机联系服务器计算机的过程:
      1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号1000(一个网络通讯中⽤用作临时的地)和一个窗口大小(mss:表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)这里为什么传1460呢? 那是因为1500字节是最大传输单元,TCP协议头部20字节,加起来刚好1500字节。
       2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号8000、对客户端的序列号的确认1001和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3.客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号8001的ACK报文,一个标准的TCP连接完成。
TCP 协议的目的是要保证在不可靠的信道中可靠的传输数据,还要提高效率,三次握手刚好能满足上面这两个要求。
 (2)四次挥手:

       由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
      TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
(1)客户端A发送一个FIN,其中包含关闭连接序号,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
       在断开主动断开连接完成后会进入TIME_WAIT状态并持续2MSL(MSL是报文网络中生存的最大生命周期)。
       那这里为什么需要2MSL的状态?
  1. 被动关闭连接的一方(图中的server)在一段时间内没有收到对方的ACK确认数据包,会重新发送FIN数据包,因而主动关闭连接的一方需要停留在等待状态以处理对方重新发送的FIN数据包。否则他会回应一个RST数据包给被动关闭连接的一方,会引起对方的关闭流程错乱。
  2. 在TIME_WAIT状态下,不允许应用程序在当前的IP和端口上和之前通信的client(这个client的IP和端口号不变)建立一个新的连接。这样就能避免新的连接收到之前的IP和端口一致的连接残存在网络中的数据包。这也是TIME_WAIT状态的等待时间被设置为2MSL的原因,以确保网络上当前连接两个方向上尚未接收的TCP报文已经全部消失。
































  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值