`
wen866595
  • 浏览: 269017 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

TCP连接建立

 
阅读更多

 

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
1
1
分享到:
评论

相关推荐

    TCP连接建立TCP连接建立

    ### TCP连接建立与终止的深度解析 #### 一、TCP连接建立:三次握手 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在计算机网络中广泛使用。TCP连接的建立是通过三次握手来完成的,...

    tcp连接建立-关闭-窗口-慢启动1

    1. **TCP连接建立** - 通常被称为“三次握手”(Three-Way Handshake)。在TCP连接开始时,客户端(Source Port)发送一个SYN(同步序列编号)包给服务器(Destination Port),其中包含了随机生成的初始序列号ISN。...

    TCP连接建立与终止过程剖析

    TCP连接建立与终止过程剖析

    TCP连接建立与管理[定义].pdf

    至此,TCP连接建立完成。 **四次挥手**: 1. **一次挥手**:当数据传输完成后,客户端A发送一个FIN(结束)标志的报文段,表示它不再发送数据,但仍然可以接收数据,序列号设为最后接收数据的序号加1。 2. **二次...

    TCP建立过程

    在监视结果中,我们可以看到TCP连接建立过程的详细信息,例如:SYN包、ACK包、SEQ号、ACK号等。这些信息对于理解TCP建立过程非常重要。 TCP建立过程是TCP协议的核心机制之一,它提供了可靠的数据传输服务,并广泛...

    Linux kernel tcp 连接建立详解listen_backlog

    在TCP连接的建立过程中,三次握手是一个关键步骤,它确保了通信双方能够建立一个可靠的连接。在Linux内核中,listen()系统调用是TCP服务器端用于监听来自客户端的连接请求。此调用的backlog参数控制了TCP服务器端...

    简单的TCP连接

    3. **ACK (确认)**:客户端接收到SYN+ACK后,发送一个单纯的ACK报文,确认服务器的ISN,至此,TCP连接建立完成。 **四次挥手**是TCP连接关闭的过程: 1. **FIN (结束)**:当一方完成数据传输,会发送FIN报文请求...

    java建立TCP长链接

    在TCP连接建立之前,需要经过三次握手的过程,而在连接结束后,通过四次挥手断开连接。 在Java中,我们通常使用`java.net.Socket`类和`java.net.ServerSocket`类来实现TCP通信。以下是建立TCP长连接的基本步骤: 1...

    查看系统的TCP连接情况

    在TCP连接建立之前,需要经过三次握手来确保双方都能正常通信。在连接过程中,每个TCP连接都有一个唯一的标识,即源IP地址、源端口号与目标IP地址、目标端口号的组合。 2. TCP连接的状态:TCP连接有多种状态,包括...

    利用ethereal分析tcp建立与释放过程

    利用ethereal分析tcp建立与释放过程

    TCP连接的建立与终止

    当服务器收到这个ACK后,也进入ESTABLISHED状态,至此,TCP连接建立完成。 TCP连接的终止则相对复杂,因为需要确保双方都已经知道对方不再发送数据。过程如下: 1. **FIN(结束)**:当一方完成数据传输,想要关闭...

    在连接建立状态下的TCP连接 收到SYN后会发生什么529-542

    TCP 连接建立状态下的 SYN 报文处理机制 在连接建立状态下的 TCP 连接中,如果收到 SYN 报文,会发生什么?这个问题的答案将在下面详细解释。 首先,需要了解 TCP 连接的基本概念。TCP 连接是由「四元组」唯确认的...

    TCP连接的建立与终止1

    以下是TCP连接建立的详细步骤: 1. 主动方(通常是客户端)向被动方(服务器)发送一个SYN(Synchronize Sequence Numbers)报文段,其中包含一个随机的序列号x。此时,TCP进入SYN_SENT状态。 2. 被动方接收到SYN...

    计算机网络实验5 - TCP数据包及连接建立过程分析

    "计算机网络实验5 - TCP数据包及连接建立过程分析" 本实验报告的主要目的是学习并分析TCP数据包的结构、含义,并研究TCP连接的建立过程和数据传输过程。实验使用Wireshark网络分析软件和实验文件“计算机网络实验....

    NS2中TCP连接建立模拟的改进

    传输控制协议(TCP,transmission control protocol)连接建立的“三次握手”过程中涉及对半...仿真结果可清晰地看到TCP连接建立过程中半连接表变化,从而满足TCP SYN洪泛攻击防控等研究中对TCP连接建立过程模拟的需要。

    wireshark抓取TCP连接及断开实验

    本实验旨在利用Wireshark这一强大的网络协议分析工具,深入探索TCP连接建立(三次握手)和连接释放(四次挥手)的过程,并通过实际操作加深对TCP协议的理解。 #### 实验原理 TCP协议是一种面向连接的、可靠的、...

    STM32F103控制 W5500 作为 TCP 客户端连接到 TCP 服务器—W5500STM32F103

    3. 数据传输:当TCP连接建立后,STM32F103可以通过SPI发送数据到W5500,由W5500封装成TCP报文并发送出去。同样,W5500接收到的数据也会通过SPI传回STM32F103,供应用程序处理。 4. 断开连接:当通信完成后,需要发送...

    TCP.rar_TCP发送数据_TCP连接

    最后,客户端发送一个ACK(确认)包,确认收到了服务器的响应,至此,TCP连接建立完成。 在C++中实现TCP连接,通常会用到套接字API,如Berkeley套接字接口。对于客户端,我们需要创建一个流套接字,然后调用`...

    Socket连接-TCP测试

    最后,客户端再次发送一个ACK包,确认服务器的响应,至此,TCP连接建立完成。 在Socket编程中,我们需要创建ServerSocket对象来监听客户端的连接请求,以及Socket对象来表示与特定客户端的连接。ServerSocket通常会...

Global site tag (gtag.js) - Google Analytics