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

目录

  • 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.mfbz.cn/a/205704.html

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

相关文章

Docker容器网络模式

1.none网络 1)使用默认网络模式创建一个BusyBox容器,用于对比none网络模式; 测试网络,可以正常连接外网。 2)再创建一个none网络模式的BusyBox容器; 测试网络连接,无法连接外网。 总结&#x…

六:Day01_Spring Boot01

一、Spring Boot简介 1. 概念简介 Spring Boot是Spring公司的一个顶级项目,和Spring Framework是一个级别的。 Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。 2. 启动器介绍 Spring Boot的启动器实际上就是一个依赖…

TSINGSEE青犀AI视频智能分析系统的视频接入能力解析

视频智能分析技术是一种先进的人工智能技术,它能够对视频内容进行自动化的分析和理解。这种技术的主要特点包括实时性、自动化、准确性、可解释性等。 1)实时性。视频智能分析技术能够在短时间内对大量的视频数据进行快速处理和分析,从而提供…

【网络BSP开发经验】网络流量应用识别技术

文章目录 网络流量应用识别技术背景应用识别基本原理应用识别主流技术方向特征识别技术单报文解析流特征解析 关联识别技术DNS关联识别 行为识别技术 应用识别框架介绍应用特征提取经验tcpdump 抓包方式默认启动监视指定网络接口的数据包监视指定主机的数据包 禁用特征提取加速…

Small Data Transmission (二)具体过程

这篇是SDT相关的具体过程,包括RRC层初始化SDT 的条件,MAC 层初始化SDT过程的判断,CG-SDT的具体过程,TA Validation for CG-SDT, CG-SDT TA 验证的路径损耗参考推导,SDT Uplink Time Alignment,RRC inactive中的CG based PUSCH传输和RA based PUSCH传输,依次看下。 初始…

简历上的工作经历怎么写

通过了简历筛选,后续的面试官会仔细阅读你的简历内容。他们在找什么呢?他们希望搞清楚你在某一段经历中具体干了什么,并且判断你的能力具体达到了什么水平。 简历在线制作下载:百度幻主简历 面试官喜欢具体的经历 越具体&#x…

计算机网络(二)

(八)客户端软件设计的细节 A、解析协议号 客户端可能会需要通过协议名指定协议,但是Socket接口是用协议号指定的,这时候我们就需要使用getprotobyname()函数实现协议名到协议号的转换,该函数会返回一个指向protoent的…

第三方实验室LIMS管理系统源码,asp.net LIMS源码

LIMS实验室信息管理系统源码 LIMS系统的功能根据实验室的规模和任务而有所不同,其系统主要功能包括:系统维护、基础数据编码管理,样品管理、数据管理、报告管理、报表打印、实验材料管理、设备管理等。它可以取代传统的手工管理模式而给检测实验室带来巨…

基于SSM框架的餐馆点餐系统的设计

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

什么是Anaconda?作用是?使用python必须要安装嘛?

一、什么是Anaconda以及其作用? 通俗来讲,Anaconda算是一个环境容器,也可以叫环境管理器。 作用:可以在Anaconda容器中为python项目创建不同的环境。在各个不同环境中可以安装不同版本的包并且各个环境互不影响。可以在使用不同项…

唯品会年度特卖大会㊙内购清单㊙

唯品会年度特卖大会㊙内购清单㊙ 内部员工亲友专享,实实在在省钱,❌抢完不补! 今晚8点开抢,提前收藏>> https://t.vip.com/Im3KlTnDSJ8 2023年唯品会年度特卖大会热门会场推荐 1.唯品会年度特卖大会 限时加码!瓜分百万津贴!抢海量…

java论坛数据以及搜索接口实现

一. 内容简介 java论坛数据以及搜索接口实现 二. 软件环境 2.1 java 1.8 2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL) 2.3 IDEA ULTIMATE 2019.3 2.4d代码地址 三.主要流程 3.1 创建数据库,创建数据表 3.2 开始编写接口,并测…

字节大佬整理测试用例编写规范

目录 1.1目的 1.2使用范围 二 测试用例编写原则 2.1系统性 2.2连贯性 2.3全面性 2.4正确性 2.5符合正常业务惯例 2.6仿真性 2.7容错性(健壮性) 三 测试用例设计方法 3.1 等价类划分法: 3.2 边界值分析法: 3.3 因果图…

拼多多工作制;奥特曼回归;拼多多市值;雷军回应组装厂;| 每日科技小评

今日科技圈速览 马斯克称人工智能比核弹更危险奥特曼完整备忘录曝光 :未来发展有三大优先事项AI(人工智能)新锐巨头OpenAI的新董事会或许没有给投资者留下一席之地阿里巴巴市值又反超拼多多,长远来看拼多多和阿里巴巴哪个市值高&…

YOLO改进系列之ParNetAttention注意力机制

ParNet注意力是一种用于自然语言处理任务的注意力机制,它是由谷歌在2019年提出的。ParNet注意力旨在解决传统注意力机制在处理长序列时的效率问题。传统的注意力机制在计算注意力权重时,需要对所有输入序列的位置进行逐一计算,这导致了在长序…

JS中的类型转换

该节会全面介绍强制类型转换的优缺点 1、值类型转换 将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况;隐式的情况称为强制类型转换 JS中的强制类型转换总是返回标量基本类型值(参见第 2 章),如字符…

5 存储器映射和寄存器

文章目录 5.3 芯片内核5.3.1 ICache5.3.2 DCache5.3.3 FlexRAM 5.4 存储器映射5.4.1 存储器功能划分5.4.1.1 存储器 Block0 内部区域功能划分5.4.1.2 储存器 Block1 内部区域功能划分5.4.1.3 储存器 Block2 内部区域功能划分 5.5 寄存器映射5.5.1 GPIO1的输出数据寄存器 5.3 芯…

如何使用内网穿透实现无公网ip环境访问VScode远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

leetCode 78.子集 + 回溯算法 + 图解

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集 示例 1: 输入:nums [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1…

Jmeter无法录制Chrome和Edge浏览器问题:ERR_SSL_PROTOCOL_ERROR

问题描述: Jmeter使用的是5.6.2,设置了代理proxy,添加了crt证书,但是录制时,在火狐浏览器可以正常录制,但在chrome和Edge上时,访问网站,回车后,一直是空白页面。 在谷歌…
最新文章