`

TCP 协议理解

 
阅读更多

 

参考文档:http://tools.ietf.org/html/rfc793

 

3.1.  Header Format

Control Bits:  6 bits (from left to right):

   URG:  Urgent Pointer field significant

   ACK:  Acknowledgment field significant

   PSH:  Push Function

   RST:  Reset the connection

   SYN:  Synchronize sequence numbers

   FIN:  No more data from sender

  0 1 2 3

    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
用wireshark抓包
Flags: 0x10 (ACK) ==16,2的4次方,第五位
Flags: 0x18 (PSH, ACK) == 16+8,第五位,第4位
Flags: 0x12 (SYN, ACK)==16+2,第五位,第二位

3.2.  Terminology

TCB: Transmission Control Block,some variables being stored in a connection record.

 

Send Sequence Variables

      SND.UNA - send unacknowledged

      SND.NXT - send next

      SND.WND - send window

      SND.UP  - send urgent pointer

      SND.WL1 - segment sequence number used for last window update

      SND.WL2 - segment acknowledgment number used for last window

                update

      ISS     - initial send sequence number

 

    Receive Sequence Variables

      RCV.NXT - receive next

      RCV.WND - receive window

      RCV.UP  - receive urgent pointer

      IRS     - initial receive sequence number

 

Current Segment Variables

      SEG.SEQ - segment sequence number

      SEG.ACK - segment acknowledgment number

      SEG.LEN - segment length

      SEG.WND - segment window

      SEG.UP  - segment urgent pointer

      SEG.PRC - segment precedence value

 

9+1 states during its lifetime: 

LISTEN, SYN-SENT, SYN-RECEIVED,ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK,TIME-WAIT, and the fictional state CLOSED.

 

 

3.3.  Sequence Numbers

SND.UNA < SEG.ACK =< SND.NXT

RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

and so on...

 

3.4.  Establishing a connection

1, the data must be buffered at the receiver until the connection reaches the ESTABLISHED state  

     TCP A                                                TCP B

  1.  CLOSED                                               LISTEN

  2.  SYN-SENT    --> <SEQ=100><CTL=SYN>               --> SYN-RECEIVED

  3.  ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK>  <-- SYN-RECEIVED

  4.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK>       --> ESTABLISHED

  5.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED

 

server每收到一个TCP数据包,都要回送一个ACK,接受失败的会[rst,ack]

client发送数据时,也要发送<PSH><ACK>(PSH的为data,ACK是上一次的)

 

2, Simultaneous initiation is only slightly more complex,双方都进行init connection,这种情况稍微复杂些。

3, Half-Open Connections 

4, re-Open Connections

 

3.5.  Closing a Connection

 The user who CLOSEs may continue to RECEIVE until he is told that the other side has CLOSED also

 

TCP A                                                TCP B

 

  1.  ESTABLISHED                                          ESTABLISHED

  2.  (Close)

      FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT

  3.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT

  4.                                                       (Close)

      TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <-- LAST-ACK

  5.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED

  6.  (2 MSL)

      CLOSED

 

 

三次握手,c->s[SYN],s->c[SYN,ACK],c->s[ACK]

四次分手,c->s[FIN],s->c[ACK],s->c[FIN],c->s[ACK],因为server接收到fin时,还可以把未发送完的数据发送完,所以拆开了[FIN],[ACK]

分享到:
评论

相关推荐

    TCP协议分析实验报告

    ### TCP协议分析实验报告 #### 实验目的 ...通过本实验的学习,我们不仅掌握了TCP协议的基本工作原理,还深入了解了TCP协议的多个关键机制,这对于理解计算机网络中的数据传输机制具有重要意义。

    TCP协议分析网络实验报告

    本实验报告针对TCP协议进行深入分析,旨在帮助学生理解TCP协议的工作原理及其在网络通信中的作用。实验通过实际操作的方式,让学生掌握如何使用工具捕获并分析TCP数据包,进而了解HTTP和DNS协议的工作过程。 #### ...

    TCP协议实验1

    【TCP协议实验1】实验旨在帮助学生深入理解TCP协议的工作原理,掌握其连接状态控制、可靠传输机制,并涉及拥塞控制算法。实验的核心是实现TCP协议的状态机,特别是客户端的“停-等”模式,以及Socket接口的编程。TCP...

    TCP协议内核源码分析第一册v1.0

    源码分析是对TCP协议理解的深入层次,书中可能涵盖了以下关键知识点: 1. **TCP连接建立与断开**:包括SYN/SYN-ACK/ACK的三次握手过程以及FIN/FIN-ACK/ACK的四次挥手过程,详细解析了这些过程在内核中的实现。 2. ...

    TCP协议详解及实战解析.pdf

    TCP协议确保了数据的完整性和有序性,是面向连接的,意味着在数据交换前需要先建立连接,而在数据传输完成后需要断开连接。 TCP连接的建立过程称为三次握手(Three-Way Handshake)。首先,客户端发送一个带有SYN...

    tcp协议的源码

    TCP(Transmission Control Protocol)协议是互联网协议族中最核心的部分之一,它为两台计算机之间提供了一种可靠的数据传输...学习和理解这些代码可以帮助我们深入理解TCP协议的工作原理以及如何在实际系统中实现。

    Thingsboard gateway 3.4 接入TCP协议单设备改多设备

    总结来说,"Thingsboard gateway 3.4 接入TCP协议单设备改多设备"涉及到的关键知识点包括TCP协议、Thingsboard Gateway的工作原理、多设备并发处理策略、代码修改与调试,以及系统性能和安全性的考量。通过这一改造...

    modbus tcp协议解析

    Modbus TCP协议是一种广泛应用于工业自动化领域的通信协议,它基于标准的TCP/IP协议栈,使得设备能够通过以太网进行数据交换。这个协议允许不同制造商的设备之间进行简单且有效的通信,大大增强了系统的互操作性。 ...

    AB PLC ModbusTCP以太网通讯

    总的来说,AB PLC通过以太网进行ModbusTCP通讯涉及网络配置、ModbusTCP协议理解、编程和错误处理等多个方面。正确理解和实施这些步骤,你可以成功实现AB PLC与任何支持ModbusTCP的第三方设备的高效数据交换。

    C#TCP通信协议

    - TCP协议本身有流量控制和拥塞控制机制,但实际应用中可能需要进一步优化,如设置合适的缓冲区大小,合理控制发送速度等。 7. **心跳机制**: - 为了检测网络连接是否断开,可以设置心跳机制,定期发送小量数据...

    计算机网络课程设计 基于TCP协议的文件传输简单实现

    在计算机网络领域,TCP...总的来说,这个课程设计旨在让学生理解TCP协议在文件传输中的作用,以及如何利用TCP协议的特性来构建一个简单的文件传输系统。通过这个实践,学生将深化对TCP协议的理解,提高网络编程的能力。

    基恩士上位机TCP通讯协议

    安装之前,用户应仔细阅读手册,并充分理解其内容,手册中还包含有关如何与PLC进行TCP/IP通讯的详细说明。 值得注意的是,当通信过程中发生错误时,用户需要有能力根据错误信息判断问题的所在,并及时排除故障。...

    tcp协议的视频软件

    在本案例中,"tcp协议的视频软件"指的是使用TCP协议进行数据传输的视频软件。 1. **TCP协议基础** - **面向连接**:在数据传输前,TCP会建立连接,通过三次握手(SYN, SYN+ACK, ACK)确保双方都有能力接收和发送...

    计算机网络-----TCP协议分析

    详细介绍了网络协议中的TCP协议分析,对于了解和理解网络基础知识非常有帮助。 共十一章。 第1-2章是基础介绍 第3章是网际协议 第4章是路由选择协议 第5章是Internet控制协议 第6章是多播和Internet组管理协议 第7章...

    TCP 协议分析工具 模拟客户端

    TCP协议分析工具是网络诊断和调试的重要手段,可以帮助我们理解网络通信过程中的细节,例如数据包的发送、接收、重传等。模拟客户端则允许我们主动发起连接,测试服务器的响应,或者模拟特定的网络行为。 TCP协议...

    TCP.rar_28335 IP TCP_tcp 通信

    TCP协议是面向连接的传输层协议,提供的是可靠的数据流服务。在两台设备之间建立TCP连接时,会经历三次握手的过程:SYN(同步序列编号)、SYN+ACK(同步确认)和ACK(确认)。连接建立后,数据会被分割成多个段进行...

    理解TCP和FTP协议

    TCP协议主要用于确保数据的可靠传输,而FTP协议主要用于文件的上传和下载。下面我们将深入了解TCP协议的连接建立和释放的工作原理和通信过程,以及FTP协议的工作过程。 TCP协议的连接建立和释放的工作原理和通信...

    TCP.rar_TCP协议实验_tcp_tcp 实验_tcp协议_visual c

    通过这个TCP实验,我们可以深入理解TCP协议的工作原理,掌握如何在实际编程中应用TCP协议,为后续的网络编程打下坚实的基础。此外,这个实验也有助于培养我们的问题解决能力,因为可能会遇到网络延迟、丢包、拥塞等...

    mudbus tcp协议,tcpmodbus协议,C#

    本文将深入探讨"Mudbus TCP协议"和"TCPModbus协议",以及如何在C#编程环境中使用Twincat PLC实现PLC(可编程逻辑控制器)与PC之间的TCP/IP通信。 Mudbus TCP协议是Modbus协议的一种扩展,它保留了Modbus协议的简单...

Global site tag (gtag.js) - Google Analytics