【计算机网络】TCP 如何实现可靠传输

news2024/11/16 11:43:06

TCP通过三次握手建立连接,四次挥手释放连接,确保连接建立和连接释放的可靠。

序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制 标准回答 可靠传输就是通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的。TCP是通过序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制一起保证TCP传输的可靠性的。 加分回答 可靠传输的具体实现是:

- 应用层的数据会被分割成TCP认为最适合发送的数据块。

- 序列号:TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。

- 检验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。

- 确认应答:如果收到的数据报报文段的检验和没有差错,就确认收到,如果有差错,TCP就丢弃这个报文段和不确认收到此报文段。

- 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。

- 拥塞控制:当网络拥塞时,减少数据的发送。

- 停止等待协议:它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。

- 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

目录

1. 三次握手和四次挥手

2. 流量控制

3. 拥塞控制

4. 序列号

5. 超时重传

6. 停止等待协议


1. 三次握手和四次挥手

TCP通过三次握手建立连接,四次挥手释放连接,确保连接建立和连接释放的可靠。

【三次握手详细过程】

能否使用两次握手建立连接呢?

不行。如果TCP客户发起的请求滞留到达,此时TCP服务器会进入连接已建立状态,而TCP客户端仍为关闭状态,会导致TCP服务器的资源浪费。

【四次挥手详细过程】


2. 流量控制

流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。(发送过快接收方来不及接受,可能导致数据丢失)
使用滑动窗口机制实现。

【以字节为单位的滑动窗口】

【问题】对于主机B发送的消息丢失,主机A迟迟收不到主机B的消息,双方会陷入死锁局面。

解决:设置持续计时器,超过则主机A发送0窗口探测报文(带有1字节),即使主机B的接收窗口为0规定也要接收0窗口探测报文。

【问题】0窗口探测报文(带有1字节)丢失怎么办?

解决:对于0窗口探测报文(带有1字节)也设置超时计时器,超时则重传。


3. 拥塞控制

拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。

四种拥塞控制算法 :

  1. 慢开始
  2. 拥塞避免 
  3. 快重传
  4. 快恢复

【慢开始+拥塞避免】

当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法,改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

【快重传+快恢复】

解决个别丢失但未拥塞,发生的超时重传而导致调用拥塞避免算法

快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。

  • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传

快恢复:ssthresh=cwnd/2,cwnd=ssthresh

【慢开始结合拥塞避免】示例

【慢开始】:指数增长

【拥塞避免 】:当cwnd=ssthresh时,每次加1

【慢开始】:当发送超时重传,将ssthresh=cwnd/2,cwnd=1

【快重传+快恢复】示例


4. 序列号

序列号:TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。


5. 超时重传

问题:A给B发送数据,A 如何知道 B 是否正确收到了 M1 呢?
解决方法:超时重传

  • A 为每一个已发送的分组设置一个超时计时器。
  • A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。
  • 若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。


6. 停止等待协议

它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。

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

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

相关文章

【C++ map和set】

文章目录 map和set序列式容器和关联式容器键值对setset的主要操作 mapmap主要操作 multiset和multimap map和set 序列式容器和关联式容器 之前我们接触的vector,list,deque等&#xff0c;这些容器统称为序列式容器&#xff0c;其底层为线性序列的的数据结构&#xff0c;里面存…

Mac专用投屏工具AirServer 7.27 for Mac中文版2024最新图文教程

Mac专用投屏工具AirServer 7.27 for Mac中文版是一款适用于Mac的投屏工具&#xff0c;可以将Mac屏幕快速投影到其他设备上&#xff0c;如电视、投影仪、平板等。 Mac专用投屏工具AirServer 7.27 for Mac中文版具有优秀的兼容性&#xff0c;可以与各种设备配合使用。无论是iPhon…

[方案实操]中国电子副总陆志鹏:《数据资产化路径的思考与探索》演讲实录和解析

中国数字经济发展和治理学术年会&#xff08;2023&#xff09;上&#xff0c;中国电子党组成员、副总经理&#xff0c;50人论坛委员陆志鹏先生《数据资产化路径的思考与探索》为题进行了主旨演讲&#xff0c;提出“如果简单把资源进行评估定价&#xff0c;价值非常有限&#xf…

STM32标准库开发—实时时钟(BKP+RTC)

BKP配置结构 注意事项 BKP基本操作 时钟初始化 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);PWR_BackupAccessCmd(ENABLE);//设置PWR_CR的DBP&#xff0c;使能对PWR以及BKP的访问读写寄存器操作 uint16_t ArrayW…

springboot基于web的网上摄影工作室的开发与实现论文

网上摄影工作室 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了网上摄影工作室的开发全过程。通过分析网上摄影工作室管理的不足&#xff0c;创建了一个计算机管理网上摄影工作室的方案。文章介绍了网上摄影工…

详细介绍如何用windows自带Hyper-V安装虚拟机(windows11和ubuntu22)

通过系统自带的hyper-v安装windows11&#xff0c;舒服又惬意&#xff0c;相比用第三方虚拟机软件速度快很多。 硬件准备 准备 系统需要符合能安装 Hyper-V 的最低要求windows版本含Hyper-V的功能 电脑空间 电脑要有足够的空间来安装你这个虚拟机。根据自己的磁盘容量情况来规…

鸿蒙系统的开发与学习:一、安装工具与处理报错

前言&#xff1a; 鸿蒙系统的学习与记录。 1 、使用开发工具&#xff1a;deveco-studio 1&#xff09;这个是工具的安装 2&#xff09;这个是工具包&#xff0c;里面包含了 obpm&#xff0c;如果你装不上这个&#xff0c;可以使用工具包内部的 2、安装 官方安装教程&#xff…

泰迪智能科技企业数据挖掘平台使用场景

企业数据挖掘平台助力企业数据挖掘&#xff0c;数据挖掘平台也在多个领域发挥着重要的作用。 企业数据挖掘平台具有数据抓取、数据清洗、数据分析、机器学习等多项功能&#xff0c;广泛应用于企业的各个领域&#xff0c;包括&#xff1a;金融行业、医疗行业、交通领域、教育、制…

[BUUCTF]-PWN:oneshot_tjctf_2016解析(字符串输入,onegadget)

查看保护 查看ida 这道题的大致思路就是泄露libc地址&#xff0c;然后用onegadget来getshell 但是要注意&#xff0c;这里要我们输入的数据类型是long int&#xff0c;所以不能用我们常用的p64函数了。 完整exp&#xff1a; from pwn import* from LibcSearcher import* con…

Python的循环结构练习

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 生命对某些人来说是美丽的&#xff0c…

任职资格经典案例:企业任职资格体系搭建项目纪实

传统的任职资格体系主要考虑年限、经验、资历等因素&#xff0c;部分企业在任职资格体系中也引入了能力指标&#xff0c;但是&#xff0c;实际管理过程中仍然存在很多问题&#xff1a;员工“熬年头”意识严重、工作积极性差、优秀人员因得不到晋升而流失、各方面能力都不错的人…

深入理解Lambda表达式:基础概念与实战演练【第114篇—python:Lambda表达式】

深入理解Lambda表达式&#xff1a;基础概念与实战演练 在现代编程语言中&#xff0c;Lambda表达式作为一种轻量级的匿名函数形式&#xff0c;越来越受到程序员的青睐。特别是在函数式编程兴起的今天&#xff0c;Lambda表达式在简化代码、提高可读性方面发挥着重要作用。本文将…

《AI纪元:幻域探险》

游戏项目名称&#xff1a;《AI纪元&#xff1a;幻域探险》 游戏类型&#xff1a;AI驱动的角色扮演探险游戏&#xff08;RPG&#xff09; 背景设定&#xff1a; 《AI纪元&#xff1a;幻域探险》设定在一个名为“幻域”的广阔虚拟世界。这个世界由高度发达的AI技术支持&#xff0…

windows环境下部署k8s

1、安装docker Desktop; 2、打开setting勾选启用k8s&#xff08;参考了许多帖子&#xff0c;说需要预先下载镜像&#xff0c;直接勾选会被墙&#xff0c;应该是跟版本有关&#xff0c;目前使用的版本没有出现这类问题&#xff0c;只是确实会稍慢&#xff0c;如果需要加快可以先…

c++/c图的邻近矩阵表示

#include<iostream> using namespace std;#define MaxVerterNum 100 typedef char VerterType; typedef int EdgeType; typedef struct {VerterType vexs[MaxVerterNum]; // 存储顶点EdgeType edges[MaxVerterNum][MaxVerterNum]; // 存储邻接矩阵int n, e; // 顶点数和边…

【洛谷 P9240】[蓝桥杯 2023 省 B] 冶炼金属 题解(二分答案)

[蓝桥杯 2023 省 B] 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V&#xff0c; V V V 是一个正整数&#xff0c;这意味着消耗 V V V 个普通金属 O 恰好可以冶炼出一个特殊金属 X&#xff0c;当普…

linux系统Jenkins工具添加自由项目和maven项目

Jenkins添加自由项目 添加自由项目操作流程代码远程代码邮件标题邮件正文 添加maven项目准备环境操作流程 添加自由项目 gitlab配置基本代码页面等&#xff0c;拉取代码&#xff0c;打包&#xff0c;发布操作流程 代码 远程代码 echo ssh root192.168.188.177 "tar cz…

MJ V7 在 V6 Beta 发布后即将推出,即将到来的人工智能 API 访问!

让我们深入了解 MidJourney 的新功能 在发布官方 Beta 之前总结 V6 Alpha 随着 MidJourney V6 Alpha 上周成为默认版本&#xff0c;该团队现在正在努力在过渡到官方 Beta 版本之前进行进一步的改进&#xff1a; 一组 3 个视觉一致性功能 1 — 升级的“风格参考”功能 这将是…

【python】Python航空公司客户价值数据分析(代码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【ArcPy】简化ArcGISPro默认Python环境体量

参考文献 安装 ArcPy—ArcGIS Pro | 文档