网络 -- TCP三次握手和四次挥手

1.TCP三次握手和四次挥手过程发生在TCP的"连接管理机制"中

2.先介绍一下在三次握手和四次挥手过程中需要用到的三个标志位:

SYN: 请求建立连接; 双方都需要建立连接

ACK: 确认数据是否收到. (收到发送1, 没收到发送0)

FIN: 结束标志位.(携带这个标志位, 置为1表示关闭当前的连接)

 

一般发送数据的称为客户端, 接收数据的称为服务端, 但是没有绝对的称呼

3.建立连接的请求(3次握手的过程)

当客户端向服务端发送请求数据时, 客户端的数据会携带SYN标志位, 请求与服务端建立连接;  而此时只能表示客户端向服务端发送了建立连接的请求, 但是并不知道服务端是否愿意与客户端建立连接.

此时服务端会向客户端发送一个携带ACK标志位的回复, 表示服务端答应与客户端建立连接. 等于就是给客户端一个回复"我答应你啦"

到这里, 只完成了客户端到服务端所建立的单向连接; 服务端到客户端还没有建立链接呢

因此, 服务端也会发送一个携带SYN标志位的数据给客户端, 请求与客户端建立连接;

这时候有两个标志位(一个是ACK,一个是SYN)都要去客户端那里, 为了提高效率, 于是ACK就可以搭个顺风车跟着SYN一起回客户端那里(这里体现了TCP另一个机制: 捎带应答机制), 表示服务端发送数据时可以将两个标志位合并在一起将数据发送给客户端

当客户端收到了来自服务端的" 带着ACK标志位的回复 "以及" 带着SYN标志位的请求 "时, 对于确认建立连接的回复就收下啦, 不再做处理;  而对于建立连接的请求, 同样的, 则会发送一个携带ACK标志位的进行确认, 表示愿意和服务端建立连接

此时, 已建立连接(三次握手过程结束)

4. 关闭连接的请求(四次挥手过程)

当客户端想要关闭和服务端的连接时, 会发送一个携带FIN关闭连接的请求给服务端, 当服务端接收到这个请求时, 答应关闭连接时, 会发送一个携带ACK标志位的数据给客户端进行确认, 表示收到了客户端想要关闭连接的请求;

但是这个关闭连接的请求仍然是客户端单方面发送给服务端的, 表示客户端到服务端已经关闭, 此时还需要服务端向客户端发送关闭连接的请求, 才能彻底关闭.

因此服务端向客户端发送携带一个FIN标志位关闭连接的请求,  同样客户端收到了这个关闭连接的请求后会向服务端发送携带一个ACK标志位的回复, 表示确认收到了服务端关闭连接的请求, 来进行双方的关闭.

以上, 已关闭连接(四次挥手过程结束)

5. TCP建立连接握手为什么是3次?为什么可以合并, 捎带应答把数据一起发送过去? 而为什么关闭连接挥手的过程是4次?为什么不能合并呢?

      对于3次握手建立连接中, ACK和SYN可以合并, 是因为ACK和SYN在建立连接时是同一个数据包发送过去的, 都在一个报文里面, 可以合并, 将两个标志位都置为1即可

      对于4次挥手关闭连接中, 是不能将ACK和FIN同时置为1的, 因为一个是操作系统内进行关闭的, 自己程序控制不了. 而另一个是用户进程自己调用close方法自动关闭的.  两个部分不是一个主体完成, 两个部分无法合并

6. 为什么需要四次挥手?

    MSL是TCP报文里面最大生存时间, 它是任何报文段被丢弃前在网络内的最长时间

   四次挥手, 就是客户端和服务端分别释放连接的过程.

   客户端在发送完最后一次确认之后, 还要等待2MSL的时间

主要有两个原因, 一个是为了让服务端能够按照正常步骤进入CLOSED状态, 二是为了防止已经失效的请求连接报文出现在下次连接中.  

   解释:

(1) 由于客户端最后一个ACK可能会丢失. 这样服务端就无法正常进入CLOSED状态. 于是服务端会重传请求释放的报文, 而此时客户端如果已经关闭了, 那就收不到服务端的重传请求, 就会导致服务端不能正常释放. 而如果客户端还在等待时间内, 就会收到服务端的重传, 然后进行应答, 这样服务端就可以进入CLOSED状态了.

(2) 在这2MSL等待时间里, 本次连接的所有报文都已经从网络中消失, 从而不会出现在下次连接中

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值