JAVAEE之网络原理(2)_传输控制协议(TCP)的连接管理机制,三次握手、四次挥手,及常见面试题

前言

 在上一节中,我们简单介绍了 TCP 协议的相关概念和基本报文格式,而且还介绍了TCP 协议原理中的 确认应答机制(安全机制)、超时重传机制,在本节中我们将会继续介绍 TCP协议原理中的连接管理机制(三次握手、四次挥手)。

连接管理机制(安全机制)

在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接
在这里插入图片描述

一、 三次握手

在这里插入图片描述

 最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端,被动打开连接的是服务器。TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态

三次握手过程可以详细概括如下:

  1. 第一次握手:TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态。

  2. 第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态

  3. 第三次握手 TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手。

为什么要进行第三次握手?

 采用三次握手的主要原因:防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

  • 第一次握手:客户端向服务器发送报文,证明客户端的发送能力正常。
  • 第二次握手:服务端接收报文并向服务器发送报文,证明服务器的发送嫩能力和接收能力正常。
  • 第三次握手:客户端向服务器发送报文,证明客户端的接受能力正常。

二、 四次挥手在这里插入图片描述

g.cn/direct/e1a46e31009e44f2980012b823314322.png)
 数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于 ESTABLISHED 状态,然后客户端主动关闭,服务器被动关闭。
三次挥手过程可以详细概括如下:

  1. 第一次挥手: 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态

  2. 第二次挥手: 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态

  3. 第三次挥手: 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

  4. 第四次挥手: 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成。

为什么要等待 2MSL?

emsp;MSL是TCP报文的最大生存时间
 主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。

为什么 TCP 挥手需要四次呢?

 服务器收到客户端的 FIN 报文时,内核会马上回一个 ACK 应答报文,但是服务端应用程序可能还有数据要发送,所以并不能马上发送 FIN 报文,而是将发送 FIN 报文的控制权交给服务端应用程序

  • 如果服务端应用程序有数据要发送的话,就发完数据后,才调用关闭连接的函数;
  • 如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数。

  从上面过程可知,是否要发送第三次挥手的控制权不在内核,而是在被动关闭方(上图的服务端)的应用程序,因为应用程序可能还有数据要发送,由应用程序决定什么时候调用关闭连接的函数,当调用了关闭连接的函数,内核就会发送 FIN 报文了,所以服务端的 ACK 和 FIN 一般都会分开发送。

什么情况会出现三次挥手?

 当被动关闭方(上图的服务端)在 TCP 挥手过程中,没有数据要发送 并且开启了 TCP 延迟确认机制,那么第二和第三次挥手就会合并传输,这样就出现了三次挥手。
在这里插入图片描述

TCP 延迟确认的策略:

  • 当有响应数据要发送时,ACK 会随着响应数据一起立刻发送给对方;
  • 当没有响应数据要发送时,ACK 将会延迟一段时间,以等待是否有响应数据可以一起发送;
  • 如果在延迟等待发送 ACK 期间,对方的第二个数据报文又到达了,这时就会立刻发送 ACK。

总结

 以上就是本节的主要内容,我们详细介绍了 TCP原理中的 连接管理机制,主要包括三次握手和四次挥手两部分,我们介绍了三次握手、四次挥手的主要过程。在下一节我们将会继续介绍 TCP 原理中的其他机制。

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaEE商品管理系统是一个基于JavaEE平台开发的系统,其数据传输主要包括两个方面:前端与后端的数据传输和数据库与后端的数据传输。 前端与后端的数据传输主要通过HTTP协议进行。当用户在前端页面上进行操作时,比如添加商品、修改商品信息等,前端会将相关数据通过HTTP请求发送给后端。后端收到请求后,会解析请求,获取相应的数据,并根据请求的类型进行相应的操作。操作完成后,后端会将处理结果通过HTTP响应发送回前端,前端接收到响应后会进行相应的处理,展示操作结果给用户。 数据库与后端的数据传输主要通过SQL语句进行。后端在收到前端的请求后,需要与数据库进行交互来操作商品相关的数据。后端会根据请求的类型,构建相应的SQL语句,并通过JDBC等数据库连接工具来执行SQL语句,将操作的结果返回给后端。后端再将数据库的操作结果通过HTTP响应返回给前端。 在数据传输过程中,为了保证数据的安全性和完整性,可以通过加密和校验等方式来进行数据的保护。比如可以使用HTTPS协议来加密HTTP请求和响应的数据,防止数据被中间人窃取或篡改。同时,可以对数据进行校验,比如对收到的请求数据进行合法性校验,防止恶意请求对系统造成影响。 综上所述,JavaEE商品管理系统的数据传输主要是通过HTTP协议在前端与后端之间进行数据交互,同时后端与数据库之间通过SQL语句进行数据传输。为了保证数据的安全性和完整性,可以采取加密和校验等措施。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值