TCP(Transmission Control Protocol,传输控制协议)整理

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输协议,它是OSI(Open System Interconnection,开放式系统互联)模型中的第四层协议,通常使用于网络中的应用层和传输层之间。TCP协议通信过程中所涉及到的细节可以从以下几个方面进行详细介绍:

一、TCP协议的特点

  1. 面向连接:通信前需要先建立连接,传输完成后再释放连接。传输数据时有三次握手和四次挥手过程。
  2. 可靠传输:采用确认应答机制和重传控制,确保数据传输的可靠性和完整性。
  3. 流量控制:通过滑动窗口技术,控制发送方发送数据的速度,避免接收方处理不过来而出现数据丢失的情况。
  4. 拥塞控制:根据网络拥塞情况调整发送数据的速度。当网络拥塞时,TCP协议会通过减小发送窗口或延迟发送数据的方式来降低网络拥塞程度。
  5. 面向字节流:TCP协议是以字节流的形式传输数据,而不是以数据包为单位传输。因此,应用层需要自己处理数据包的边界。

二、TCP协议通信过程

TCP协议通信过程包括建立连接、数据传输和断开连接三个阶段。

  1. 建立连接:通过三次握手建立连接。

    • 第一次握手:客户端向服务端发送SYN(同步)包,其中SYN=1,seq=x,表示客户端希望与服务端建立连接,同时指定自己的初始序号为x。此时客户端处于SYN_SENT状态。
    • 第二次握手:服务端接收到SYN包后,向客户端发送SYN-ACK(同步-确认)包,其中SYN=1,ACK=1,ack=x+1,seq=y,表示服务端已经收到客户端的请求,同意建立连接,同时指定自己的初始序号为y,确认号为x+1。此时服务端处于SYN_RCVD状态。
    • 第三次握手:客户端收到SYN-ACK包后,向服务端发送ACK(确认)包,其中SYN=0,ACK=1,ack=y+1,seq=x+1,表示客户端已经收到服务端的确认,连接建立成功。此时客户端处于ESTABLISHED状态,服务端也处于ESTABLISHED状态。这样就完成了三次握手建立连接的过程。
  2. 数据传输:连接建立成功后,开始传输数据。

    • 数据在应用层被拆分成数据段,在传输层被拆分成数据包(也称为报文段),每个数据包包含源端口号、目标端口号、序列号、确认号、标志位等信息。
    • 发送方发送数据包后,等待接收方回复确认信息,如果未收到确认信息,则进行重传,直到接收方成功接收数据包。
    • 接收方收到数据包后,会对数据包进行确认,向发送方发送确认响应。如果接收方没有收到正确的数据包,它会要求发送方重发数据。
    • TCP数据分段传输可以提高网络的可靠性和稳定性,避免了数据包的丢失和重传,但是也会造成额外的网络开销。
  3. 断开连接:通过四次挥手关闭连接。

    • 第一次挥手:客户端向服务端发送FIN(终止)报文,表示客户端不再发送数据。
    • 第二次挥手:服务端收到FIN报文后,向客户端发送ACK报文,表示收到了客户端的FIN报文。
    • 第三次挥手:服务端向客户端发送FIN报文,表示服务端不再发送数据。
    • 第四次挥手:客户端收到FIN报文后,向服务端发送ACK报文,表示收到了服务端的FIN报文。至此,连接关闭成功。

在四次挥手的过程中,最后一个ACK报文可能会丢失,因此需要等待一段时间后才能确认连接已经关闭。这个等待时间称为TIME_WAIT状态,一般为2MSL(Maximum Segment Lifetime,最长报文寿命)时间,即一个报文在网络中最长的生命周期。

三、TCP协议中的关键机制

  1. 序列号与确认应答:TCP协议通过给每个数据包添加序列号和确认号,确保数据按正确顺序传递,并且没有丢失或损坏。接收方在成功接收到数据后,会向发送方发送确认消息,告知发送方数据已经到达。如果发送方未收到确认,则会进行重发。
  2. 超时重传:如果发送方在规定时间内未收到确认应答,则会将该数据包视为丢失,并重新发送。这一机制保证了数据的可靠传输。
  3. 滑动窗口:TCP协议通过滑动窗口技术来实现流量控制。发送方会根据接收方返回的窗口大小信息,调整自己的发送速度,以避免接收方处理不过来而导致数据丢失。
  4. 拥塞控制:TCP协议还具备拥塞控制功能。当网络出现拥塞时,TCP会通过降低发送方的数据传输速率和进行重传等措施来保证数据的可靠传输。拥塞控制策略包括慢启动、拥塞避免、拥塞发生和快速恢复等。

四、TCP协议的应用场景

TCP协议常用于HTTP、FTP、Telnet等传输层协议中,因为这些协议需要传输大量的数据并要求传输的数据准确无误。TCP协议的可靠传输和面向连接的特性使得它成为这些应用的首选传输协议。

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

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

相关文章

【linux系统】进程

文章目录 进程和PCBlinux与进程的相关命令PS linux下的PCB进程标识符父子进程fork 进程状态磁盘睡眠 -- D暂停和跟踪暂停 -- T和t僵尸进程 -- Z孤儿进程 进程优先级 进程地址空间再谈fork进程地址空间分布虚拟地址和页表mm_struct 进程控制进程终止进程退出码信号 进程等待进程…

【翻译】在 Python 应用程序中使用Qt Designer的UI文件

原文地址:Using a Designer UI File in Your Qt for Python Application 直接上图,上代码 将UI文件转为Python 为了演示,我们使用 Qt Widgets 简单示例说明。 这个应用程序由一个源文件 easing.py、一个 UI 文件 form.UI、一个资源文件 ea…

Linux补丁命令patch

1、生成补丁,创建两个相同的目录结构,修改里面文件的内容 diff -uNr old_version new_version > update.patch 2、打补丁,应用到一个名为 target_version/ 的目录上,该目录与old_version/ 文件相同。 cd target_version patc…

考研笔记之操作系统(四) - 文件管理

文件管理 1. 简介1.1 前情回顾1.2 文件的属性1.3 文件内部数据的组织方式1.4 操作系统向上提供的文件功能1.5 文件应如何放在外存 2. 文件的逻辑结构2.1 无结构文件2.2 有结构文件2.2.1 顺序文件2.2.2 索引文件2.2.3 索引顺序文件2.2.4 多级索引顺序文件 3. 文件目录3.1 基本概…

【网络】用网线连接两台电脑实现远程桌面

目录 1. 准备工作1.1 硬件要求1.2 软件要求 2. 网络连接2.1 直接连接2.2 通过路由器连接 3. 配置IP地址3.1 设置IP地址3.2 检查连接 4. 启用远程桌面4.1 启用远程桌面4.2 添加用户4.3 防火墙设置 5. 远程连接5.1 使用远程桌面连接5.2 使用快捷方式 6. 常见问题解决7. 额外建议结…

1422. 分割字符串的最大得分【字符串】

文章目录 1422. 分割字符串的最大得分解题思路Go代码 1422. 分割字符串的最大得分 1422. 分割字符串的最大得分 给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所…

使用3080ti运行blip2的

使用3080ti运行blip2的案例 注意!blip2很吃显存,需要大于80GB显存的卡。我最后安装的所有包的版本信息(python 3.9 )以供参考: 首先,我在运行blip2的demo的时候显存用了80G以上,所以大家卡的显存…

Vue 中引入 ECharts 的详细步骤与示例

在Vue项目中引入ECharts,可以让我们轻松地在前端页面中展示各种图表。ECharts 是一个基于 JavaScript 的开源可视化图表库,它提供了丰富的图表类型和强大的配置选项,使得在Vue项目中集成和使用变得非常方便。 一、准备工作 创建Vue项目&…

moectf-Web题解

1、弗拉格之地的入口 2、垫刀之路01: MoeCTF?启动! 3、ez_http 4、ProveYourLove 5、弗拉格之地的挑战 6、ImageCloud前置 7、垫刀之路02: 普通的文件上传 8、垫刀之路03: 这是一个图床 9、垫刀之路05: 登陆网站 10、垫刀之路06: pop base mini …

【工具】VSCODE下载,配置初次设置

打开 settings.json 文件,包含了 Visual Studio Code (VSCode) 中的各种用户配置。 {"files.associations": {"*.vue": "vue","*.wpy": "vue","*.wxml": "html","*.wxss": "…

软件架构设计中的微内核架构是什么

Visual Studio Code 是一个广受欢迎的代码编辑器。它同样采用微内核架构,核心是一个轻量级的编辑器引擎,提供了基本的文本编辑、代码高亮、语法检查等功能。 通过安装不同的扩展插件,用户可以添加对各种编程语言的支持、调试功能、版本控制集…

React生命周期案例详解

React 组件的生命周期是指组件从创建、渲染、更新到卸载的整个过程。在 React 16 及之前的版本中,生命周期方法被分为几个不同的阶段:挂载(Mounting)、更新(Updating)、卸载(Unmounting&#xf…

Java值传递、序列化详解

Java 值传递详解 说到参数,我们先来搞懂一下这两个概念 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数(有参的方法),参数在程序语言中分为: 实参(实际参数,…

QT实现Opencv图像处理

案例 基于QT的人脸识别 pro文件需要加以下代码 INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv2 LIBS E:/opencv/o…

D34【python 接口自动化学习】- python基础之输入输出与文件操作

day34 文件关闭 学习日期:20241011 学习目标:输入输出与文件操作﹣-46 常见常新:文件的关闭 学习笔记: 文件关闭的内部工作过程 close()函数 with语句 常用的打开关闭文件 # 文件关闭 # 方式…

【Python】操作列表

Python是一种功能强大的编程语言,它提供了丰富的操作列表的方法。列表是一种有序、可变的数据类型,可以存储任意类型的元素。下面是一些常用的操作列表的方法: 1. 创建列表:可以使用方括号 [] 或者 list() 函数来创建一个列表。例…

kubernetes详解

一、kubernetes的定义 Kubernetes (希腊语"舵手" 或 "飞行员") 由Joe Beda,Brendan Burns和Craig McLuckie创立,并由其他谷歌工程师,包括Brian Grant和Tim Hockin进行加盟创作,并由谷歌在2014年首次对外宣布。…

值类型和引用类型的使用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){/****值类型****/bool test;//必须赋值,否则报错test true;Console.WriteLin…

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例,异常数…

Observability:使用 OpenTelemetry 自动检测 Go 应用程序

作者:来自 Elastic Damien Mathieu 使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序,而无需更改应用程序代码。 在快节奏的软件开发领域,尤其是在云原生…