TCP协议的相关特性
目录
正文:
1.可靠性
2.连接管理
3.滑动窗口
4.流量控制
5.拥塞控制
6.延迟应答
7.捎带应答
总结:
正文:
1.可靠性
TCP协议是一个有连接,可靠传输,面向字节流,全双工的协议。其中可靠传输的实现应该是属于最抽象的了,而想要实现可靠传输就需要确认应答和超时重传这两个机制。
确认应答:在 TCP 传输过程中,接收方接收到数据后会发送确认应答给发送方,通知发送方已经成功接收数据。发送方接收到确认应答后才会继续发送新的数据,保证数据的有序传输。TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据,下一次你从哪里开始发。大概图形如下:
超时重传: TCP 传输过程中,发送方发送数据后会等待接收方的确认,如果发送方在规定的超时时间内未收到确认,就会认为数据丢失,触发超时重传机制,重新发送数据。超时重传可以确保即使在网络出现丢包等情况时,数据依然能够可靠传输。超时时间的选择很重要,如果设置过短会导致频繁重传,影响传输效率,如果设置过长会延迟重传时间,影响数据传输的实时性。大致图形如下:
当超时重传和确认应答机制配合得当时,TCP协议可以在复杂的网络环境下高效地传输数据,并保障数据的完整性和可靠性。
2.连接管理
TCP 协议中的连接管理是指通过三次握手建立连接和四次挥手终止连接的过程。TCP连接的建立过程通常被称为三次握手(Three-way Handshake)。这个过程确保了两个端点都准备好进行数据传输。当通信双方完成数据传输后,它们需要释放连接。TCP连接的释放过程称为四次挥手(Four-way Handshake)。
三次握手: a. 第一次握手:客户端向服务器端发送 SYN 报文段,请求建立连接。 b. 第二次握手:服务器端接收到 SYN 报文段后,回复一个 SYN+ACK 报文段,表示同意建立连接。 c. 第三次握手:客户端接收到服务器端的 SYN+ACK 报文段后,发送一个 ACK 报文段,确认连接建立。 此时,TCP 连接建立成功,双方可以开始进行数据传输。大致图片如下:
四次挥手: a. 第一次挥手:客户端发送一个 FIN 报文段,表示数据传输完成。 b. 第二次挥手:服务器端接收到 FIN 报文段后,回复一个 ACK 报文段,表示确认收到客户端的关闭请求。 c. 第三次挥手:服务器端发送一个 FIN 报文段,表示数据传输完成。 d. 第四次挥手:客户端接收到 FIN 报文段后,回复一个 ACK 报文段,表示确认收到服务器端的关闭请求。此时,TCP 连接正式关闭,双方释放连接资源。大致图片如下:
通过三次握手建立连接,可以确保双方都同意建立连接,并同步连接状态;通过四次挥手终止连接,可以安全地结束数据传输并释放连接资源,避免出现半开连接等问题。连接管理的规范流程保证了 TCP 在通信过程中的正常运行,提升了网络的稳定性和安全性。
3.滑动窗口
确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答。收到ACK后再发送下一个数据段.。这样做有一个比较大的缺点, 就是性能较差。尤其是数据往返的时间较长的时候。既然这样一发一收的方式性能较低, 那么我们一次发送多条数据, 就可以大大的提高性能(其实是将多个段的等待时间重叠在一起了)。
操作原理:
- 发送方使用发送窗口来控制发送数据的数量。发送窗口大小取决于接收方通知的窗口大小和拥塞控制算法调整的窗口大小。发送窗口内的数据可以被发送,窗口外的数据暂时不能发送;
- 接收方使用接收窗口来控制接收数据的数量。接收窗口表示接收方可以接收的数据的范围,接收窗口内的数据可以被接收,窗口外的数据则会被丢弃或拒绝。发送前四个段的时候, 不需要等待任何ACK, 直接发送;
- 收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
- 操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答只有确认应答过的数据, 才能从缓冲区删掉;
- 窗口越大, 则网络的吞吐率就越高;
大致图像如下:
滑动窗口是 TCP 协议中一个重要的机制,通过对发送和接收窗口的动态调整,可以更好地管理数据的传输,提高数据传输的效率。
4.流量控制
接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应。流量控制是 TCP 协议中的一种机制,用于调节数据传输的速率,以确保发送方和接收方之间的数据传输不会出现过载。流量控制主要通过滑动窗口机制来实现。
操作原理:
- 接收方通过 TCP 报文段中的接收窗口字段告知发送方自己当前的接收窗口大小,即可接收的数据量,窗口大小字段越大, 说明网络的吞吐量越高。
- 发送方根据接收方通知的窗口大小来控制发送数据的速率,确保发送的数据不会超过接收方当前的处理能力,接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端,发送端接受到这个窗口之后, 就会减慢自己的发送速度;。
- 发送方发送的数据量不能超过接收方通知的窗口大小,否则接收方将丢弃多余的数据或发出窗口溢出信息,如果接收端缓冲区满了, 就会将窗口置为0。这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 使接收端把窗口大小告诉发送端。
通过流量控制可以避免网络拥塞和数据堆积,确保网络传输的稳定性和顺畅性。
5.拥塞控制
虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚开始阶段就发送大量的数据, 仍然可能引发问题。拥塞控制是 TCP 协议中的一种机制,用于防止网络拥塞并在出现网络拥塞时适当降低数据流量,以避免数据丢失和网络性能下降。拥塞控制主要通过拥塞窗口和拥塞避免算法来实现。
操作原理:
- TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据。
- 发送开始的时候, 定义拥塞窗口大小为1,每次收到一个ACK应答, 拥塞窗口加1。每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送
的窗口,像上面这样的拥塞窗口增长速度, 是指数级别的。"慢启动" 只是指初使时慢, 但是增长速度非常快。 - 当拥塞窗口超过一个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增长当TCP开始启动的时候, 慢启动阈值等于窗口最大值,在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1。
通过拥塞控制机制,TCP 可以确保网络中的数据流量在承载范围内,避免网络拥塞和数据丢失。
6.延迟应答
延时应答(Delayed ACK)是指在 TCP 协议中,接收端在接收到数据包后,并不立即发送确认应答(ACK),而是等待一段时间(通常为200ms),以期望在这段时间内可以捎带上之前接收到的其他数据包的确认信息一起发送。
操作原理:
- 等待延时时间:接收端在接收到数据包后,等待一个固定的延时时间,看是否有其他需要发送的确认应答。如果在延时时间内接收到另一个数据包,可以将确认应答捎带发送。
- 触发条件:一般情况下,当接收端发送数据包后,会等待一个较短的时间(如200ms)来判断是否应该发送确认应答,避免过长的延时导致发送端重传数据包。
7.捎带应答
捎带应答(piggybacking)是指在 TCP 协议中,当接收端向发送端发送确认应答(ACK)时,如果接收端正好要发送数据给发送端,就可以将数据放在确认应答中一起发送,达到“捎带”效果。这样可以减少网络中的数据包数量及传输延迟,提高网络传输的效率。
操作原理:
- 采用累积确认:接收端可以将自己要发送的数据留在确认应答中,一旦 ACK 数据包到达发送端,发送端就可根据 ACK 中的确认号确认数据的成功到达,并处理接收端发送的数据。
- 利用 ACK 数据包空间:确认应答(ACK)数据包中通常会携带有确认号,接收端可以利用 ACK 数据包的剩余控制位来放置自己要发送的数据。
捎带应答是 TCP 协议中一种优化的数据传输机制,通过将数据捎带在确认应答中一起传输,减少网络中的数据包数量和传输延迟,提高网络传输的效率和性能。
总结:
总的来说,TCP 是一种可靠、面向连接的传输层协议,通过提供可靠传输、连接管理,拥塞控制、流量控制、差错检测与重传等机制,确保数据在网络中的可靠传输和有效交互。
相关文章:

TCP协议的相关特性
目录 正文: 1.可靠性 2.连接管理 3.滑动窗口 4.流量控制 5.拥塞控制 6.延迟应答 7.捎带应答 总结: 正文: 1.可靠性 TCP协议是一个有连接,可靠传输,面向字节流,全双工的协议。其中可靠传输的实现…...
Lombok,一款超级强大的Java工具库
在软件开发过程中,繁琐的模板代码经常让开发者感到烦恼。 Lombok 是一款 Java 库,能够帮助开发者减少这些冗余代码,提高开发效率。本文将介绍 Lombok 的基本概念、安装和配置方法,以及如何在实际项目中使用它。 Lombok 是什么 L…...

FreeBSD下使用原生虚拟机管理器bhyve
hbyve简介 自 FreeBSD 10.0-RELEASE 起,BSD 许可的 bhyve 虚拟机管理器已成为底层系统不可或缺的一部分。bhyve 强大而灵活,支持多种客户机操作系统,涵盖 FreeBSD、OpenBSD 以及多个 Linux 发行版。在默认配置下,bhyve 提供对串行…...

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!
这段时间一直在搞文件上传相关的知识,正好把ctf的题目写了写,也算是给自字做个总结! 不过ctf有一个缺点就是所有的测试全部是黑盒测试,无法从代码层面和大家解释,我找个时间把upload-labs靶场做一做给大家讲讲白盒的代…...

【学习记录】服务器转发使用tensorboard
场景 代码在服务器上运行,想使用tensorboard查看训练的过程。 但是服务器上不能直接访问地址,所以要转发端口到本地,从而在本地网页中能够打开tensorboard。 参考:https://zhuanlan.zhihu.com/p/680596384 这时我们需要建立本地…...
类型转换之显式转换
显式转换——>手动处理,强制转换 括号强转 作用:一般情况下,将高精度的类型转换为低精度。 语法:变量类型 变量名 (变量类型)变量; 注意:精度问题,范围问题。 括号强转&#x…...
Mybatis多表查询,报错:Column ‘id‘ in field list is ambiguous
错误原因: Mybatis 多表查询时,多个表有相同名字的字段,比如 id,名字重复,没有指定对应的表名。 有两个地方需要注意:(1)将其中一个重复字段的 Mybatis的 column 修改为其他的名字。(2)字段加上对应的表名…...

PyCharm面板ctrl+鼠标滚轮放大缩小代码
1.【File】➡【Settings】 2.点击【Keymap】,在右边搜索框中搜incre,双击出现的【Increase Font Size】 3.在弹出的提示框中选择【Add Mouse Shortcut】 4.弹出下面的提示框后,键盘按住【ctrl】,并且上滑鼠标滚轮。然后点击【O…...

【Qt】数据库(一)SQLITE创建、增删查改
填坑1:如何连续插入 汇总SQlite语句 创建表格:create table <table_name> (f1 type1, f2 type2,…); 增:insert into <table_name> values (value1, value2,…); 改:update <table_name> set <f1value1>,…...
【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)
在本篇文章中,我们将详细解读力扣第165题“比较版本号”。通过学习本篇文章,读者将掌握如何使用多种方法来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解,以便于理解。 问题描述 …...

用PhpStudy在本地电脑搭建WordPress网站教程(2024版)
对新手来说,明白了建站3要素后,如果直接购买域名、空间去建站,因为不熟练,反复测试主题、框架、插件等费时费力,等网站建成可能要两三个月,白白损失这段时间的建站费用。那么新手怎么建测试网站来练手呢&am…...

高中数学:平面向量-题型总结及解题思路梳理
一、知识点及解题思路梳理 高中,2/3的向量题目是坐标向量题,1/3是几何向量题。但是,这1/3的几何向量题可以转换成坐标向量题。 二、练习 例题1 几何型向量题 例题2...
【玩转google云】Google Cloud Platform (GCP) (WAF)详解
目录 引言 一、什么是Web Application Firewall? 二、GCP WAF简介 三、GCP WAF的主要功能...

前端开发工程师——数据可视化
canvas canvas绘制线段 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…...
【代码随想录训练营】【Day 35】【贪心-2】| Leetcode 122, 55, 45
【代码随想录训练营】【Day 35】【贪心-2】| Leetcode 122, 55, 45 需强化知识点 贪心:跳跃游戏 题目 122. 买卖股票的最佳时机 II 动态规划贪心:只要股票第二天涨了,前一天就买,第二就买 class Solution:def maxProfit(sel…...

【深度学习】ultralytics, yolo seg,实例分割图绘制,核对yolo seg 的txt标记对不对
这段代码的作用是从指定路径读取图像和标签文件,然后在图像上绘制分割区域和相关点,并保存最终的图像。以下是每个函数的具体作用及其解释: read_labels(label_path): 读取指定路径的标签文件。标签文件的每一行表示一个物体的分割信息&#…...

如何保证员工在精益变革中始终保持积极的态度?
在当今日新月异的商业环境中,企业为了保持竞争力,需要不断寻求创新和变革。精益变革作为一种提升效率和质量的有效手段,已逐渐成为企业转型升级的关键。然而,变革往往伴随着挑战和不确定性,如何保证员工在精益变革中始…...

【Java面试】三、Redis篇(下)
文章目录 1、抢券场景2、Redis分布式锁3、Redisson实现分布式锁4、Redisson实现的分布式锁是可重入锁5、Redisson实现分布式锁下的主从一致性6、面试 1、抢券场景 正常思路: 代码实现: 比如优惠券数量为1。正常情况下:用户A的请求过来&a…...

GpuMall智算云:QwenLM/Qwen1.5/Qwen1.5-7B-Chat
Qwen 是阿里巴巴集团 Qwen 团队的大型语言模型和大型多模态模型系列,现在大型语言模型已经升级到 Qwen1.5 版本。 GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 无论是语言模型还是多模态模型,都在大规模的多语言和多模…...
CentOS6.5 下编译 FreeSWITCH 1.2.23 版本
命题作文,慢慢来,一边做,一边记录。 老古董了,查资料很不容易,但朋友说不着急,这很好。 生命的意义在于折腾,不是吗? 先下载 CentOS6.5, 查了下资料,最后…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...