基于 Wireshark 分析 TCP 协议

news2024/11/14 18:30:44

一、TCP 协议

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。它在网络通信中扮演着重要的角色,用于保证数据的可靠传输。

TCP协议的特点如下:
1. 面向连接:在通信前需要先建立连接,通信结束后再关闭连接。连接的建立和关闭过程需要进行三次握手和四次挥手。
2. 可靠性:TCP提供可靠的数据传输,通过序列号、确认应答、超时重传、流量控制和拥塞控制等机制来确保数据的正确性和完整性。
3. 字节流传输:TCP将数据流划分为以字节为单位的数据段进行传输,保证了数据的顺序性。
4. 面向字节流:TCP把应用程序交给它的数据看成是一连串无结构的字节流,不关心具体的数据内容和格式。
5. 流量控制:TCP通过滑动窗口机制来控制发送方发送数据的速率,以防止接收方来不及处理过多的数据。
6. 拥塞控制:TCP通过拥塞窗口和慢启动等机制来控制网络拥塞,避免网络过载。
7. 支持全双工通信:TCP连接是全双工的,双方可以同时发送和接收数据。

TCP协议的工作流程如下:
1. 建立连接:客户端向服务器发送连接请求(SYN),服务器回复确认(SYN+ACK),客户端再回复确认(ACK),建立连接。
2. 数据传输:建立连接后,双方可以通过TCP连接进行数据传输。发送方将数据划分为适当大小的数据段,并添加序列号,接收方收到数据后进行确认应答。
3. 连接关闭:当数据传输完成时,任意一方可以发送连接关闭请求(FIN),对方回复确认,然后发送自己的连接关闭请求,对方再回复确认,完成连接关闭。

总结:TCP协议通过面向连接、可靠的数据传输、流量控制和拥塞控制等机制,保证了数据在网络中的可靠传输。它是应用层协议中最常用的一种,广泛应用于互联网中。

二、TCP 报头

以下是TCP报头的详细格式,按照表格形式列出:

字段名称长度(位)描述
源端口号16指示发送端口号
目的端口号16指示接收端口号
序列号32用于对数据进行排序和重组
确认号32用于确认接收到的数据
数据偏移4指示TCP报头的长度
保留6保留字段,暂未使用
控制位6用于控制TCP的各种功能,如SYN、ACK、FIN等
窗口大小16指示发送方的接收窗口大小
校验和16用于检验TCP报头和数据的完整性
紧急指针16指示紧急数据的位置
选项可变可用于在TCP报头中添加一些可选的功能
填充可变用于填充TCP报头,使其长度为32位的整数倍

三、TCP 端口

TCP端口是TCP协议中用于标识不同应用程序或服务的端口号。在TCP/IP协议栈中,每个主机都有65535个端口号可用,它们被分为三个范围:

1. 知名端口(Well-known Ports):范围从0到1023,用于标识一些常见的服务和应用程序。例如,HTTP使用端口号80,HTTPS使用端口号443,FTP使用端口号21等。这些端口号在大多数操作系统中都有预定义的用途。

2. 注册端口(Registered Ports):范围从1024到49151,用于用户注册的应用程序或服务。这些端口号可以被开发人员用于自定义应用程序或服务。

3. 动态/私有端口(Dynamic/Private Ports):范围从49152到65535,用于临时分配给客户端应用程序。当客户端应用程序与服务器建立TCP连接时,操作系统会自动分配一个可用的动态端口。

TCP端口号是一个16位的无符号整数(0到65535),客户端应用程序使用源端口号,服务器应用程序使用目的端口号。通过源和目的端口号的组合,TCP协议可以将接收到的数据包传递给正确的应用程序或服务。

在通信过程中,当客户端向服务器发起连接请求时,客户端应用程序会选择一个空闲的源端口号,并将其包含在请求中。服务器收到连接请求后,会将目的端口号设置为客户端发送的源端口号,以便建立双向通信。

TCP端口号的分配需要遵循相关的规范和标准,以确保端口号的唯一性和正确性。

所有基于 TCP 的通信都是以相同的方式工作:选择一个随机的源端口与一个已知的目的端口通信 

四、TCP 三次握手

TCP三次握手是建立TCP连接的过程,用于确保双方能够正常通信。以下是TCP三次握手的详细步骤:

   Client                    Server
     |                         |
     |---- SYN (X) ---------->|
     |                         |
     |<--- SYN-ACK (Y, X+1) ---|
     |                         |
     |---- ACK (Y+1) --------->|
     |                         |
  1. 第一次握手 (SYN):

    • 客户端发送一个 SYN (同步) 报文段to服务器,报文段中指定了客户端的初始序号 X。
    • 客户端进入 SYN_SENT 状态,等待服务器确认。
  2. 第二次握手 (SYN-ACK):

    • 服务器收到客户端的 SYN 报文段后,如果同意连接,就会发送一个 SYN-ACK 报文段,
    • 报文段中包含了服务器的初始序号 Y,同时将客户端的序号 X+1 放在确认号(ACK)字段中。
    • 服务器进入 SYN_RCVD 状态。
  3. 第三次握手 (ACK):

    • 客户端收到服务器的 SYN-ACK 报文段后,再发送一个确认报文段(ACK),
    • 报文段中把服务器的序号 Y+1 放在确认号(ACK)字段中。
    • 此时,TCP 连接建立,客户端进入 ESTABLISHED 状态,服务器也进入 ESTABLISHED 状态。

TCP三次握手过程的目的是确保双方都能收到对方的请求和确认,并建立起可靠的双向通信。通过握手过程,双方交换了初始序列号和窗口大小等重要信息,以便后续的数据传输能够正确进行。

值得注意的是,TCP三次握手是双向的,即客户端向服务器发起握手请求,服务器响应后再向客户端发送确认,确保双方都能同步建立连接。这样的握手过程可以防止已失效的连接请求报文段突然又传到了服务器,导致服务器错误地打开连接。

初始 SYN 数据包

SYN/ACK 响应

最后的 ACK 包

五、TCP 连接断开

TCP 连接的断开是一个四次挥手的过程,用于正常关闭连接。

 客户端                 服务器
   |                      |
   |---- SYN 报文 -------->|
   |<--- SYN-ACK 报文 -----|
   |---- ACK 报文 -------->|
   |          |           |
   |---- 数据报文 -------->|
   |<---- ACK 报文 --------|
   |          |           |
   |---- FIN 报文 -------->|
   |<---- ACK 报文 --------|
   |<---- FIN 报文 --------|
   |---- ACK 报文 -------->|
   |          |           |
  1. 客户端发起连接请求:

    • 客户端选择一个随机的源端口号(通常为大于 1024 的数字)。
    • 客户端向服务器的目标端口号发送一个 SYN 报文,表示请求建立连接。
  2. 服务器响应连接请求:

    • 服务器接收到客户端的 SYN 报文后,会分配一个端口号来作为此次连接的目标端口。
    • 服务器发送一个 SYN-ACK 报文,表示接受了客户端的连接请求。
  3. 客户端确认连接建立:

    • 客户端收到服务器的 SYN-ACK 报文后,会发送一个 ACK 报文,表示确认连接建立。
  4. 数据传输:

    • 在连接建立后,客户端和服务器就可以开始传输数据了。
    • 数据传输过程中,双方会不断地发送 ACK 报文,确认对方发送的数据已经正确接收。
  5. 连接释放:

    • 当通信结束时,任意一方都可以发起连接释放请求。
    • 通常是客户端先发送 FIN 报文,表示自己已经没有数据要发送了。
    • 服务器收到 FIN 报文后,会发送 ACK 报文以确认,然后再发送自己的 FIN 报文。
    • 客户端收到服务器的 FIN 报文后,会发送 ACK 报文以确认,至此连接就释放完毕了。

六、TCP 重置

TCP重置(TCP RST)是一种TCP协议中的控制消息,用于在通信过程中快速终止连接或重置连接状态。TCP重置消息可以由发送方或接收方发送,用于指示对方立即关闭连接。

TCP重置消息的常见用途包括以下几种情况:

1. 异常情况下的连接终止:当通信中发生了无法恢复的错误或异常时,TCP重置消息可以立即终止连接,避免继续传输数据。

2. 拒绝未建立的连接:当接收方收到一个未建立连接的TCP数据包时,可以发送TCP重置消息来拒绝该连接请求。

3. 处理网络拥塞:在网络拥塞情况下,TCP重置消息可以用于快速关闭连接,以减轻网络负载和恢复正常通信。

TCP重置消息的特点如下:

- TCP重置消息是一个独立的TCP数据包,它不承载任何应用数据。
- TCP重置消息中的标志位被设置为RST。
- TCP重置消息可以在连接建立前或连接建立后发送。
- TCP重置消息会立即中断连接,终止数据传输。
- TCP重置消息不需要等待对方的确认,可以单方面发送。

需要注意的是,TCP重置消息的使用应谨慎,不当的使用可能导致连接中断或通信中断。在正常情况下,应该使用TCP的正常关闭过程来终止连接,以确保数据的完整性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1701184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习Uni-app开发小程序Day26

这一章学习的内容细节较多&#xff0c;主要是分为&#xff1a;首次加载减少网络消耗、获取图片的详细信息、图片的评分和避免重复评分、将图片下载到本地并且获取设备的授权 加载图片减少网络消耗 这里突出这个功能&#xff0c;是根据老师视频上的描述&#xff0c;个人觉得很…

如何彻底搞懂组合(Composite)设计模式?

当我们在设计系统对象关系时&#xff0c;有时候会碰到这样一种场景&#xff0c;一个对象中包含了另一组对象&#xff0c;两者构成一种”部分-整体”的关联关系。 正如上图中所展示的&#xff0c;当我们面对这样一种对象关系时&#xff0c;通常都需要分别构建单独的访问方式&…

11.Redis之zset类型

1.zset类型基本介绍 有序描述的是&#xff1a;升序/降序 Set 集合 1.唯一 2. 无序 孙行者,行者孙, 者行孙 >同一只猴~~ List有序的 孙行者,行者孙, 者行孙 >不同的猴~~ zset 中的 member 仍然要求是唯一的!!(score 则可以重复) 排序的规则是啥? 给 zset 中的 member 同…

太狠了,凌晨5点面试。。

(关注数据结构和算法&#xff0c;了解更多新知识) 网上看到一网友发文说收到面试邀请&#xff0c;面试时间竟然是早晨5点&#xff0c;这是要猝死的节奏。有的网友说应该是下午 5 点&#xff0c;如果是下午 5 点直接写下午 5 点就行了&#xff0c;或者写 17 点也行&#xff0c;直…

中医理疗元宇宙 科技赋能中医药产业走向国际市场

基于380亿参数量&#xff0c;对中医药海量文本进行数据训练&#xff0c;实现方剂优化、机制阐释和新适应症的精准发现……日前在天津召开的数智赋能大健康产业新质生产力暨第四届中医药国际发展大会上&#xff0c;由天士力医药集团与华为云共同开发的“数智本草”中医药大模型正…

【再探】设计模式—职责链模式、命令模式及迭代器模式

行为型设计模式研究系统在运行时对象之间的交互&#xff0c;进一步明确对象的职责。有职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式及访问模式共11种。 1 职责链模式 需求&#xff1a;1) 请求能被多…

自动驾驶中的“ImageNet”?CVPR2024新作OccFeat:BEV 自监督预训练

论文标题&#xff1a; OccFeat: Self-supervised Occupancy Feature Prediction for Pretraining BEV Segmentation Networks 论文作者&#xff1a; Sophia Sirko-Galouchenko, Alexandre Boulch, Spyros Gidaris, Andrei Bursuc, Antonin Vobecky, Patrick Prez, Renaud Ma…

Nginx实战(安装部署、常用命令、反向代理、负载均衡、动静分离)

文章目录 1. nginx安装部署1.1 windows安装包1.2 linux-源码编译1.3 linux-docker安装 2. nginx介绍2.1 简介2.2 常用命令2.3 nginx运行原理2.3.1 mater和worker2.3.3 Nginx 的工作原理 2.4 nginx的基本配置文件2.4.1 location指令说明 3. nginx案例3.1 nginx-反向代理案例013.…

紧固件松动的危害及原因——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 紧固件松动&#xff0c;这一看似微小的机械问题&#xff0c;实际上可能引发一系列严重的后果。在机械设备中&#xff0c;紧固件扮演着至关重要的角色&#xff0c;它们通过紧固作用将各个部件紧密连接在一起&#xff0c;…

招聘视角,看数据产品经理求职面试技巧

近几年负责数据产品团队&#xff0c;经历团队人员的变迁&#xff0c;进行过几百简历的筛选&#xff0c;近百场社招、校招面试。金三银四的求职/招聘季接近尾声&#xff0c;想把自己招聘数据产品经理的过程进行总结&#xff0c;分享给想找数据产品经理工作的求职者。 一、数据产…

【C语言】数据指针地址的取值、赋值、自增操作避坑

【C语言】数据指针的取值、赋值、自增操作避坑 文章目录 指针地址指针自增指针取值、赋值附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换函数 指针地址 请看下列代码&#…

css3实现0.5px边框

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css3实现0.5px边框</title><s…

HotSpot虚拟机的几个实现细节

文章目录 STW安全点安全区域记忆集与卡表读写屏障 STW 收集器在根节点枚举这步都是必须要暂停用户线程的&#xff08; STW &#xff09;&#xff0c;如果不这样的话在根节点枚举的过程中由于引用关系在不断变化&#xff0c;分析的结果就不准确 安全点 收集器在工作的时候某些…

如何设置XHSC(华大)单片机的IO口中断

XHSC(华大)单片机IO口中断使用 一、代码说明 华大单片机的历程在华大或者小华的官网上都可以下载到,但是我们下载的历程基本注释都是非常简单,有的还没有注释;再加上小华跟华大的历程在代码架构上有所区别,所以新手在直接调用华大或者小华历程后,历程代码的可读性并不…

解析气膜场馆造价—轻空间

随着社会的发展和对环保及时间成本的重视&#xff0c;气膜场馆逐渐成为众多体育场馆的首选建筑模式。气膜建筑包括气膜篮球场、气膜室内足球场、气膜羽毛球场、气膜乒乓球馆、气膜网球场以及气膜滑冰场等&#xff0c;因其多项优势受到广泛应用。 气膜场馆的显著特点 1. 气膜场馆…

不可错过的数据存储指南:JVS物联网平台存储策略详解

在物联网时代&#xff0c;数据的采集、存储和分析成为了关键环节。随着设备点位不断生成大量数据&#xff0c;如何高效地管理和保存这些数据&#xff0c;同时考虑存储成本和后续的数据分析价值&#xff0c;成为了亟待解决的问题。JVS物联网平台提供了灵活多样的存储策略&#x…

安泰电子:使用高压放大器时有哪些需要注意的呢

随着科技的不断进步&#xff0c;高压放大器在各种科学实验、工程应用和产业生产中扮演着重要的角色。然而&#xff0c;由于高压放大器的特殊性&#xff0c;使用时需要特别小心和谨慎。下面将详细介绍使用高压放大器时需要注意的事项&#xff0c;以确保安全、稳定地进行实验和应…

搭载昇腾310NPU的Orange Pi AIpro开箱体验以及深度学习样例测试

Orange Pi AIpro开箱体验以及样例测试 随着人工智能和物联网技术的快速发展&#xff0c;单板计算机&#xff08;Single Board Computer, SBC&#xff09;在创客和开发者社区中越来越受到欢迎。我最近入手了一款高性能的单板计算机——Orange Pi AIpro。 在入手此款AI开发板之…

【BI 可视化插件】怎么做? 手把手教你实现

背景 对于现在的用户来说&#xff0c;插件已经成为一个熟悉的概念。无论是在使用软件、 IDE 还是浏览器时&#xff0c;插件都是为了在原有产品基础上提供更多更便利的操作。在 BI 领域&#xff0c;图表的丰富性和对接各种场景的自定义是最吸引人的特点。虽然市面上现有的 BI 软…

如何理解 Java 类和对象

Java 中的类和对象是学习 Java 编程的基础之一。类是 Java 中的核心概念之一&#xff0c;它提供了一种组织和封装数据以及相关行为的方式。对象是类的实例&#xff0c;它是在运行时创建的&#xff0c;具有特定的状态和行为。 类和对象的概念 1. 类&#xff08;Class&#xff…