网络篇08 | 运输层 tcp

网络篇08 | 运输层 tcp

  • 01 简介
    • 1)运输层的作用
    • 2)与应用层的关系
    • 3)两个协议的应用场景
    • 4)传输的数据单位
  • 02 功能特性
    • 1)面向连接
    • 2)停止等待协议
    • 3)流水线传输协议
    • 4)滑动窗口机制
    • 5)数据重传机制
    • 6)乱序重排机制
  • 03 报文发送与接收
    • 1)TCP报文说明
    • 2)报文传输交互
    • 3)报文段的首部格式
      • TCP固定首部(20字节)
      • TCP可变首部(最长可达 40 字节)
      • TCP数据部分
  • 02 抓包分析
    • 1)3次握手
    • 2)读写消息
    • 3)4次挥手

01 简介

1)运输层的作用

运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。

2)与应用层的关系

http=TCP+80   (简单地说就是给TCP加一个端口一个名称)
   https=TCP+443
   ftp=TCP+21
   STMP=TCP+25
   PoP=TCP+110
   RDP=TCP+3389
   共享文件夹=TCP+445
   SQL=TCP+1433
   DNS=UDP+53   (极少数情况下使用TCP+53)

3)两个协议的应用场景

TCP(传输控制协议)—需要分段,编号,需要建立会话,有流量控制,可靠传输
UDP(用户数据报协议)—一个数据包就能完成数据通信,不用建立会话(不可靠传输)

4)传输的数据单位

两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元
TCP 传送的数据单位协议是 TCP 报文段 (segment)。
UDP 传送的数据单位协议是 UDP 报文或用户数据报。

02 功能特性

1)面向连接

TCP 包括连接建立、数据传输和连接终止三个阶段,并提供可靠的连接管理机制,确保数据的正确传输。TCP 是面向连接的运输层协议,要先建立会话。每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一),提供全双工通信同时收发。

2)停止等待协议

TCP中采用了停止等待协议的思想。发送方发送数据后等待接收方的确认(ACK),一旦接收到确认,发送方才会发送下一个数据包。如果发送方未收到确认,将认为数据包丢失或损坏,会进行重传。这种机制确保了数据的可靠传输。

每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
在这里插入图片描述

  • 无差错的情况:

    • A 发送完分组 M1 后就暂停发送,等待 B 的确认 (ACK)。
    • B 收到 M1 向 A 发送 ACK。
    • A 在收到了对 M1 的确认后,就再发送下一个分组 M2。
  • 出现差错的情况:

    • B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
    • M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。

在这两种情况下,B 都不会发送任何信息,那A 如何知道 B 是否正确收到了 M1 呢?

  • 解决方法:超时重传
    A 为每一个已发送的分组设置一个超时计时器,A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。

  • 确认丢失和确认迟到
    确认丢失----若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内将不会收到确认,因此 A 在超时计时器到期后重传 M1。

假定 B 正确收到了 A 重传的分组 M1。这时 B 应采取两个行动:
(1) 丢弃这个重复的分组 M1,不向上层交付。
(2) 向 A 发送确认。确认迟到—B 对分组 M1 的确认迟到了,因此 A 在超时计时器到期后重传 M1。

  • B 会收到重复的 M1,丢弃重复的 M1,并重传确认分组。
  • A 会收到重复的确认,对重复的确认的处理:丢弃
    在这里插入图片描述

停止等待协议的优点是简单,但缺点是信道利用率太低。
在这里插入图片描述

3)流水线传输协议

TCP还包括流水线传输协议的特性,允许发送方在等待确认的同时继续发送数据。TCP通过滑动窗口机制,发送方可以维护一个发送窗口范围内的多个数据包,而不需要等待所有数据包都被确认才发送下一个数据包。这样可以提高数据传输效率。

提高信道利用率的方法就是提高分组发送时间Td,即流水线传输,发送方连续发出多个分组,比如连续 ARQ 协议和滑动窗口协议。
在这里插入图片描述

由于信道上一直有数据不间断地传送,流水线传输可获得很高的信道利用率。

连续 ARQ 协议和滑动窗口协议采用流水线传输方式。

  • 连续 ARQ 协议
    • 发送窗口:发送方维持一个发送窗口,位于发送窗口内的分组都可被连续发送出去,而不需要等待对方的确认。
    • 发送窗口滑动:发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
    • 累积确认:接收方对按序到达的最后一个分组发送确认,表示:到这个分组为止的所有分组都已正确收到了。
      在这里插入图片描述

累计确认的优点:容易实现,即使确认丢失也不必重传
在这里插入图片描述

  • 缺点:
    • 不能向发送方反映出接收方已经正确收到的所有分组的信息
    • 采用 Go-back-N(回退N),表示需要再退回来重传已发送过的 N 个分组。
    • 当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。

4)滑动窗口机制

TCP 默认使用滑动窗口机制来进行流量控制和拥塞控制。滑动窗口机制允许发送方根据接收方的反馈来动态调整发送数据的数量,以确保网络传输的高效性并避免过载。

  • 流量控制
    • 针对单个连接数据处理能力的控制。

    • 发送缓冲区丢包:
      ifconfig eth0:
      流量控制队列,参数:txqueuelen=1000、dropped =0(大于0,有可能发生了流控丢包),更改队列长度:ifconfig eth0 txqueuelen=1500

    • 接收缓冲区丢包:
      cat /proc/net/netstat

  • 拥塞控制
    TCP 通过拥塞控制算法(如慢启动、拥塞避免、快重传、快恢复等)来避免网络拥塞,并在拥塞发生时降低发送速率,以维持网络的稳定性。

5)数据重传机制

发送方生成sequence,接收方收到哪些seq并生成ack机制,如果一段时间内没有等到ack,客户端就重发。

  • 降低重传几率:
    • 1)滑动窗口机制:发送缓冲区、接收缓冲区,就是缓解数据重传机制。
    • 2)tcp分段机制:

传输层:数据分段机制,MSS(maxximum seqment size)如果数据包大于mss则会拆成小于等于mss的包;

网络层:MTU(maximum transmit unit)会继续分包,mss等于mtu减去40byte
max头部、ip头部(20Byte)、tcp头部(20Byte)、数据-MSS(1460Byte)、FCS

6)乱序重排机制

数据包到达接收缓冲区的顺序不一致,依靠数据包的sequence,接收方就能知道数据包的先后顺序,内核中有一个乱序队列;
TCP 使用乱序重排机制来正确地对接收到的乱序数据包进行排序,以确保数据包在传输上层应用程序之前按正确的顺序被组装。这种机制通过使用序列号字段(Sequence Number)来重新排序乱序的数据包,以恢复原始数据流的顺序性。
乱序重排机制在 TCP 的接收端实现,它负责管理接收缓冲区,将接收到的乱序数据包按照其序列号正确排序后再传递给应用层。

03 报文发送与接收

1)TCP报文说明

在这里插入图片描述

最大报文段长度 MSS 是每个 TCP 报文段中的数据字段的最大长度,与接收窗口值没有关系。

物理层:
链路层:
网络层(IP层):IP 数据报 = IP首部 + TCP 报文段(不能超过MTU的1500字节,标准以太网定义)
运输层(TCP层):TCP 报文段 = TCP首部 + TCP数据
应用层:数据格式随便定(传输过程中为字节流),尽量不超过1460字节,在超过 MTU 大小时,IP 层会负责对数据包进行分片。IP 层根据目标网络的 MTU 大小将大的数据包分割成更小的片段,并在接收端重新组装这些片段。这样可以确保大数据包能够在网络中正确传输,尽管分片可能会带来额外的开销和延迟。

2)报文传输交互

在这里插入图片描述

套接字:socket = (IP地址 : 端口号) ,每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。TCP 连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)}

3)报文段的首部格式

TCP 虽然是面向字节流的,但传送的数据单元却是报文段。一个 TCP 报文段分为首部和数据两部分,而 TCP 的全部功能都体现在它首部中各字段的作用。

TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项 (n 是整数)。因此 TCP 首部的最小长度是 20 字节。
在这里插入图片描述

TCP固定首部(20字节)

  • 源端口 Source Port(2 字节)
    端口是运输层与应用层的服务接口。运输层的复用和分用功能通过端口实现。

  • 目的端口 Destination Port(2 字节)
    端口是运输层与应用层的服务接口。运输层的复用和分用功能通过端口实现。

  • 序号 Stream index(4 字节)
    TCP 连接中传送的数据流中的每一个字节都有一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

(如发送的数据为1234,则序号为1;发送的数据为567,则序号为5;发送的数据为89,则序号为8;而不是1,2,3依次计数)

  • 确认号Acknowledgment Number(4 字节)
    是期望收到对方的下一个报文段的数据的第一个字节的序号。

【若确认号 = N,则表明:到序号 N – 1 为止的所有数据都已正确收到。即若确认号为5,则5之前的1234数据已经收到】

  • 数据偏移(4 比特,即首部长度)
    指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。单位是 32 位字(以 4 字节为计算单位)。

【首部之后是数据部分,但首部的长度不固定,可能会由于选项长度的变化而变化,数据偏移量的变化就是由于这个】

  • 保留(6 比特)
    占 6 位,保留为今后使用,但目前应置为 0。

  • 紧急 URG(1 比特)
    控制位。当 URG = 1 时,表明紧急指针字段有效,告诉系统此报文段中有紧急数据,应尽快传送 (相当于高优先级的数据)。

  • 确认 ACK(1 比特)
    控制位。只有当 ACK =1 时,确认号字段才有效。当 ACK =0 时,确认号无效。

  • 推送 PSH (1 比特)
    PuSH控制位。接收 TCP 收到 PSH = 1 的报文段后,就尽快(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满后再交付。

  • 复位 RST (1 比特)
    ReSeT控制位。当 RST=1 时,表明 TCP 连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

  • 同步 SYN (1 比特)
    SYNchronization控制位。

    • 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
    • 当 SYN = 1,ACK = 0 时,表明这是一个连接请求报文段。
    • 当 SYN = 1,ACK = 1 时,表明这是一个连接接受报文段。
  • 终止 FIN (1 比特)
    Finish控制位。用来释放一个连接。
    FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

  • 窗口(2 字节)
    窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。【窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化】

  • 检验和(2 字节)
    检验和字段检验的范围包括首部和数据这两部分。
    在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。

  • 紧急指针(2 字节)
    在 URG = 1时,指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),指出了紧急数据的末尾在报文段中的位置。

TCP可变首部(最长可达 40 字节)

  • 选项(长度可变)
    MSS(Maximum Segment Size)是 TCP 报文段中一个用来指示最大有效载荷大小的字段。MSS 表示在 TCP 报文段中可以容纳的最大数据量(不包括 TCP 头部的大小),以字节为单位。
    MSS 的值通常受到网络环境和网络设备的限制,一般为 MTU(最大传输单元)减去 IP 头部和 TCP 头部的长度。因为在互联网中数据包需要通过网络传输,而每个网络链路可能有不同的 MTU,因此 TCP 报文段的大小应该适应网络链路的 MTU。

【最大报文段长度 MSS,不能太大,也不能太小,应尽可能大(默认值= 536 字节)】

  • 填充
    使整个 TCP 首部长度是 4 字节的整数倍。

TCP数据部分

TCP 数据部分是 TCP 报文段中的有效载荷数据,也就是传输的实际数据内容。在 TCP 中,应用层的数据被分割成更小的数据块,并封装在 TCP 报文段的数据部分中进行传输。

TCP 是一种面向连接的协议,它通过将应用层数据转换为数据包(TCP 报文段)来实现可靠的端到端通信。这些数据包包括 TCP 头部(包含控制信息如源端口、目标端口等)和数据部分,其中数据部分则包含了应用层产生的字节流数据。

应用程序向 TCP 传递字节流数据,TCP 将其分割成合适大小的数据块并添加所需的控制信息,然后通过网络传输到接收端。在接收端,TCP 会将接收到的数据包重新组装成原始的字节流数据,以便应用程序处理。

因此,TCP 数据部分中确实包含了应用层的字节流数据,这些数据经过 TCP 的封装和传输,最终被交付给接收端的应用程序进行处理。

02 抓包分析

1)3次握手

在这里插入图片描述

2)读写消息

在这里插入图片描述

  • 第1行,客户端给服务器发送数据,[PSH, ACK]。
    Seq=1代表以前从未传输数据,此次是从第1位开始发送数据给服务端。
    Ack=1表示客户端期望服务端返回Seq=1的数据包。
    Win=8192表达数据窗口大小。
    Len=3代表发送数据段的大小为3,数据内容是“111”。
  • 第2行,服务器给客户端回复数据,[ACK]
    Seq=1正是客户端所期望的Ack=1,
    Len=0,说明服务端并没有给客户端发送任何数据。
    Ack=4,服务端期待客户端继续发送第4个字节的数据,说明服务端已经接收到从客户端传递过来的“111”这3个字节的数据。

3)4次挥手

在这里插入图片描述

4次“挥手”的过程如下。
1)客户端到服务端:我关了。
2)服务端到客户端:好的,收到。
3)服务端到客户端:我也关了。
4)客户端到服务端:好的,收到。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

011、Python+fastapi,第一个后台管理项目走向第11步:建立python+fastapi项目,简单测试一下

一、说明 本文章就是记录自己的学习过程,如果有用您可以参考,没用你就略过,没有好与不好之分,今天主要是参考了gitee上的一些项目,一步一步的往后i建立 对于学习来说,如果您有java c等经验,py…

Redis的哨兵机制

引入: 主从复制最大的问题还是在主节点上,主节点挂了,从节点就迷茫了,虽然能够提供读操作,但是从节点不能自动生成主节点,不能替换原有主节点对应的角色;此时,就需要程序员/运维手工…

绿联HDMI延长器40265使用AG7120芯片放大器方案

HDMI延长器和放大器 延长器:主要用于HDMI线的延长,有HDMI对接头方式延长,或HDMI公头加HDMI母头的HDMI线进行延长,或通过网线方式延长,早期为双网线,目前已发展为单网线,需要注意的是&#xff0…

L45 【哈工大_操作系统】操作系统接口 系统调用实现

L4 操作系统接口 本节比较简单,故与第五节课程笔记一起发布。本节主要是研究 上层应用 是怎么穿过边界进入 操作系统。 接口:操作系统提供的重要函数/指令( system call ),用来连接硬件,所以OS接口就是系统调用POSIX(…

Res2Net网络

Res2Net网络 摘要Abstract1. Res2Net网络1.1 文献摘要1.2 背景1.3 创新点1.4 网络结构1.5 实验1.5.1 在ImageNet数据集上进行实验1.5.2 在CIFAR数据集上进行实验 2. Res2Net代码实现3. 总结 摘要 Res2Net是一种神经网络架构,旨在改善类似ResNet的网络在计算机视觉任…

vscode开发 vue3+ts 的 uni-app 微信小程序项目

创建uni-app项目: # 创建用ts开发的uni-app npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 # 创建用js开发的uni-app npx degit dcloudio/uni-preset-vue#vite 项目名称VS Code 配置 为什么选择 VS Code ? HbuilderX 对 TS 类型支持暂不完善VS…

unity记一下如何播放动画

我使用的版本是2022.3.14fc 展开你的模型树,是会出现这个三角形的东西的 然后在资源面板创建一个animation controller 进去之后,把三角形拖进去,就会出现一个动画,然后点击他 在左侧给他创建这么个状态名字,类型…

AskManyAI:一个GPT、Claude、Gemini、Kimi等顶级AI的决斗场

一直以来很多人问我能不能有个稳定,不折腾的全球AI大模型测试网站,既能够保证真实靠谱,又能够保证稳定、快速,不要老动不动就挂了、出错或者漫长的响应。 直到笔者遇到了AskManyAI,直接就惊艳住了! 话不多…

第17天:信息打点-语言框架开发组件FastJsonShiroLog4jSpringBoot等

第十七天 本课意义 1.CMS识别到后期漏洞利用和代码审计 2.开发框架识别到后期漏洞利用和代码审计 3.开发组件识别到后期漏洞利用和代码审计 一、CMS指纹识别-不出网程序识别 1.概念 CMS指纹识别一般能识别到的都是以PHP语言开发的网页为主,其他语言开发的网页识…

springboot-tomcat冲突

maven tomcat版本冲突异常 记录一个错误 在项目启动时报错: java.lang.AbstractMethodError: org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated(Ljavax/servlet/http/HttpSessionEvent;)V 引入Session报错。 原因:Springboot默…

数据仓库—维度建模—维度表设计

维度表 维度表(Dimension Table)是数据仓库中描述业务过程中各种维度信息的表,用于提供上下文和描述性信息,以丰富事实数据的分析 维度表是维度建模的灵魂所在,在维度表设计中碰到的问题(比如维度变化、维度层次、维度一致性、维度整合和拆分等)都会直接关系到维度建模…

基于R语言实现的负二项回归模型【理解与实现】-理解负二项回归模型和泊松回归模型之间的区别

前言 我们可以在R语言中使用MASS包中的glm.nb函数来拟合负二项模型,以及使用glm函数来拟合泊松模型。以下是一个详细的过程,包括模拟数据的生成、模型的拟合、结果的比较和解释。 需要的包 if (!require("MASS")) install.packages("M…

【Leetcode每日一题】 分治 - 颜色分类(难度⭐⭐)(57)

1. 题目解析 题目链接:75. 颜色分类 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法思路解析 本算法采用三指针法,将数组划分为三个区域,分别用于存放值为0、1和2的元素。通过…

CentOS 7安装Zookeeper

说明:本文介绍如何在CentOS 7操作系统下使用Zookeeper 下载安装 首先,去官网下载所需要安装的版本,我这里下载3.4.9版本; 上传到云服务器上,解压 tar -xvf zookeeper-3.4.9.tar.gz修改配置 进入Zookeeper目录下的co…

3. 安装arrach结构的Mysql

提示:arm的centos上面安装arrach结构的Mysql 文章目录 前言一、查看已经安装过的并卸载mysql二、创建mysql用户组1.设置用户组2. 安装3.设置启动4.查看密码5.修改登录密码6.授权7.修改连接8.设置参数 常见问题排查1. 启动失败查看:2. 用户操作3. 踩坑解决…

【已开源】​基于stm32f103的爬墙小车

​基于stm32f103的遥控器无线控制爬墙小车,实现功能为可平衡在竖直墙面上,并进行移动和转向,具有超声波防撞功能。 直接上: 演示视频如:哔哩哔哩】 https://b23.tv/BzVTymO 项目说明: 在这个项目中&…

Unity 2D让相机跟随角色移动

相机跟随移动 最简单的方式通过插件Cinemachine 在窗口/包管理器选择全部找到Cinemachine,导入。然后在游戏对象/Cinemachine创建2D Camera。此时层级中创建一个2D相机。选中人物拖入检查器Follow。此时相机跟随人物移动。 修改相机视口距离 在检查器中Lens下调正…

linux学习:文件属性

在操作文件的时候,经常需要获取文件的属性,比如类型、权限、大小、所有者等等, 这些信息对于比如文件的传输、管理等是必不可少的,而这些信息 这三个函数的功能完全一样,区别是:stat( )参数是一个文件的名字…

UI设计/交互设计/视觉设计项目汇报/作品集Figma/PPT模板

作为UI设计/交互设计/视觉设计师,创建作品集对于向潜在客户或雇主展示您的技能、创造力和风格至关重要。以下分步指南可帮助您创建令人印象深刻的作品集: 选择您的最佳作品:选择您最强大且最相关的设计项目,将其纳入您的作品集。…

Java应用中文件上传安全性分析与安全实践

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 文件上传的风险 二. 使用合适的框架和库 1. Spr…