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

TCP协议详解

时间:2024-07-14 23:19:42浏览次数:12  
标签:协议 seq ACK 报文 TCP 发送 详解 客户端

TCP 是面向连接的(一对一的)、可靠的、基于字节流的传输层通信协议

TCP报文如下:

 源端口和目的端口:服务的端口号,2字节

 序列号:解决TCP包乱序的问题,每发送一个包就会累加1

 确认应答号:指下一次期望收到的序列号,发送端接收到确认应答号,就知道了之前的序列号都被接收,解决丢包问题。

 ACK:为1时,表示确认应答有效。TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。

 RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。

 SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。

 FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,

 数据偏移(即首部长度):占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,也就是TCP首部的长度。

 窗口字段 :占 2 字节,用来让对方设置发送窗口的依据,单位为字节,防止网路阻塞。

 

TCP 三次握手

1、客户端首先连接服务器,发送SYN=1,seq=x, 表示希望建立连接

2、服务器收到后也发生一个报文,SYN=1,seq=y,ACK=1, ack=x+1,表示自己收到报文,希望和客户端建立连接,并要求客户端发送ack报文

3、客户端收到后发送ACK =1,seq=x+1,ack = y+1,连接建立。

四次挥手,一般都是客户端主动断开连接

1、客户端发送FIN=1,seq=u 表示我要断开连接了,这里ACK不为1

2、服务器接收到报文后,回复报文ACK =1,seq=v,ack = u+1,注意这里服务端还在发送数据,所以需要客户端回复收到了

3、如果服务器没什么报文发送了,发送关闭报文,FIN=1,ACK=1,seq=w. ack=u+1

4、客户端接收到消息后要等待2MSL(数据包在网络中存在的最大时间称为MSL,因为客户端发送的数据,服务器返回数据,最大需要这么久时间),防止泄漏

 

 

标签:协议,seq,ACK,报文,TCP,发送,详解,客户端
From: https://www.cnblogs.com/minblog/p/18302107

相关文章

  • Java实现堆排序算法详解及优化
    引言堆排序(HeapSort)是一种基于堆数据结构的比较排序算法。它具有良好的时间复杂度特性,在许多实际应用中表现出色。本文将详细讲解如何使用Java实现堆排序算法,并结合图解和实例代码,帮助您全面理解这一高级排序算法。同时,我们还将探讨堆排序的优化方法,以进一步提高其性能。......
  • Python 字典(Dict)详解与实战应用
    目录前言一、字典的定义和创建1.使用花括号定义2.使用dict()函数创建二、字典的三种遍历方式方式1:遍历字典的键,通过键获取值 dict.keys()方式2:遍历字典的值,但不能通过值获取键dict.values()方式3:最常用的方法:直接获取键值对 dict.items()三、字典的常见操作1.添......
  • 万字长文:Go 语言流行 ORM 框架 GORM 使用详解
    万字长文:Go语言流行ORM框架GORM使用详解原创 江湖十年 Go编程世界 2024年05月18日08:41 浙江 4人听过GORM是Go语言中最受欢迎的ORM库之一,它提供了强大的功能和简洁的API,让数据库操作变得更加简单和易维护。本文将详细介绍GORM的常见用法,包括数据库连接......
  • 排序-java(详解)
    一,分类主要的排序大致分为以下几类:1,插入排序,又分为直接插入排序和希尔排序2,选择排序,又分为选择排序和堆排序3,交换排序,又分为冒泡排序和快速排序4,归并排序 二,插入排序1,直接插入排序一个数组,定义两个变量i和j,i从数组的第二个元素开始往后遍历,直到数组结束。每次遍历把......
  • MVC模式详解
    引言MVC(Model-View-Controller)模式是一种用于实现用户界面逻辑的架构模式,广泛应用于软件工程和Web开发中。MVC模式将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),分别负责不同的功能,从而提高应用程序的可维护性、可扩展性和可测试性。MVC模式的组成部......
  • 如何编译工业协议网关软件Neuron
    说明最近需要测试一个工业互联网网关的项目,在网上找到了工业协议网关软件Neuron,决定从它开始自己的工作。今天先介绍一下如何在x86平台上编译Neuron。Neuron简介Neuron是EMQ(杭州映云科技有限公司)出品的,它在物联网和工业互联网领域算是个领先厂商。我以前上课用的MQTTX客户......
  • spring.factories详解
    spring.factories是SpringBoot中一个重要的配置文件,它用于实现自动配置类和框架的扩展机制。这个文件通常位于项目的resources/META-INF目录下,并且遵循Java的.properties文件格式。以下是对spring.factories的详细解释:自动配置类加载:spring.factories文件中......
  • Linux系统编程-线程同步详解
    线程同步是指多个线程协调工作,以便在共享资源的访问和操作过程中保持数据一致性和正确性。在多线程环境中,线程是并发执行的,因此如果多个线程同时访问和修改共享资源,可能会导致数据不一致、竞态条件(racecondition)等问题。线程同步通过协调线程的执行顺序和共享资源的访问来避免......
  • JDK14新特征最全详解
    JDK14一共发行了16个JEP(JDKEnhancementProposals,JDK增强提案),筛选出JDK14新特性。-343:打包工具(Incubator)-345:G1的NUMA内存分配优化-349:JFR事件流-352:非原子性的字节缓冲区映射-358:友好的空指针异常-359:Records(预览)-361:Switch表达式(标准......
  • USART串口协议 和va_list,va_start,va_end,vsprintf
    串口接口通信的目的:将一个设备的数据传送到另一个设备扩展硬件系统通讯协议:制定通信的规则,通信双方按照协议规则进行数据收发。注意:差分信号一般传输速度和距离都会非常高。多设备相当于老师在教师给所有同学讲课,点对点相当于老师找你到办公室谈话。串口是一种应用......