三次握手面试题java_java面试题三次握手和四次挥手-嗨客网

题目

对 tcp 了解吗?讲讲它的三次握手和四次挥手?为什么需要三次握手,为什么需要四次挥手。

答案

三次握手

第一次握手:客户端向服务器发送连接请求,这个时候报文首部中的同步为 SYN = 1,同时生成一个随机序列号 seq = x。

第二次握手:TCP 的服务器如果同意连接,就发出确认报文。确认报文是 ACK = 1,SYN = 1,并带有一个确认号 ack = x +1,同时自己也生成一个序列号 seq = y。

第三次握手:TCP 客户端进程收到确认后,向服务器给出确认,确认报文是 ACK = 1,ack = y + 1。

ddbcbcc6f470eab63d5adb559dc03166.png

四次挥手

第一次挥手:客户端发送结束请求给服务端,报文有 FIN = 1,其序列号为 seq = u。

第二次挥手:服务端收到客户端发起的结束请求后返回 ACK = 1 , ack = u +1 ,并且自己生成一个序列号 seq = v。

第三次挥手:服务端向客户端发送关闭报文,FIN = 1,ack = u + 1, seq = w。

第四次挥手:客户端收到服务端请求之后发送 ACK 确认, ACK = 1,ack = w + 1,自己生成一个序列号 seq = u + 1。

ecf767f25db5bf856f29d58a84e0f233.png

为什么需要三次握手

在网络连接中会存在这样的情况,当第一次发起握手请求的时候,由于网络原因,在某个网络节点滞留了,这个连接请求就认为失效了,然后请求到服务端,服务端收到请求后会给客户端回应。如果没有三次握手,那么服务端就会一直连着,会浪费资源。

为什么需要四次挥手

当客户端发起关闭请求的时候,只表示没有新的数据发送给服务端了,但是不能表示当前的请求中所有的数据全部发送了。当服务端收到请求之后不会立刻关闭连接,会等一段时间,当自己这边的数据处理完之后,会给客户端发送关闭请求,告诉客户端,可以关闭了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值