网络篇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+443ftp=TCP+21STMP=TCP+25PoP=TCP+110RDP=TCP+3389共享文件夹=TCP+445SQL=TCP+1433DNS=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)客户端到服务端:好的,收到。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络(LeNet5实现对Fashion_MNIST分类

参考6.6. 卷积神经网络(LeNet) — 动手学深度学习 2.0.0 documentation (d2l.ai) ps:在这里预备使用pythorch 1.对 LeNet 的初步认识 总的来看,LeNet主要分为两个部分: 卷积编码器:由两个卷积层组成; …

微服务相关

1. 微服务主要七个模块 中央管理平台:生产者、消费者注册,服务发现,服务治理,调用关系生产者消费者权限管理流量管理自定义传输协议序列化反序列化 2. 中央管理平台 生产者A在中央管理平台注册后,中央管理平台会给他…

【STL详解 —— list的模拟实现】

STL详解 —— list的模拟实现 list接口总览结点类的模拟实现构造函数 迭代器类的模拟实现迭代器类的模板参数说明构造函数运算符的重载--运算符的重载运算符的重载!运算符的重载* 运算符的重载-> 运算符的重载 list的模拟实现默认成员函数构造函数拷贝构造函数赋值运算符重载…

云服务器web环境之mariadb

1.安装mariadb服务 yum install mariadb-server 启动mariadb服务 systemctl start mariadb.service 输入mysql就能使用数据库了。 2.服务相关操作 systemctl stop mariadb.service systemctl restart mariadb.service 2.配置开机自启动 systemctl enable mariadb.serv…

k8s:kubectl 命令设置简写启用自动补全功能

k8s:kubectl 命令设置简写&启用自动补全功能 1、设置kubectl命令简写2、启用kubectl自动补全功能 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes(K8s)是一个强大的容器编排平台&#xff0…

netty

Netty出坑记-CSDN博客 NIO网络编程,高性能 异步事件驱动 短短几句话包含着多少含金量 特点 高并发:异步非阻塞IO模型,事件驱动 高性能:零拷贝 内存池 可定制 线程模型 多协议:http websocket tcp udp 自定义&…

python爬虫-----Selenium (第二十二天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

2024/4/15 AD/DA

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 AD/DA转换打开了计算…

下载了恶意软件怎么办,用这个软件可以解决 Mac电脑卸载软件 MacBook查杀病毒

随着苹果电脑在全球市场的普及,它们也日益成为恶意软件制作者的目标。这种趋势打破了许多人认为Mac系统不易受到病毒或恶意软件影响的传统观念。事实上,苹果电脑面临的恶意软件和安全威胁正在不断增多,这要求用户采取更加积极的措施来保护自己…

Flutter第八弹 构建拥有不同项的列表

目标:1)项目中,数据源可能涉及不同的模版,显示不同类型的子项,类似RecycleView的itemType, 有多种类型,列表怎么显示? 2)不同的数据源构建列表 一、创建不同的数据源 采用类似Rec…

苍穹外卖学习记录(一)

1.JWT令牌认证 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 JWT是目前最常用的一种令牌规范,它最…

关于机器学习/深度学习的一些事-答知乎问(三)

可解释人工智能如何进行创新? (1)解释方法结合。现有的研究较少关注如何将不同的解释方法结合起来,未来可以考虑将不同的 解释方法结合在一起,如正反结合,事实解释侧重于 “为什么”,反事实解释…

如何编写易于访问的技术文档 - 最佳实践与示例

当你为项目或工具编写技术文档时,你会希望它易于访问。这意味着它将为全球网络上的多样化受众提供服务并可用。 网络无障碍旨在使任何人都能访问网络内容。设计师、开发人员和撰写人员有共同的无障碍最佳实践。本文将涵盖一些创建技术内容的最佳实践。 &#xff0…

Arthas实战教程:定位Java应用CPU过高与线程死锁

引言 在Java应用开发中,我们可能会遇到CPU占用过高和线程死锁的问题。本文将介绍如何使用Arthas工具快速定位这些问题。 准备工作 首先,我们创建一个简单的Java应用,模拟CPU过高和线程死锁的情况。在这个示例中,我们将编写一个…

连接两部VR头显的type-c DP分配器方案,可以给主机设备PD反向供电与两部VR同时供电。

随着type-c的发展,目前越来越多的设备都在使用type-c作为连接的接口, 不仅是笔记本与手机在使用现在的游戏主机如(任天堂,steam,)或者是VR的一体机或者是VR头显也都在使用type-c作为连接接口。 type-c接口…

卷积学习笔记——一文直观形象弄懂

在神经网络的世界中,卷积操作犹如一个神秘的魔术师,它以一种精巧的方式提取出图像、声音等数据中的关键特征,为神经网络模型赋能。但究竟什么是卷积?我们一探究竟。 卷积(Convolution)本质上是一种数学运算操作,它可以用极简的数学形式漂亮地描述一个动态过程。我们可以用形象…

3D开发工具HOOPS:推动汽车行业CAD可视化发展

在最近的行业对话中,Tech Soft 3D(HOOPS厂商)的Jonathan Girroir和Actify的Peter West探讨了CAD可视化在当代企业中的重要性和挑战。作为CAD可视化领域的佼佼者,Actify通过其广受欢迎的Spinfire应用,赋能了全球40多个国…

10.哀家要长脑子了!

1. 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 哎哟 我去 我还以为你都搞懂了 呵呵 当时问题出现在右边界初始化 左闭右开 右边界是取不到的 int left 0, right nums.size() ; while(left < right) { int mid left (right - left) / 2; if( target > …

【随笔】Git 基础篇 -- 远程仓库 git clone(二十五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

【复习笔记】FreeRTOS(六) 队列操作

本文是FreeRTOS复习笔记的第六节&#xff0c;队列操作。 上一篇文章&#xff1a; 【复习笔记】reeRTOS(四) 列表项的插入和删除 文章目录 1.队列操作1.1.队列操作过程1.2.队列操作常用的API函数 二、实验设计三、测试例程四、实验效果 1.队列操作 队列是为了任务与任务、任务与…