【计网 面向连接的传输TCP】 中科大笔记 (十 二)

news2025/2/22 18:56:17

目录

  • 0 引言
  • 1 TCP 的特性
    • 1.1 拓展:全双工、单工、半双工通信
  • 2 TCP报文段结构
  • 3 TCP如何实现RDT
  • 4 TCP 流量控制
    • 4.1 题外话:算法感悟
  • 5 TCP连接3次握手、断开连接4次握手
    • 5.1 连接
    • 5.2 断开连接
  • 6 拥塞控制
    • 6.1 拥塞控制原理
    • 6.2 TCP拥塞控制

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:计算机四大基础专栏
  • 📜 其他章节:网络快速入门系列、计网概述、计网应用层详解、计网Web和HTTP、计网FTP、计网EMail、计网DNS、计网P2P
  • 💥 标题:【计算机网络 TCP】 中科大笔记 (十 二)
  • ❣️ 寄语:书到用时方恨少,事非经过不知难。
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

其实之前就已经学了 TCP 协议了,但是只是概略的学习,今天就详细的学习一下 TCP 协议的原理。

参考文章:知乎

1 TCP 的特性

TCP(Transmission Control Protocol)是一种面向连接、点到点、可靠、全双工的传输层协议。以下是TCP协议的主要特性:

  1. 面向连接:
    • TCP在通信之前必须先建立连接,通信完成后需要释放连接。连接的建立和释放过程分别是三次握手和四次挥手。
  2. 可靠性:
    • TCP通过序号、确认和重传机制来确保数据的可靠传输。每个TCP报文段都有一个唯一的序号,接收方会确认已成功接收的数据,并对未成功接收的数据进行重传。
  3. 流控制:
    • TCP使用滑动窗口机制进行流控制。接收方可以告知发送方它的接收窗口大小,从而限制发送方发送的数据量,防止接收方不堪重负。
  4. 拥塞控制:
    • TCP通过拥塞窗口和慢启动等机制来进行拥塞控制。拥塞窗口控制发送方的数据流量,以避免网络拥塞。慢启动机制在连接刚建立时,通过逐渐增加发送窗口的大小来适应网络状况。
  5. 全双工通信:
    • TCP是全双工通信的,意味着在一个TCP连接中,数据可以在两个方向上同时传输。
    • MSS:最大报文段的大小(Max Segment Size)
  6. 面向字节流:
    • TCP是面向字节流的,它不保留消息的边界。发送方将数据流分割成适当大小的报文段,而接收方则负责重新组装这些报文段。(字节流的数据是没有字符编码的,所以想以正确方式进行输出打印,还需要进行正确的解码操作
  7. 头部信息:
    • TCP报文头部包含了很多信息,包括源端口、目标端口、序号、确认号、窗口大小、控制标志等,以控制连接的建立、维护和数据传输。
  8. 超时与重传:
    • TCP使用超时与重传机制来处理丢失的数据。如果发送方在一定时间内未收到确认,触发超时,重新发送相应的数据。
  9. 可插拔:
    • TCP是一种可插拔的协议,它可以在不同的网络环境中运行,而上层应用无需关心底层网络的细节。

总体而言,TCP提供了一种高度可靠的数据传输服务,适用于那些对数据可靠性要求高、能够容忍一些延迟的应用,例如文件传输、Web浏览等。 TCP的特性和机制确保了数据的完整性、有序性和可靠性。

1.1 拓展:全双工、单工、半双工通信

他们三者描述了通信设备之间信息流动的方向和能力。


全双工通信(Full-Duplex Communication)

在全双工通信中,通信的双方可以同时发送和接收数据,而且这两个方向的通信是相互独立的。这意味着在同一时间内,设备 A 可以发送数据给设备 B,同时设备 B 也可以发送数据给设备 A,实现了双方之间的双向通信。电话对讲机、互联网电话和计算机网络中的TCP协议等都是全双工通信的例子。


单工通信(Simplex Communication)

在单工通信中,通信的双方只能有一个方向的通信。其中一个设备只能发送数据,而另一个设备只能接收数据,不能同时发送和接收。通信是单向的,类似于广播或电视广播,其中信息只能从一个地方传输到另一个地方,而反向通信是不可行的。


半双工通信(Half-Duplex Communication)

在半双工通信中,通信的双方可以在不同的时间段内进行双向通信,但不能同时进行。设备 A 在某一时刻发送数据给设备 B,然后在另一时刻设备 B 发送数据给设备 A。对讲机通信就是半双工通信的一个例子。


总结

  • 全双工通信: 双方可以同时发送和接收数据,实现双向通信。

  • 单工通信: 通信双方只能有一个方向的通信,不能同时发送和接收。

  • 半双工通信: 双方可以进行双向通信,但不能同时进行,需要切换发送和接收的方向。


选择使用哪种通信模式取决于特定的应用需求和通信设备的能力。在许多实际应用中,全双工通信更为常见,因为它提供更高的灵活性和效率。

2 TCP报文段结构

TCP报文的Body部分就是存储的应用层的数据。例如应用层是HTTP协议,那么TCP报文的Body就是存储的请求报文或者响应报文。

在这里插入图片描述


TCP(Transmission Control Protocol)报文段是在TCP通信中传输数据的基本单元。TCP报文段的结构如下:

  1. 源端口号(Source Port):
    • 占用2个字节,用于标识发送方应用程序的端口号。
  2. 目标端口号(Destination Port):
    • 占用2个字节,用于标识接收方应用程序的端口号。
  3. 序号(Sequence Number):
    • 占用4个字节,表示本报文段的第一个数据字节在完整数据流中的序号。用于按序传递数据。
  4. 确认号(Acknowledgment Number):
    • 占用4个字节,如果设置了ACK标志位,则表示期望接收的下一个数据字节的序号。用于确认已经成功接收的数据。
  5. 数据偏移(Data Offset):
    • 占用4个位,表示TCP报文段头部的长度,以4个字节为单位。最大值为15,因此头部长度最大为60字节。
  6. 保留(Reserved):
    • 占用6个位,保留字段,未使用。
  7. 标志位(Flags):
    • 占用6个位,包括URG、ACK、PSH、RST、SYN、FIN等标志,用于指示TCP报文段的各种状态和控制信息。
  8. 窗口大小(Window Size):
    • 占用2个字节,表示发送方愿意接收数据的窗口大小。用于流量控制。
  9. 校验和(Checksum):
    • 占用2个字节,用于检测TCP报文段头部和数据的错误。
  10. 紧急指针(Urgent Pointer):
  • 占用2个字节,如果URG标志被置位,则表示紧急数据的偏移量。用于指示紧急数据。
  1. 可选项(Options):
  • 长度可变,最长为(Data Offset - 5) * 4 字节,用于传递一些可选的信息,如最大报文段大小(MSS)、时间戳等。
  1. 数据(Data):
  • 包含应用层数据的部分。可以是0个或多个字节。

TCP报文段的头部是固定长度的,但其选项和数据部分的长度是可变的。报文段的结构提供了对数据传输的控制和管理,包括流量控制、错误检测、序号和确认号的管理等。除了数据部分之外,TCP报文段的所有信息都包含在TCP报文头部。

3 TCP如何实现RDT

TCP(Transmission Control Protocol)是一种在IP(Internet Protocol)网络上实现可靠数据传输的协议。IP本身是一种无连接、不可靠的数据包交换协议,它主要负责在网络中传递数据包,并将数据包从源地址传输到目标地址。然而,TCP在IP的基础上提供了一种可靠的、面向连接的通信服务。

下面是TCP如何在IP不可靠的基础上实现可靠数据传输的基本原理:

  1. 建立连接(Three-Way Handshake):

    • 在进行数据传输之前,发送方和接收方需要建立一个连接。这是通过三次握手来完成的。
    • 第一步,客户端向服务器发送一个请求(SYN)以建立连接。
    • 第二步,服务器收到请求后,回复一个确认(ACK),并发送自己的SYN。
    • 第三步,客户端收到确认后,回复一个确认,完成连接的建立。
  2. 可靠数据传输:

    • 一旦连接建立,数据的传输就会开始。
    • 数据被划分成小的数据块,称为数据段(segment)。
    • 发送方将数据段发送到接收方,并等待接收方的确认。
    • 如果发送方在一定时间内未收到确认,它会重新发送相同的数据段。
  3. 流量控制(Flow Control):

    • TCP使用滑动窗口机制来进行流量控制。发送方和接收方都有一个窗口大小的概念。
    • 接收方通过发送窗口大小告诉发送方自己能够接收的数据量。
    • 发送方根据接收方的窗口大小来控制发送数据的速率,以防止数据丢失或拥塞。
  4. 拥塞控制(Congestion Control):

    • TCP通过拥塞窗口来进行拥塞控制。
    • 当网络拥塞时,TCP会减小拥塞窗口的大小,降低发送速率,以减轻网络压力。
    • 当网络条件好转时,拥塞窗口会逐渐增大,提高发送速率。
  5. 顺序控制:

    • 接收方通过对接收到的数据包进行排序,确保数据包按正确的顺序组装。
    • 如果接收方发现有丢失的数据包,它会要求发送方重新发送这些数据包。
  6. 连接的关闭(Four-Way Handshake):

    • 数据传输完成后,双方需要进行连接的关闭。
    • 关闭是通过四次握手来完成的,包括发送方和接收方各发送一个FIN(Finish)报文,表示数据传输结束。
    • 对方收到FIN后,回复一个确认,表示同意关闭连接。这个过程分为两个步骤,先由客户端发送FIN,然后由服务器发送FIN。

通过这些机制,TCP实现了在IP网络上的可靠数据传输。它提供了一种面向连接、有序、可靠、流式的传输服务,使得应用层可以在不同的设备之间进行可靠的数据交换。

4 TCP 流量控制

TCP实现流量控制的主要机制是通过滑动窗口(Sliding Window)来调整发送方的发送速率,以适应接收方的处理能力和网络状况。滑动窗口机制是TCP用于管理数据流的一种重要方式,以下是详细解剖流量控制原理的步骤:

  1. 接收方通告窗口大小:

    • 接收方在TCP头部的窗口字段中通告自己的窗口大小,即接收方当前能够接收的数据量。
    • 接收方动态调整窗口大小,根据自身处理能力和可用缓存的大小。
  2. 发送方的发送窗口:

    • 发送方也有一个窗口大小的概念,称为发送窗口。
    • 发送窗口大小表示发送方可以发送但还未被确认的数据量。
  3. 滑动窗口的原理:

    • 发送方发送窗口的起始位置称为发送方的基序号(Sequence Number)。
    • 发送方将数据按照窗口大小划分成多个段,每个段的大小不超过窗口大小。
    • 发送方发送窗口会随着接收到对端的确认而滑动,即基序号向前移动。
    • 滑动窗口的滑动过程是动态的,它根据接收方通告的窗口大小和网络状况来进行调整。
  4. 流量控制过程:

    • 发送方发送数据,并等待接收方的确认。
    • 接收方接收到数据后,根据自身处理能力和可用缓存的大小通告发送方自己的窗口大小。
    • 发送方根据接收方通告的窗口大小和当前未被确认的数据量来决定发送的数据量。
    • 如果发送方的发送窗口超过了接收方通告的窗口大小,发送方需要等待接收方的确认,并调整发送窗口的大小。
  5. 窗口调整:

    • 如果接收方的窗口变大,发送方可以增加发送窗口的大小,提高发送速率。
    • 如果接收方的窗口变小,发送方需要适时减小发送窗口的大小,以防止发送过多的数据导致网络拥塞或接收方无法处理。

通过这种滑动窗口的机制,TCP实现了流量控制,使得发送方的发送速率可以根据接收方的处理能力和网络状况进行动态调整,从而保证在不同网络条件下的可靠数据传输。这种流量控制机制有效地防止了发送方发送过多的数据,以及接收方无法及时处理导致的问题。

4.1 题外话:算法感悟

学习算法是触类旁通的。算法是解决问题的一般方法,而不仅仅是应用于某一特定领域。很多常见的算法和数据结构在计算机科学的各个领域都有广泛的应用。滑动窗口算法就是一个很好的例子,它在多个领域都有用途,包括计算机网络、字符串处理、数组处理等。

学习算法具有以下优势:

  1. 通用性: 算法是解决问题的通用方法,可以应用于各种领域和情境。

  2. 解决复杂问题: 算法使得我们能够更有效地解决复杂的问题,提高程序的效率和性能。

  3. 思维模式: 学习算法有助于培养抽象思维和问题求解的能力。解决一个算法问题通常需要分析问题、设计解决方案并进行实现。

  4. 编码技能: 熟练掌握算法有助于提高编码技能,使代码更加清晰、高效和可维护。

  5. 面试和招聘: 在计算机科学领域,算法和数据结构是面试中常见的考察点,掌握这些知识可以提高在招聘过程中的竞争力。

当你学习一种算法时,你会学到解决特定问题的通用思维模式。这种思维模式可以应用于其他类似的问题,使你更容易理解和解决新的挑战。例如,学习了滑动窗口算法后,你可能会发现在其他领域的类似问题中也可以采用相似的思路。

总的来说,算法是计算机科学的基础,学习它们不仅有助于解决具体问题,还能够提高你在各种计算机科学领域的问题解决能力。

5 TCP连接3次握手、断开连接4次握手

5.1 连接

三次握手可以解决半连接和接受老数据的问题。

TCP(Transmission Control Protocol)连接的三次握手是在建立 TCP 连接时进行的一系列步骤,以确保通信的双方都能够理解并同意建立连接。这三个步骤是:

  1. 第一次握手(SYN):

    • 客户端发送一个 TCP 报文段,其中包含一个设置了 SYN(Synchronize)标志的序列号(Sequence Number)。这表示客户端请求建立连接。
    • 客户端选择一个初始的序列号,用于后续数据传输的标识。
  2. 第二次握手(SYN + ACK):

    • 服务器收到客户端的 SYN 请求后,如果同意建立连接,会发送一个包含 SYN 和 ACK(Acknowledgment)标志的 TCP 报文段作为响应。
    • 服务器也选择一个初始的序列号用于后续数据传输,并确认收到了客户端的序列号。
  3. 第三次握手(ACK):

    • 客户端收到服务器的 SYN + ACK 后,向服务器发送一个带有 ACK 标志的 TCP 报文段,表示连接已经建立。
    • 服务器收到客户端的 ACK 后,双方正式建立连接,可以开始进行数据传输。

这个过程确保了双方都同意建立连接,同时也用于同步双方的初始序列号。这种三次握手机制可以防止已失效的连接请求导致的问题,并确保每一方都具有相同的连接参数。在连接建立后,双方就可以进行正常的数据传输。

5.2 断开连接

可以将连接看作两个不同方向的连接。分别是客户端到服务端方向的传输、服务器到客户端的传输。两次握手只能断开一个方向的连接,所以总共需要四次握手。

TCP连接的四次握手是在关闭连接时进行的一系列步骤,以确保双方都愿意终止连接。这四个步骤是:

  1. 第一次握手(FIN):

    • 主动关闭方(通常是客户端)发送一个 TCP 报文段,其中包含设置了 FIN(Finish)标志的序列号。
    • 这表示主动关闭方不再发送数据,但仍然可以接收数据。
  2. 第二次握手(ACK):

    • 被动关闭方(通常是服务器)收到关闭方的 FIN 后,向关闭方发送一个带有 ACK 标志的报文段,确认收到了关闭方的 FIN。
    • 此时被动关闭方进入半关闭状态,可以继续发送数据给主动关闭方。
  3. 第三次握手(FIN):

    • 被动关闭方向主动关闭方发送一个 FIN 报文段,表示被动关闭方也准备关闭连接。
    • 主动关闭方收到 FIN 后,进入等待状态,继续发送数据。
  4. 第四次握手(ACK):

    • 主动关闭方收到被动关闭方的 FIN 后,向被动关闭方发送一个 ACK 报文段,表示收到了 FIN。
    • 此时连接正式关闭。

这个过程确保了双方都有足够的时间完成尚未完成的数据传输,并且都同意关闭连接。在四次握手完成后,连接被完全释放。

需要注意的是,TCP 的四次握手过程是为了保证数据的完整性和可靠性。在实际应用中,可能存在 TIME_WAIT 状态,即连接关闭后一小段时间内,系统会保持连接的信息以确保已传输的数据被接收方完全接收。这可以防止连接中残留的数据干扰下一次连接。

在这里插入图片描述

对称释放,并不完美!

6 拥塞控制

6.1 拥塞控制原理

6.2 TCP拥塞控制

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

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

相关文章

shell脚本 ( 函数 数组 冒泡排序)

目录 什么是函数 使用函数的方法 格式 注意事项 函数的使用 函数可以直接使用 函数变量的作用范围 函数返回值 查看函数 删除函数 函数的传递参数 使用函数文件 ​编辑 拓展递归函数 例:求5的阶乘 什么是数组 使用数组的方法 1.先声明 2.定义数组 3…

Python---函数的数据---拆包的应用案例(两个变量值互换,*args, **kwargs调用时传递参数用法)

案例: 使用至少3种方式交换两个变量的值 第一种方式:引入一个临时变量 c1 10 c2 2# 引入临时变量temp temp c2 c2 c1 c1 tempprint(c1, c2) 第二种方式:使用加法与减法运算交换两个变量的值(不需要引入临时变量&#xff09…

ArcGIS制作广场游客聚集状态及密度图

文章目录 一、加载实验数据二、平均最近邻法介绍1. 平均最近邻工具2. 广场游客聚集状态3. 结果分析三、游客密度制图一、加载实验数据 二、平均最近邻法介绍 1. 平均最近邻工具 “平均最近邻”工具将返回五个值:“平均观测距离”、“预期平均距离”、“最近邻指数”、z 得分和…

C++学习之路(五)C++ 实现简单的文件管理系统命令行应用 - 示例代码拆分讲解

简单的文件管理系统示例介绍: 这个文件管理系统示例是一个简单的命令行程序,允许用户进行文件的创建、读取、追加内容和删除操作。这个示例涉及了一些基本的文件操作和用户交互。 功能概述: 创建文件 (createFile()): 用户可以输入文件名和内…

计算机系统的层次结构与性能指标

目录 一. 计算机系统的层次结构二. 计算机性能指标2.1. 存储器的性能指标2.2 CPU的性能指标2.3 系统整体的性能指标2.4 系统整体的性能指标(动态测试) \quad 一. 计算机系统的层次结构 \quad \quad 虚拟机器的意思是看起来像是机器直接就能执行程序员所写的代码, 其实是需要通过…

Java王者荣耀

一、创建项目 二、代码 package com.sxt;import javax.swing.*; import java.awt.*;public class Background extends GameObject {public Background(GameFrame gameFrame) {super(gameFrame);// TODO Auto-generated constructor stub}Image bg Toolkit.getDefaultToolkit(…

基于helm的方式在k8s集群中部署gitlab - 备份恢复(二)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署(一),本篇重点介绍在k8s集群中备份gitlab的数据,并在虚拟机上部署相同版本的gitlab,然后将备份的数据进行还原恢复 文章目录 1. 备份2. 恢复到虚拟机上的gitlab2.…

java学习part13Object类和常用方法

1.Object 2.常用方法 2.1clone() clone()就是深拷贝,创建一个同内容新对象。需要实现接口 2.2finalize()已废弃 类似于析构函数,在GC回收之前调用。 System.gc()强制调用gc,然后就能看到finalize()的输出 2.3equals() 对于引用类型可用。…

帮管客CRM SQL注入漏洞复现

0x01 产品简介 帮管客CRM是一款集客户档案、销售记录、业务往来等功能于一体的客户管理系统。帮管客CRM客户管理系统,客户管理,从未如此简单,一个平台满足企业全方位的销售跟进、智能化服务管理、高效的沟通协同、图表化数据分析帮管客颠覆传…

Linux(8):BASH

硬件、核心与 Shell 操作系统其实是一组软件,由于这组软件在控制整个硬件与管理系统的活动监测,如果这组软件能被用户随意的操作,若使用者应用不当,将会使得整个系统崩溃。因为操作系统管理的就是整个硬件功能。 应用程序在最外层…

ELF分析(以CS:APP linkLab的文件为例)

文件结构:gcc -o test main.o phase1.o 可执行文件的段头表(又称程序头表)(用于描述本文件到虚拟内存的映射) text文件的段头表如下。 上图有两个LOAD。它们的区别是权限不同。LOAD1是可读可执行(这里面存…

拍这个视频把脸都扇肿了,midjourney官网效果复现

我是如何复现midjourney官网首页效果的? 视频讲解地址:[https://www.bilibili.com/video/BV1FQ4y1p7HC/](https://www.bilibili.com/video/BV1FQ4y1p7HC/)原理,过程,代码讲解 大家好,这一集我来讲一下 字符花园里 总结…

ehr人力资源管理系统(实际项目源码)

eHR人力资源管理系统:功能强大的人力资源管理工具 随着企业规模的不断扩大和业务需求的多样化,传统的人力资源管理模式已无法满足现代企业的需求。eHR人力资源管理系统作为一种先进的管理工具,能够为企业提供高效、准确、实时的人力资源管理…

04_MySQL备份与恢复

任务背景 一、真实案例 某天,公司领导安排刚入职不久的小冯同学将生产环境中的数据(MySQL数据库)全部导入到测试环境给测试人员使用。当小冯去拿备份数据时发现,备份数据是1个礼拜之前的。原因是之前运维同事通过脚本每天对数据库进行备份,…

redis key

不管是:规则,还是其他规则,定义好就可以了。其实没有太多要求的。 1)冒号分割类似那种yaml在客户端显示树结构 2)其他分割类似那种properties在客户端显示列表结构

​重生奇迹mu迷宫攻略​

重生奇迹mu迷宫是一种比较有挑战性的游戏玩法,需要一定的技巧和策略才能完成。以下是一些基本的攻略和技巧: 了解每个迷宫的特点:不同的迷宫有不同的规则和特点,需要根据迷宫的特点来制定合理的策略。在进入迷宫前可以先了解一下…

Unity2D-URP基于ShaderGraph创建带粒子特效的激光光束

文章目录 创建Shader新建Node: UV新建Node: Split......参数说明 基于Shader创建Material创建Line创建粒子系统StartVFX创建粒子材质更改粒子系统的材质设置透明模式设置粒子效果创建一个Beam设置EndVFX效果预览激光光束管理脚本最终预览 创建Shader Create --> Shader Gra…

redis报错3

INFO: Initializing SpringDispatcherServletdispatcherServlet

思维模型 长尾效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。小众需求大价值。 1 长尾效应的应用 1.1 长尾效应在电子商务领域的应用 亚马逊公司是全球最大的电子商务公司之一,它利用长尾效应来销售大量的小众产品,满足消费者…