tcp三次握手的过程,accept发生在三次握手哪个阶段?

tcp三次握手的过程,accept发生在三次握手哪个阶段?

第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接

<< TCP三次握手(Three-Way Handshake)是建立可靠连接的过程。它是传输控制协议 (TCP) 的核心机制之一,用于确保两个主机之间通信的可靠性。下面是详细的介绍: ### TCP三次握手过程 1. **第一次握手** - 客户端发送 SYN 包到服务器,并进入 SYN_SENT 状态。 ```java // Java 中通过 Socket 创建客户端时会触发此阶段逻辑 try { Socket socket = new Socket("serverAddress", port); } catch (IOException e) { e.printStackTrace(); } ``` 在这个步骤中,客户端向服务端发起请求并设置一个随机序列号 `x`。 2. **第二次握手** - 服务端接收到 SYN 请求后返回确认包 ACK 并带上自己的初始序列号 `y` 同时将状态变为 SYN_RCVD。 ```java // ServerSocket 监听来自客户的请求 ServerSocket serverSocket; try { serverSocket = new ServerSocket(port); Socket clientSocket = serverSocket.accept(); } catch (Exception e){ System.out.println(e.getMessage()); } ``` 此外,在这一步还会有对上一歩中的SYN进行ACK回应的动作。 3. **第三次握手** - 当客户再次收到服务端传来的信息之后回复最后一个ACK给服务端表明已经准备完毕可开始数据交互了,此时双方都进入了 ESTABLISHED 状态表示现在可以正常地互相传递资料了. ```java // 假设我们已经有了socket实例,则可以通过OutputStream写出消息等操作代表正式的数据交换开始了. try{ OutputStream outStream=clientSocket.getOutputStream (); }catch(IOException ioExcep){} ``` ### 解释原因: 之所以要经过三个回合才能完成整个链接构建是因为每个方向都需要单独被验证以保证任何一方都能正确接收到来自另一方的信息并且没有丢失或错误的情况发生。如果只有两次的话就不能完全做到这一点所以增加了额外的一次检查从而提高了系统的稳定性与安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值