TCP的握手,挥手

对网络编程TCP的连接与断开过程中涉及到的握手与挥手的过程做一个总结

TCP的连接建立

首先了解TCP连接中使用的SYN,ACK等作用:

SYN (Synchronize) 同步序列编号,是TCP/IP建立连接时的握手信号,一个SYN包就是仅SYN标记为1的TCP包,通常由客户端首先向服务端发送一个SYN包。
(A)–>[SYN]–>(B)

ACK(Acknowledge character) 确认字符,表示发来的数据已经接受无误,在TCP/IP中,如果接受放成功接受到数据,则会回复一个ACK数据, SYN/ACK包是仅SYN 和 ACK 标记为1的包。
(B)–>(ACK/SYN)–>(A)

seq(Sequence Number) TCP数据包的序列号,将连接生存周期内传输的所有数据当作一个字节流,序列化就是整个字节流中每个字节的编号,在TCP三次握手中,通信双方会确认初始序号x/y,TCP每次传送的报文段中的序号字段值表示所要传送本报文中的第一个字节的序号。

ack,对接受到的数据的最高序列号确认,并向发送端返回一个下次接收时期望的TCP数据包序列号,例如seq=x,这返回的ack=x+1;

TCP连接的三次握手
三次握手过程
这里设定A为TCP客户端,B为TCP服务端,刚开始都是关闭状态,当要进行TCP连接的时候,A主动打开连接,发起请求,B被动打开连接,接受请求。
①:A首先向B发起一个连接请求,报文,设置同位符SYN=1;初始序号seq=x;
②: B收听到请求后,向A发出确认信息,确认报文段把SYN和ACK位都设置为1;确认号ack=x+1,设置自己的序号seq=y;
③:A收到B的确认后,向B给出一个确认,报文设置ACK=1;序号号seq=x+1,确认号ack=y+1;此时TCP连接建立, A进入了连接状态,B在收到A发的确认后也进入连接状态,连接成功建立。
此过程为TCP连接的三次握手。
三次握手的作用:
①:防止了已经失效的连接请求报文段突然传到了B,而产生错误。
例如:在A先向B发送了一个连接请求报文段,由于网络等各种原因,A没有收到B反馈的确认信息,于是A重新向B发送了一个连接请求,这次成功建立联系,在数据传输完毕后双方释放了连接。这时如果第一次A发送的请求报文由于各种延误在释放连接后才到达B。这是已经失效的报文,但是B收到报文后以为是A新的请求,于是向A发出确认报文,建立连接。如果没有三次握手确认,那么只要A发出连接请求报文,B收到发出确认就建立了连接。
如果是以上那种失效连接到达B,没有三次握手确认,A不会处理B的确认,但是B却认为建立了建立,开始等待A发送的数据,会浪费资源。
②:如果在A的第三次握手时,报文段丢失,那么A会认为已经建立连接,这时向B发送数据,B会直接向A发送RST包(Reset报文),表示连接异常终止,强制关闭TCP连接。

TCP连接的释放

四次挥手用于关闭已经建立的TCP连接
TCP的连接是双向的,因此连接的关闭也是双向进行的
FIN表示关闭连接。
释放过程
释放过程
释放:
刚开始,A/B都处于连接状态。
①:A先向B发起连接释放报文,停止发送数据,主动关闭TCP连接。在释放报文段中,FIN=1;seq=u(该序号等于前面已经传送过去的数据的最后一个字节的序号加1),此时A进入了FIN-WAIT-1(等待终止1),等待确认。
②:B收到A的连接释放报文后,发出确认释放连接报文段。此报文ACK=1;确认号ack=u+1,本身序号为v(该序号等于B前面已经传送过的数据的最后一个字节的序号加1),此时B进入关闭等待状态,TCP服务器通知上层应用连接关闭(被动)。A->B方向的连接释放。但是此时B到A的连接还是建立的,如果此时B发送数据,A仍可以接收,这就是第二次挥手。
③:在A收到B的确认后,进入终止等待2阶段,然后等待B发出释放连接报文段,这时B发出的链接释放报文段中,FIN=1,确认号还必须重复上次已发送过的确认号,即ack=u+1,序号seq=w,因为在半关闭状态B可能又发送了一些数据,因此该序号为半关闭状态发送的数据的最后一个字节的序号加1。此时进入最后确认状态,等待A的确认,此过程为第三次挥手。
④:A收到B的释放连接请求后,必须对此发出确认,确认报文段ACK=1,ack=w+1;seq=u+1,进入时间等待阶段。B在收到A的确认报文后进入closed状态。但是A要经过时间等待器的两个MSL后才能进入到closed状态。
四次挥手作用:
保障A发送的最后一个ACK确认报文到达B。因为如果A最后的确认报文丢失,那么B会超时重传释放连接报文,然后A再次确认,设置时间等待。如果没有时间等待,那么当A的确认报文发出后A即释放连接,当确认报文丢失后,B无法重传,也就收不到确认报文,无法进入closed状态。

在时间等待中,也放在了已经失效的连接请求报文出现在连接中。

其他的TCP状态:
PSH表示有 DATA数据传输;
RST表示连接重置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值