`
deng131
  • 浏览: 673877 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

TCP/IP 三次握手协议过程

阅读更多
TCP握手协议

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。

SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

TCP三次握手协议
  在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
   第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,
等待服务器确认;
  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),
同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),
此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,
该队列为每个客户端的SYN包(syn=j)开设一个条目,
该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。
这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,
服务器进入ESTABLISHED状态。
一、TCP三次握手
  传输控制协议(Transport Control Protocol)是一种面向连接的,可靠的传输层协议。
面向连接是指一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,
该过程通常被称为“三次握手”。可靠性可以通过很多种方法来提供保证,在这里我们关心的是数据序列和确认。
TCP通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,
而且通过确认保证数据传输的完整性。要通过TCP传输数据,必须在两端主机之间建立连接。
举例说明,TCP客户端需要和TCP服务端建立连接,过程如下所示:

        TCP                  Client Flags      TCP Server
1 Send SYN (seq=w) ----SYN---> SYN Received
2 SYN/ACK Received   ACK Received, Connection Established
w: ISN (Initial Sequence Number) of the Client
x: ISN of the Server
  在第一步中,客户端向服务端提出连接请求。这时TCP SYN标志置位。客户端告诉服务端序列号区域合法,
需要检查。客户端在TCP报头的序列号区中插入自己的ISN。服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),
同时确认收到客户端的第一个TCP分段(ACK标志置位)。在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。
到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。
  二、TCP标志
  这里有必要介绍一下TCP分段中的标志(Flag)置位情况。如下图所示。

  *SYN:同步标志
  同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。
它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里
,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经
过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
  *ACK:确认标志
  确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认
编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
  *RST:复位标志
  复位标志有效。用于复位相应的TCP连接。
  *URG:紧急标志
  紧急(The urgent pointer) 标志有效。紧急标志置位,
  *PSH:推标志
  该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理
。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
  *FIN:结束标志
  带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。
三、TCP端口

  为了能够支持同时发生的并行访问请求,TCP提供一种叫做“端口”的用户接口
。端口是操作系统核心用来识别不同的网络回话过程。这是一个严格的传输层定义。通过
TCP端口和IP地址的配合使用,可以提供到达终端的通讯手段。实际上,在任一时刻的互联网
络连接可以由4个数字进行描述: 来源IP地址和来源端口,目的IP地址和目的端口。位于不同系统平台,用
来提供服务的一端通过标准的端口提供相应服务。举例来说,标准的TELNET守护进程(telnet daemon)通过监听TCP
23端口,准备接收用户端的连接请求。
  四、TCP缓存(TCP Backlog)
  通常情况下,操作系统会使用一块限定的内存来处理TCP连接请求。每当用户端发送的SYN标志置位连接请求
到服务端的一个合法端口(提供TCP服务的一端监听该端口)时,处理所有连接请求的内存使用量必须进行限定。如
果不进行限定,系统会因处理大量的TCP连接请求而耗尽内存,这在某种程度上可以说是一种简单的DoS攻击。这块
经过限定的,用于处理TCP连接的内存称为TCP缓存(TCP Backlog),它实际上是用于处理进站(inbound)连接请求的
一个队列。该队列保存那些处于半开放(half-open)状态的TCP连接项目,和已建立完整连接但仍未由应用程序通过a
ccept()调用提取的项目。如果这个缓存队列被填满,除非可以及时处理队列中的项目,否则任何其它新的TCP连接请求会被丢弃。
  一般情况下,该缓存队列的容量很小。原因很简单,在正常的情况下TCP可以很好的处理连接请求。如果当缓存
队列填满的时候新的客户端连接请求被丢弃,客户端只需要简单的重新发送连接请求,服务端有时间清空缓存队列以相应新的连接请求。
  在现实环境中,不同操作系统支持TCP缓冲队列有所不同。在BSD结构的系统中,如下所示:
OS Backlog BL+ Grace Notes
SunOS 4.x.x 5 8 
IRIX 5.2 5 8 
Linux 1.2.x 10 10 Linux does not have this grace margin
FreeBSD 2.1.0   32 
FreeBSD 2.1.5   128 
Win NTs 3.5.1 6 6 NT does not appear to have this margin
Win NTw 4.0 6 6 NT has a pathetic backlog
  五、TCP进站(Inbound)处理过程
  为了更好的讲述TCP SYN Flood的攻击过程,我们先来介绍一下正常情况下,TCP进站处理的过程。
  服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。
  分析报头信息: TCP层接收到相应的TCP和IP报头,将这些信息存储到内存中。
  检查TCP校验和(checksum):标准的校验和位于分段之中(Figure-2)。如果检验失败,不返回确认,
该分段丢弃,并等待客户端进行重传。
  查找协议控制块(PCB{}):TCP查找与该连接相关联的协议控制块。如果没有找到,TCP将该分段丢弃
并返回RST。(这就是TCP处理没有端口监听情况下的机制) 如果该协议控制块存在,但状态为关闭,服务
端不调用connect()或listen()。该分段丢弃,但不返回RST。客户端会尝试重新建立连接请求。
  建立新的socket:当处于监听状态的socket收到该分段时,会建立一个子socket,同时还有socket{},tc
pcb{}和pcb{}建立。这时如果有错误发生,会通过标志位来拆除相应的socket和释放内存,TCP连接失败。如
果缓存队列处于填满状态,TCP认为有错误发生,所有的后续连接请求会被拒绝。这里可以看出SYN Flood攻击是如何起作用的。
  丢弃:如果该分段中的标志为RST或ACK,或者没有SYN标志,则该分段丢弃。并释放相应的内存。
分享到:
评论

相关推荐

    TCP/IP协议三次握手

    三次握手,TCP/IP协议三次握手,TCP/IP协议三次握手

    tcp/ip,三次握手四次死挥手

    TCP/IP 协议群,三次握手四次死挥手 TCP/IP 协议群是计算机网络中最重要的基础协议之一,它是指一组使用 IP 进行通信时所必须用到的协议的统称。TCP/IP 协议群包括 IP、ICMP、TCP、UDP、TELNET、FTP、HTTP 等协议,...

    TCP/IP协议详解全三卷 下载

    书中深入探讨了这些协议的工作原理,如IP地址的分配、分片与重组、TCP的三次握手和四次挥手、拥塞控制等机制。 第二卷《TCP/IP实现》则侧重于实际的实现细节,比如TCP的连接管理、滑动窗口机制、超时与重传策略,...

    tcp/ip详解第三卷

    TCP是一种面向连接的、可靠的传输协议,通过三次握手建立连接,通过滑动窗口机制实现流量控制和拥塞控制,确保数据的正确无误传输。书中详细阐述了TCP的各种算法,包括慢启动、快速重传和快速恢复等,这些都是TCP...

    TCP-IP详解卷一:协议_TCP-IP详解_TCP/IP_tcp/ip详解_

    TCP通过三次握手建立连接,确保双方都有发送和接收能力。在数据传输过程中,TCP使用滑动窗口机制进行流量控制,防止拥塞,并通过确认和重传机制保证数据的可靠性。 IP(Internet Protocol)则是网络层的主要协议,...

    TCP/IP协议族(第四版)习题答案

    习题可能涉及到TCP的三次握手、四次挥手、拥塞控制、滑动窗口机制以及UDP的特点与应用场景。 应用层是最接近用户的层次,包含了众多的应用协议,如HTTP、FTP、SMTP、DNS等。HTTP用于网页浏览,FTP用于文件传输,...

    TCP/IP的三次握手建立连接(带图释)

    在TCP/IP的连接建立过程中,三次握手是至关重要的步骤。这一过程确保了双方都能正确接收和理解彼此的连接请求,从而建立起可靠的通信链路。下面详细解析三次握手的过程: 1. **第一次握手**:客户端(如图中的...

    tcp/ip协议.pdf

    TCP/IP的三次握手和四次挥手是理解TCP连接建立和终止的关键过程。三次握手指的是在建立连接时,客户端和服务器之间进行的一系列通信步骤,以确认双方的接收和发送能力;四次挥手则是断开TCP连接时双方进行的确认和...

    TCP/IP协议分析与应用学习资料

    TCP通过三次握手建立连接,并在数据传输结束后四次挥手断开连接。 IP(Internet Protocol)是网络层的主要协议,负责数据包在网络中的路由。它不保证数据包的顺序或可靠性,但提供了基本的寻址机制,使得数据包能够...

    TCP IP 详解三宗卷,tcp,ip详解(三卷全)pdf,C,C++

    卷3《TCP/IP详解:TCP事务协议》聚焦于TCP的事务处理,如TCP的三次握手和四次挥手过程,这是建立和断开TCP连接的关键步骤。同时,这本书也探讨了TCP的性能优化和异常情况处理,以及TCP与其他应用层协议的交互。 ...

    TCPIP网络协议.rar_22SZ_TCP/IP_antspjy_tcpip 编程_网络协议

    2. **三次握手**:TCP连接建立时需要通过三次握手确认双方可以进行可靠通信。 3. **四次挥手**:当通信结束,双方通过四次挥手来关闭连接。 4. **阻塞与非阻塞I/O**:理解如何处理网络I/O,选择合适的模式提高程序...

    tcp/ip网络协议

    书中可能涵盖了网络通信的基本概念,如IP地址、子网掩码、端口号,以及TCP连接的三次握手和四次挥手过程,还有拥塞控制、滑动窗口机制等高级主题。 TCP/IP协议族的复杂性和广泛应用使得理解其工作原理对于任何IT...

    图解TCP/IP协议

    建立TCP连接通道的过程涉及三次握手(three-way handshake)。第一次握手是客户端发送一个SYN(synchronize sequence numbers)包到服务器,以表达建立连接的请求,然后客户端进入SYN_SEND状态。第二次握手是服务器...

    TCP/IP详解 TCP/IP协议

    2. **传输层**:TCP协议的详细机制,如三次握手建立连接、四次挥手断开连接、拥塞控制、流量控制和超时重传。 3. **应用层**:HTTP、FTP、DNS等常见应用层协议的介绍,它们是如何利用TCP/IP进行通信的。 4. **网络...

    TCP/IP源码 完整的TCP/IP代码程序

    在源码中,你会看到TCP连接的建立(三次握手)、数据传输、以及断开连接(四次挥手)的过程。此外,TCP还采用了滑动窗口机制来控制流量和实现拥塞避免。 2. **IP(网际协议)**:IP负责将数据包发送到目标地址,它...

    tcp/ip详解,卷2:实现源码

    1. **TCP连接管理**:包括三次握手建立连接和四次挥手断开连接的过程。源码中会展示如何处理SYN、ACK、FIN等不同类型的报文段,以及超时重传和半关闭状态的处理。 2. **滑动窗口机制**:TCP使用滑动窗口来控制流量...

    TCP/IP协议学习PPT

    6. **TCP连接与三次握手**:TCP连接建立时的三次握手过程,包括SYN(同步序列编号)、SYN+ACK(同步并确认)和ACK(确认)的交互,确保双方都能正确接收和发送数据。 7. **TCP的四次挥手断开连接**:释放TCP连接时...

    TCP/IP 卷一 TCP/IP 详解

    - TCP协议的工作机制,如三次握手、四次挥手、滑动窗口、拥塞控制等。 - UDP协议的特点和应用场景。 - 面向连接的服务与无连接服务的区别。 - 端口和套接字的概念,以及它们在通信过程中的作用。 - ARP(地址解析...

    TCP/IP网络协议 教程

    在《TCP/IP详解卷一:协议》中,你将详细学习这些协议的工作原理,包括IP的分包与重组、TCP的三次握手和四次挥手过程、拥塞控制策略、TCP和UDP的区别、ARP(地址解析协议)和RARP(反向地址解析协议)的工作流程,...

Global site tag (gtag.js) - Google Analytics