TCP连接的三次握手和四次挥手

1.TCP报文段首部格式

在这里插入图片描述在这里插入图片描述为什么要介绍下首部格式,因为有几个以下概念需要先了解

  • 序号(Sequence number):TCP是面向字节流的,传送的每一个字节都按顺序编号,首部的序号字段值指的是本报文所发送的数据的第一个字节的序号。下一次发送的的序号值应为这次的序号加上数据字节长度。
  • 确认号(Acknowledgement number):期望对方下一个报文段的第一个数据字节的序号。
  • 确认ACK(Acknowledgement):ACK=1为有效。
  • 同步SYN(SYNchronization):SYN=1 表示是一个连接,请求或连接报文。
  • 终止FIN(FINis):用于释放连接,FIN=1,表示发送方已发送完毕。

2.三次握手

在这里插入图片描述
A向B发出连接请求报文段,同步位SYN=1,初始序号seq=x,TCP客户进程进入SYN-SENT(同步已发送)状态。
B收到连接请求报文段后,如果同意连接,向A发送确认。同步位SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y;TCP服务器进程进入SYN-RCVD(同步收到)状态。
A收到确认后,还需向B给出确认 ACK=1,seq=x+1,确认号ack=y+1,A进入ESTABLISHED(已建立连接)状态。
B收到后,也进入ESTABLISHED(已建立连接)状态。

为什么最后A还要发送确认连接?

如果没有最后一次A发送到B的确认,假设第一次连接A发送了两次(A认为第一次发送失败),就会多出一次连接被误以为新连接,就会使B误以为已建立连接,浪费资源。

3.四次挥手

在这里插入图片描述
A的连接释放报文终止控制位FIN=1,序号seq=u,A进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
B收到连接释放报文后即发出确认,确认号是ack=u+1,自己的序列号为v,B进入了CLOSE-WAIT(关闭等待)状态,此时tcp处于半关闭(half-close)状态,B到A的通道 未关闭。
A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发送连接释放报文。
B发送连接释放报文 FIN=1,seq=w,ack=u+1,B进入LAST-ACK(最后确认状态),等待A的确认。
A收到B的连接释放报文后,必须确认, ack=w+1,seq=u+1,进入TIME-WAIT(时间等待)状态,此时TCP连接没有释放掉。经过时间等待计时器(2MSL)后,A进入到CLOSED状态。

为什么等待2MSK时间

B收不到确认,B会超时重传,等待时间存在,就可以收到重传的报文
防止已失效的连接请求报文。

附:本文参考《计算机网络》第7版-谢希仁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值