TCP的开放握手也称为
3
次握手(
3
-
way handshake
),因为这通常包括
3
条消息:一条从
客户端到服务器端的
连接请求
,一条从
服务器端到客户端的确认信息
,以及另一条从
客户端到服务器端的确认消息
。
Socket构造函数的调用与客户端连接建立时所关联的协议事件之间的关系:
客户端一收到服务器端发来的确认信息,就立即认为连接已经成功建立。
互联网是一种尽力而为(best
-
effort
)的网络,客户端的起始消息或服务器端的回复消息都可能在传输过程中丢失。出于这个原因,
TCP
协议实现将以递增的时间间隔重复发送几次握手消息。如果
TCP
客户端在一段时间后还没有收到服务器的返回消息,则发生超时并放弃连接。这种情况下,构造函数将抛出
IOException
异常。连接的超时通常比较长,因此要经过几分钟的时间
Socket
构造函数才会失败。
“SYN_SENT
”是在第一条和第二条握手消息之间,客户端状态的专业名称。
客户端底层的数据结构:
服务器Socket
启动:
当客户端的连接请求到来时,将为该连接创建一个新的套接字数据结构。新套接字的地址根据到来的分组报文设置:分组报文的目标互联网地址和端口号(分别为w.x.y.z
和
q
)成为该套接字的本地还联网地址和端口号;分组报文的源地址和端口号(
a.b.c.d:p
)则成为该套接字的远程互联网地址和端口号。注意:新套接字的本地端口号总是与
ServerSocket
的端口号一致。新套接字的状态设置为指示“正在连接(
Connecting
)”(在服务器方,专业术语称为
SYN_RCVD
),并将其添加到
ServerSocket
套接字数据结构所关联的一个未完全连接的套接字列表中。注意:
ServerSocket
自己并不改变状态,其地址信息也不会有任何改变。
除了创建一个新的底层套接字数据结构外,服务器的TCP
实现还要向客户端发回一个
TCP
握手确认信息。
在接收到客户端发来的3
次握手的第
3
条消息之前,服务器端的
TCP
并不会认为握手消息已经完成。第
3
条握手信息到来后,新数据结构的状态则设置为“
ESTABLISHED
”,并将其移动到
ServerSocket
数据结构关联的另一个套接字数据结构列表中,该列表代表了能够通过
ServerSocket
的
accept()
方法进行接收的已成功建立连接。(如果第
3
条握手消息接收失败,最终会将“
Connecting
”状态的数据结构删除。)
服务器程序调用了ServerSocket
的
accept()
方法后,只要其关联的套接字数据结构列表中有新的连接到来,该方法调用就立即停止阻塞。(注意,在调用
accept()
方法时,这个列表可能已经是非空状态。)此时,一个新的连接数据结构将从列表中移出,并为其创建一个
Sokcet
实例,作为
accept()
方法的返回值。
- 大小: 24.6 KB
- 大小: 18.9 KB
- 大小: 14.3 KB
- 大小: 23.8 KB
- 大小: 25.2 KB
分享到:
相关推荐
### TCP连接建立与终止的深度解析 #### 一、TCP连接建立:三次握手 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在计算机网络中广泛使用。TCP连接的建立是通过三次握手来完成的,...
1. **TCP连接建立** - 通常被称为“三次握手”(Three-Way Handshake)。在TCP连接开始时,客户端(Source Port)发送一个SYN(同步序列编号)包给服务器(Destination Port),其中包含了随机生成的初始序列号ISN。...
TCP连接建立与终止过程剖析
至此,TCP连接建立完成。 **四次挥手**: 1. **一次挥手**:当数据传输完成后,客户端A发送一个FIN(结束)标志的报文段,表示它不再发送数据,但仍然可以接收数据,序列号设为最后接收数据的序号加1。 2. **二次...
在监视结果中,我们可以看到TCP连接建立过程的详细信息,例如:SYN包、ACK包、SEQ号、ACK号等。这些信息对于理解TCP建立过程非常重要。 TCP建立过程是TCP协议的核心机制之一,它提供了可靠的数据传输服务,并广泛...
在TCP连接的建立过程中,三次握手是一个关键步骤,它确保了通信双方能够建立一个可靠的连接。在Linux内核中,listen()系统调用是TCP服务器端用于监听来自客户端的连接请求。此调用的backlog参数控制了TCP服务器端...
3. **ACK (确认)**:客户端接收到SYN+ACK后,发送一个单纯的ACK报文,确认服务器的ISN,至此,TCP连接建立完成。 **四次挥手**是TCP连接关闭的过程: 1. **FIN (结束)**:当一方完成数据传输,会发送FIN报文请求...
在TCP连接建立之前,需要经过三次握手的过程,而在连接结束后,通过四次挥手断开连接。 在Java中,我们通常使用`java.net.Socket`类和`java.net.ServerSocket`类来实现TCP通信。以下是建立TCP长连接的基本步骤: 1...
在TCP连接建立之前,需要经过三次握手来确保双方都能正常通信。在连接过程中,每个TCP连接都有一个唯一的标识,即源IP地址、源端口号与目标IP地址、目标端口号的组合。 2. TCP连接的状态:TCP连接有多种状态,包括...
利用ethereal分析tcp建立与释放过程
当服务器收到这个ACK后,也进入ESTABLISHED状态,至此,TCP连接建立完成。 TCP连接的终止则相对复杂,因为需要确保双方都已经知道对方不再发送数据。过程如下: 1. **FIN(结束)**:当一方完成数据传输,想要关闭...
TCP 连接建立状态下的 SYN 报文处理机制 在连接建立状态下的 TCP 连接中,如果收到 SYN 报文,会发生什么?这个问题的答案将在下面详细解释。 首先,需要了解 TCP 连接的基本概念。TCP 连接是由「四元组」唯确认的...
以下是TCP连接建立的详细步骤: 1. 主动方(通常是客户端)向被动方(服务器)发送一个SYN(Synchronize Sequence Numbers)报文段,其中包含一个随机的序列号x。此时,TCP进入SYN_SENT状态。 2. 被动方接收到SYN...
"计算机网络实验5 - TCP数据包及连接建立过程分析" 本实验报告的主要目的是学习并分析TCP数据包的结构、含义,并研究TCP连接的建立过程和数据传输过程。实验使用Wireshark网络分析软件和实验文件“计算机网络实验....
传输控制协议(TCP,transmission control protocol)连接建立的“三次握手”过程中涉及对半...仿真结果可清晰地看到TCP连接建立过程中半连接表变化,从而满足TCP SYN洪泛攻击防控等研究中对TCP连接建立过程模拟的需要。
本实验旨在利用Wireshark这一强大的网络协议分析工具,深入探索TCP连接建立(三次握手)和连接释放(四次挥手)的过程,并通过实际操作加深对TCP协议的理解。 #### 实验原理 TCP协议是一种面向连接的、可靠的、...
3. 数据传输:当TCP连接建立后,STM32F103可以通过SPI发送数据到W5500,由W5500封装成TCP报文并发送出去。同样,W5500接收到的数据也会通过SPI传回STM32F103,供应用程序处理。 4. 断开连接:当通信完成后,需要发送...
最后,客户端发送一个ACK(确认)包,确认收到了服务器的响应,至此,TCP连接建立完成。 在C++中实现TCP连接,通常会用到套接字API,如Berkeley套接字接口。对于客户端,我们需要创建一个流套接字,然后调用`...
最后,客户端再次发送一个ACK包,确认服务器的响应,至此,TCP连接建立完成。 在Socket编程中,我们需要创建ServerSocket对象来监听客户端的连接请求,以及Socket对象来表示与特定客户端的连接。ServerSocket通常会...