客户端向服务器端发送连接请求后,就被动地等待服务器的响应。典型的TCP客户端要经过下面三步操作:
1. 创建一个Socket实例:构造函数向指定的远程主机和端口建立一个TCP连接;
2. 通过套接字的I/O流与服务端通信;
3. 使用Socket类的close方法关闭连接。
服务端的工作是建立一个通信终端,并被动地等待客户端的连接。典型的TCP服务端执行如下操作:
1. 创建ServerSocket对象,绑定并监听端口
2. 通过accept监听客户端的请求
3. 建立连接后,通过输出输入流进行读写操作
4. 关闭相关资源
三次握手,四次挥手。第一次握手:客户端向服务器端发送连接请求包SYN,等待服务器回应;
第二次握手:服务器端收到客户端连接请求包SYN后,将客户端的请求包SYN放入到自己的未连接队列,此时服务器需要发送两个包给客户端;
(1)向客户端发送确认自己收到其连接请求的确认包ACK,向客户端表明已知道了其连接请求
(2)向客户端发送连接询问请求包SYN,询问客户端是否已经准备好建立连接,进行数据通信;即在第二次握手时服务器向客户端发送ACK和SYN包,此时服务器进入SYN-RCVD状态。
第三次握手:客户端收到服务器的ACK和SYN包后,知道了服务器同意建立连接,此时需要发送连接已建立的消息给服务器;向服务器发送连接建立的确认包ACK,回应服务器的SYN告诉服务器,我们之间已经建立了连接,可以进行数据通信。ACK包发送完毕,服务器收到后,此时服务器与客户端进入ESTABLISHED状态,开始进行数据传送。
TCP四次挥手过程
断开一个tcp连接需要“四次挥手”
第一次:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发送数据了,但是,此时,主动关闭方依然可以接收数据。
第二次:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1.
第三次:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我已经发完了,不会再给你发数据了。
第四次:主动关闭方收到FIN后,发送一个ACK给对方,确认序号为收到序号+1,至此,四次挥手完成。
模拟一种TCP短连接的情况:
在步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。
从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!
再模拟一种长连接的情况:
以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)