tcp连接的建立和释放(握手与挥手)

tcp连接的建立过程(握手)

在这里插入图片描述
图中字符串含义:ACK是确认位的意思,ACK=1代表这个确认报文是有意义的、有效的,如果等于0,就可以忽略掉,是没有意义的
ack代表的是确认位字段的值

三次握手事实上是发送了三次报文(三报文握手),它其实只握了一次手,就是建立了一次连接
客户机向服务器发送请求,需要建立连接,
在建立tcp连接之前,客户机、服务器tcp是处于closed状态,
客户机向服务器发送一个报文(头部是同步号SYN,序列号seq,报文是有序列号的,序列号是不断增加的),当服务器被动打开一个连接时(刚开始需要各自打开tcp连接),打开之后它就处于监听状态,等着客户机发送第一次的握手报文,收到了客户机发送的报文之后,它就会立刻向客户机发送一个确认报文,客户机收到这个确认报文之后,客户机也发送一个确认报文给服务器端(客户端确认服务器发送的确认报文客户端是接收到的)
注意:
客户机——>服务器——>客户机,可以说已经建立连接了,为什么最后还要再由客户机发送一个确认报文到服务器?
之所以在发送一个确认报文,是因为tcp连接刚开始建立时客户机发送的请求报文可能会因为网络的某种关系导致滞留或阻塞,没有传递到服务器端,这时客户机会重新发送一个请求报文,这次是成功连接了的,当关闭此次连接后(即失效),在网络中滞留的报文此时又生效了,传到服务端,服务端给发送这条报文的主机发送一个确认报文,而客户机已经断开连接了,所以它无法再发送确认报文,这就是客户机再次发送确认报文到服务端的原因

tcp连接的释放过程

在这里插入图片描述
首先,客户机主动关闭
当客户机需要关闭tcp连接时,就向服务器发送一个报文(头部信息有效字段是FIN=1,序列号u),服务器接收到这条报文后,知道你要关闭连接了,就给客户机发送一个确认报文(现在客户机收到这条报文后,客户机到服务器这样的一个方向tcp连接就已经断开了,此时客户机就无法再向服务器发送其它任何的信息)客户机——>服务器(此方向失效)
其次,服务器被动关闭
服务器——>客户机(此方向还是正常连接的),服务器向客户机又再次发送一个报文,是因为服务器可能还有数据需要向客户端传输(当客户机主动关闭,并且服务端不需要向客户端再传输数据时,两边同时关闭tcp连接),当数据传送完之后,整个服务器端给客户端发送一个报文(我也要关闭了),客户端发送一条确认报文(那你就关闭吧)
注意:等待2MSL
是因为客户机向服务端最后发送的确认报文,服务端可能没有收到,服务器端就会认为是它发送的关闭这条数据报文没有发出去,所以才没有收到来自客户端的一个确认报文,这样的情况下,服务器端就会再次发送关闭这样的一个报文到客户机
等待2MSL,在此时间段,当没有服务端再次向客户端发送它要关闭的报文信息时,说明服务端接收到了客户端发给它的确认报文

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值