当前位置: 首页 > article >正文

查找某个年龄段的用户信息TCP头格式为什么需要 TCP 协议? TCP 工作在哪一层?

查找某个年龄段的用户信息

select device_id,gender,age
from user_profile
where age>=20 and age<=23;

TCP头格式

序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。

确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收(累计确认机制)。用来解决丢包的问题。

首部长度:

  • TCP 首部中有一个 4 位的 “首部长度” 字段。这个字段的单位是 4 字节。
  • 由于首部长度字段是 4 位,它能表示的最大值是 1111(二进制),换算成十进制是 15。
  • 当首部长度字段的值为 15 时,首部长度为15*4=60字节。
  • 这 60 字节包括了固定的 20 字节和可变的选项部分,所以 TCP 首部长度最大是 60 字节。

保留:目前未使用,保留扩展功能

控制位:

URG(紧急指针有效):表示紧急指针字段有效,紧急指针指向紧急数据的末尾。

ACK(确认应答):该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1

PSH(推送):接收方收到设置了 PSH 标志的报文段后,应尽快将数据交付给应用程序,而不必等待缓冲区满。

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

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

FIN(结束连接):该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位为 1 的 TCP 段

窗口大小:用于流量控制,指示接收方当前能够接收的数据量(以字节为单位)。发送方根据接收方的窗口大小来调整发送速率,避免接收方缓冲区溢出。

校验和:用于检验 TCP 报文段的完整性,包括头部和数据部分。发送方计算校验和并将其填入该字段,接收方收到报文段后重新计算校验和,与该字段的值进行比较,如果不一致则说明报文段在传输过程中出现了错误。

紧急指针:只有当 URG 标志位为 1 时,紧急指针才有效。它指向紧急数据的末尾,与序列号一起用于标识紧急数据的位置。

标识紧急数据位置

        紧急数据的界定:当 TCP 报文段中的 URG 标志位被设置为 1 时,表示该报文段中包含紧急数据,此时紧急指针才有效。紧急指针指向紧急数据的末尾(在序列号的基础上),与序列号一起用于标识紧急数据在报文段中的位置范围。

        示例说明:假设一个 TCP 报文段的序列号为 1000,紧急指针的值为 50,那么紧急数据就是从序列号 1000 开始到 1049(1000 + 50 - 1)结束的这部分数据。接收方收到这样的报文段后,会优先处理这部分紧急数据,而不必等待接收缓冲区中其他非紧急数据处理完毕。

实现紧急数据的优先处理

 

        接收方处理机制:接收方在收到设置了 URG 标志且紧急指针有效的 TCP 报文段后,会尽快将紧急数据交付给上层应用程序进行处理,而不必按照正常的顺序等待缓冲区中其他数据的处理。这确保了紧急信息能够及时被应用程序获取和处理,例如在一些实时性要求较高的场景中,如远程登录(Telnet)中,用户可能需要立即发送一个中断命令来停止当前正在进行的操作,这时紧急指针就可以确保该中断命令作为紧急数据优先被处理。

选项(长度可变):用于一些可选的功能,如最大报文段长度(MSS)协商、窗口扩大因子、时间戳等。选项部分的长度是可变的,根据实际使用的选项而定。

数据:TCP 头部后面就是实际要传输的数据部分,其长度由 TCP 报文段的总长度减去头部长度得到。

为什么需要 TCP 协议? TCP 工作在哪一层?

IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。

因为 TCP 是一个工作在传输层可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。


http://www.kler.cn/a/507690.html

相关文章:

  • 【服务治理中间件】consul介绍和基本原理
  • 解锁C#语法的无限可能:从基础到进阶的编程之旅
  • 无人机技术架构剖析!
  • linux手动安装mysql5.7
  • Ubuntu本地部署网站
  • STM32网络通讯之CubeMX实现LWIP项目设计(十五)
  • Spring Boot 条件注解:@ConditionalOnProperty 完全解析
  • 整数的分离与合成
  • DNS介绍(3):应用场景
  • 数据结构之哈希表详解
  • 【Block总结】WTConv,小波变换(Wavelet Transform)来扩展卷积神经网络(CNN)的感受野
  • 【论文阅读笔记】基于YOLO和ResNet深度卷积神经网络的结直肠息肉检测
  • 【SQL】查询前三名
  • STM32 FreeRTOS 任务创建和删除实验(动态方法)
  • 机器学习和深度学习是人工智能(AI)领域的两个重要分支,它们都依赖于数学、统计学和计算机科学的基础知识。
  • Ubuntu系统备份与还原
  • ECCV2020 | YAILA | 又一种中间层攻击方法
  • 如何进行域名跳转与域名重定向的综合指南
  • 一个悄然崛起的开源项目,已开源
  • JavaScript 变量与数据类型
  • WEB攻防-通用漏洞_XSS跨站_MXSS_UXSS_FlashXSS_PDFXSS
  • PCL 新增自定义点类型【2025最新版】
  • 【Vim Masterclass 笔记16】S07L32 + L33:同步练习09 —— 掌握 Vim 宏操作的六个典型案例(含点评课内容)
  • 实战指南:使用Wireshark捕获并解密HTTPS数据包
  • 深度学习模块C2f代码详解
  • 利用PyQt6实现HIS系统差异化数据的定时增量分析