首页 > 其他分享 >TCP协议详解

TCP协议详解

时间:2024-07-18 12:00:00浏览次数:14  
标签:协议 应答 TCP 发送 详解 连接 服务端 客户端

传输控制协议(TCP ,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

1.TCP头部格式

  • 源/目的端口:表示数据从哪个进程发送,然后发送到哪个进程去
  • 32位序列号:发送的数据按照一个字节一个编号存放进去
  • 32位确认号:用于给与对方响应,值为收到的TCP报文的序号值加1(表示对当前应答报文针对的消息进行确认的应答)
  • 4位TCP报头长度:表示TCP头部有四个字节(32位),TCP最大长度为60
  • 8个boolean值标志位 

CWR:拥塞窗口减少标志被发送主机设置,用来表明它接收到了设置ECE标志的TCP包

ECE:ECN响应标志被用来在TCP三次握手时表明一个TCP端是具备ECN功能的,并且表明接收到的TCP包的IP头部的ECN被设置为11。

URG:此标志表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据。

ACK:此标志符表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有俩个取值:0和1,为1的时候表示应答域有效,反之为0。

PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区排队。

RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包。

SYN:表示同步序列号,用来建立连接。

FIN:表示发送端已经到达数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。

  • 16位窗口大小:进行流量窗口控制
  • 16位校验和:检验数据是否一致
  • 16位紧急指针:标识哪部分数据是紧急数据

2.TCP协议原理

TCP协议是对数据传输提供的一个管控机制,主要体现在可靠和效率俩个方面,即在保证数据可靠传输的情况下尽可能的提高效率

2.1可靠传输机制

2.1.1确认应答机制

向对方发送一个数据报文,对方要返回一个确认应答的报文

实现的方式:序列和确认序列号保证了响应应答针对的是哪一条消息的应答

说明:

  • 发送的数据是基于TCP报头中的“32位序列号”来保存的,一个字节对应一个序号
  • 确认应答的数据是基于TCP报头中的“32位确认序列号”来保存的,ACK标志位置为1,返回某个序列号,说明某个序列号之前的数据全部接收到
  • 有了确认应答,它才可以继续发送后边的数据

2.1.2超时重传机制

发送的数据报文可能因为网络拥堵等原因。超过一定时间,还没有收到确认应答的数据报文,就需要重新发送。

2.2.3连接管理机制(三次握手,四次挥手)

真正发送数据前,要先通过三次握手建立连接,不需要在发送数据了,通过四次挥手断开连接

三次握手

  1. 客户端向服务端发送SYN,申请建立客户端到服务器的连接
  2. 服务端返回ACK(第一次SYN的应答)和SYN,申请建立服务端到客户端的连接
  3. 客户端收到数据,状态变为ESTABLISHED,表示客户端到服务端连接建立完成,并且发送ACK(第二次SYN的应答),服务端收到数据,状态变为ESTABLISHED,表示服务端到客户端的连接建立完成

三次握手主要是为了检查当前网络的情况石佛满足可靠运输的基本条件,同时也是在检测双方发送和接收数据的能力是否正常

四次挥手

说明:关闭的时候服务端申请关闭或者客户端申请关闭都可以

  1. 客户端发送FIN到服务端,申请关闭客户端到服务端的连接
  2. 服务端收到FIN状态变为CLOSE_WAIT,并返回ACK应答(这个动作是系统实现TCP协议栈默认执行的不需要程序来调用代码)
  3. 服务端发送FIN到客户端,申请关闭服务端到客户端的连接(程序手动调用socket.close发送)
  4. 客户端收到FIN返回ACK应答,并进入TIME_WAIT时间等待状态客户端等待一段时间后,状态变为CLOSED,服务端收到应答后,状态变为CLOSED

标签:协议,应答,TCP,发送,详解,连接,服务端,客户端
From: https://blog.csdn.net/xu159236/article/details/140514627

相关文章

  • 在Linux中,tcp三次握⼿的过程及原理?
    在Linux中,TCP(传输控制协议)的三次握手是建立可靠连接的重要过程。这一机制确保了客户端和服务器之间能够安全、有序地交换数据。下面将详细阐述TCP三次握手的过程及原理:一、TCP三次握手的过程TCP三次握手过程涉及客户端(通常称为“主动打开方”)和服务器(通常称为“被动打开方”)之间......
  • 什么是 Modbus协议?
    一、网络中的协议是指什么?网络协议是网络通信中至关重要的一部分,它定义了网络中两个或多个设备之间通信的规则、过程和格式。这些规则确保了计算机网络设备能够使用一种通用语言来传输和接收数据,而不管它们的设计、硬件或基础设施如何。二、什么是Modbus协议?在理解了“网络......
  • 机器学习:详解迁移学习(Transfer learning)
    详解迁移学习深度学习中,最强大的理念之一就是,有的时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中。所以例如,也许已经训练好一个神经网络,能够识别像猫这样的对象,然后使用那些知识,或者部分习得的知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学......
  • 【OCPP】ocpp1.6协议第5.5章节Clear Charging Profile的介绍及翻译
    目录5.5清除充电配置ClearChargingProfile-概述ClearChargingProfile请求ClearChargingProfile响应操作流程适用场景5.5清除充电配置ClearChargingProfile-原文译文5.5清除充电配置ClearChargingProfile-概述OCPP1.6协议中的第5.5章节主要讲的是“Cl......
  • 【OCPP】ocpp1.6协议第5.3章节Change Configuration的介绍及翻译
    目录5.3更改配置Changeconfiguration-概述ChangeConfigurationOperation1.概要2.ChangeConfiguration请求3.ChangeConfiguration响应4.流程说明状态说明举例总结5.3更改配置Changeconfiguration-原文译文5.3更改配置Changeconfiguration-概述在OC......
  • 【QT开发】串口通信管理QSerialPort类详解及实战应用
    QSerialPort是Qt提供的一个功能强大、简单易用的串口通信类。通过本文的学习,您应该对QSerialPort的基本使用、高级应用技巧及相关注意事项有了全面的理解。在实际项目中,QSerialPort可以帮助实现与外部设备的串口通信,确保数据的可靠传输和接收。希望本文能帮助您更好地......
  • python的tkinter、socket库开发tcp的客户端和服务端
    一、tcp通讯流程和开发步骤1、tcp客户端和服务端通讯流程图套接字是通讯的利器,连接时要经过三次握手建立连接,断开连接要经过四次挥手断开连接。2、客户端开发流程1)创建客户端套接字2)和服务端器端套接字建立连接3)发送数据4)接收数据5)关闭客户端套接字3、服务端开发......
  • Java SPI 机制详解
    目录SPI介绍何谓SPI?SPI和API有什么区别?实战演示ServiceProviderInterfaceServiceProvider效果展示ServiceLoaderServiceLoader具体实现自己实现一个ServiceLoader总结:面向对象设计鼓励模块间基于接口而非具体实现编程,以降低模块间的耦合,遵循依赖倒置原则,并......
  • 网络编程-TCP/IP
    网络概述网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务网络体系结构即指网络的层次结构和每层所使用协议的集合两类非......
  • Profibus协议转profinet协议网关模块连接电磁阀通讯案例
    一、背景工业通讯中常见的协议有:Modbus协议,ModbusTCP协议,Profinet协议,Profibus协议,ProfibusDP协议,EtherCAT协议,EtherNET协议等。然而,有许多现场需要将ProfibusDP协议设备与Profinet协议设备连接并通讯。针对这一问题,很多企业选择使用Profibus协议转Profinet协议网关模块来实现......