这个讲的相对简单一点:

TCP 协议如何保证可靠传输 - 云+社区 - 腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1679937这个讲的更详细:
TCP 协议如何保证可靠传输 - 云+社区 - 腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1679937

总结一下:

滑动窗口:

  • 为什么要用滑动窗口?发送端希望在收到确认前,继续发送其它报文段,提高信道的利用率;发出去后可能要重传,窗口可以作为缓冲区维护这些报文。
  • 接收窗口大小:取决于应用(比如说tomcat:8080端口的监听进程)、系统、硬件的限制。
  • 发送窗口大小:swnd <= min(rwnd,cwnd),rwnd是接收窗口,cwnd用于拥塞控制。

累计确认:

  • 什么是累计确认?发送方收到某号确认帧(ack),就认定前面的帧全部接收到,发送窗口移动到确认帧(ack)的位置。

比如发送方发了包1,包2,包3,包1含字节1到10,包2含字节11到20,包3含字节21到30。接受方成功收到包1,包3。那么接受方发回一个包含确认序号11的包,发送方就知道包1成功收到,必要时重发从字节11开始,此时包3存在被重复接收的可能

  • 什么时候重传?每个报文都有超时计数器,超时重传,超时重传时间的选择也是一个策略。
  • tcp缓存和窗口的关系:窗口是缓存的一部分。
  • 发送缓存=发送窗口+ 窗口右端的一部分
  • 接收缓存=接收窗口+部分已确认但主机还没处理完的数据

流量控制:

简单来说就是接收方处理不过来的时候,就把窗口缩小,并把窗口值告诉发送端。

当窗口值为0,而接受方把窗口值恢复(比如ACK=1,ack=601,rwnd=200),但确认丢失,进入相互等待的死锁局面。所以如果窗口值为0,发送端就会开启一个持续计数器,每个一段时间询问一下接收方。

拥塞控制:

swnd<=min(rwnd,cwnd),cwnd就是拥塞窗口大小,SSthresh:处理拥塞时的一个阈值。

控制步骤:

1)当cwnd < SSthresh,cwnd从1开始以指数增长;

2)当cwnd > SSthresh,cwnd以线性增长;

3)当cwnd增长到出现网络拥堵,SSthresh变为当前cwnd的一半;

4)慢恢复:cwnd变为1,重新从1)开始;

5)快恢复:是对慢恢复算法是改进,cwnd不是从1重新开始指数增长,而是从新的SSthresh开始线性增长。

快重传:收到3个同样的确认就立刻重传,不等到超时;接收方收到同样的确认信号,表示接收方可能未按序收到数据,确认帧必须是按序收到数据的最大序号。

TCP标志位:

深度好文:TCP三次握手和四次挥手深入实践https://baijiahao.baidu.com/s?id=1708621911214426696&wfr=spider&for=pc

以三次握手为例:

ACK:表示前面的确认号字段是否有效。ACK=1时表示有效。只有当 ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为 1。

确认号ack:理解起来就一句话,所期望收到的下一个顺序号seq。

顺序号seq:用来标识从TCP源端向TCP目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。

ack是本机发出的确认号,确认源发出的seq,seq是本机发出的数据序列号。

流量控制时的报文标志位:

TCP 协议如何保证可靠传输相关推荐

  1. 计算机网络 TCP协议如何保证可靠传输

    目录 TCP如何保证可靠传输 TCP以段为单位发送数据 重传机制 超时重传 重发超时如何确定 快速重传 SACK 的引入是为了解决什么问题? D-SACK 又是什么东西? ARQ协议 停止等待ARQ协 ...

  2. TCP 协议如何保证可靠传输?

    应用数据被分割成 TCP 认为最适合发送的数据块. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层. 校验和: TCP 将保持它首部和数据的检验和.这是一个端到端的检 ...

  3. TCP、UDP、TCP三次握手与四次挥手、TCP如何保证可靠传输、TCP异常分析、拆包和粘包等

    4.OSI模型 4.1.OSI七层模型 4.2.七层模型功能 ​ 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,如网线:网卡标准. ​ 数据链路层:接收来自物理层的位流形式的数据 ...

  4. 【亡羊补牢】计算机网络灵魂之问 第10期 tcp是怎么去保证可靠传输的?

    这是博主面向腾讯学习的面试题大整理系列,可以在如下github仓库Issues中通过 Labels 标签分类查看相关内容,同时欢迎大家指正可能的错误并且提出自己的解答,希望大家学的鱼块,春秋招顺利! ...

  5. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  6. TCP协议-如何保证传输可靠性

    TCP协议传输的特点主要就是面向字节流.传输可靠.面向连接.这篇博客,我们就重点讨论一下TCP协议如何确保传输的可靠性的. 确保传输可靠性的方式 TCP协议保证数据传输可靠性的方式主要有: 校验和 序 ...

  7. 【Sofice小司笔记】5 计算机网络,包含数据传输原理、网络各层协议详细说明、TCP/IP协议栈各常用协议说明、TCP握手挥手、可靠传输、网络加密技术

    ❓ 在浏览器地址栏输入一个 URL 后回车,背后发生了什么 解析 URL 浏览器封装 HTTP 请求报文 DNS 域名解析获取 IP 地址 建立 TCP 连接(长链接) 浏览器发送请求 负责传输的 I ...

  8. TCP协议可靠性保证(确认应答机制,超时重传机制,流量控制,拥塞窗口)

    上一次我们知道了TCP协议通过连接管理机制保证可靠性,今天我们继续来看一看TCP协议中其他几种保证可靠性的方法. · 确认应答机制  · 超时重传机制  · 流量控制  · 拥塞窗口 确认应答机制  ...

  9. 网络编程应用:基于TCP协议【实现对象传输】--练习

    要求: 基于TCP协议实现,客服端向服务器发送一个对象 服务器接受并显示用户信息 ,同时返回给客户端 "数据已收到"建一个Student类,属性:name age Student类 ...

最新文章

  1. 不用额外变量交换两个整数的值
  2. android gps定位工具类,工具类之LocationUtils(定位工具类)
  3. python储存_python数据储存
  4. 从wait_type入手模拟SQL Server Lock
  5. opencv jpg作为png背景_基于OpenCV与tensorflow实现实时手势识别
  6. spring教程笔记6
  7. PIFA 天线的推论及计算方法
  8. 机器学习-百度笔试题
  9. python vim插件_有哪些好用到爆的vim插件?
  10. 机器人手眼标定Ax=xB(eye to hand和eye in hand)及平面九点法标定
  11. qq传输文件腾讯服务器保存在哪里,电脑接收的QQ文件在哪里?在哪个文件夹可以找到QQ接收的文件...
  12. HTML静态网页作业——基于html+css+javascript+jquery+bootstarp响应式成都家乡介绍网页
  13. 如何确定scrum的story之一:识别利益相关者和目标
  14. 和利时scada系统服务器参数,设备数据采集之SCADA系统
  15. x64 可变参数原理完全解析
  16. 关于在动力气象学中遇到了几种坐标系
  17. 资金流向┃权证行情┃股票黑马┃股票IIQ┃股票分析┃股票市场分析/股票
  18. “技能成就梦想 创新促进发展”2016年成德绵创新改革试验区第二届高技能人才交
  19. 面试官:这么简单的正则表达式都不会?
  20. 八年Android开发,看我如何简化Android的UI开发!

热门文章

  1. project server 2016的应用
  2. driver failed programming external connectivity on endpoint
  3. 破解行Android apk 逆向工程研究﹣破解 MyTV HD 機種限制手記
  4. DRGs-PPS、单病种付费与临床路径三者间关系探析
  5. 计算机歌曲谱 上海滩,【计算机·美文】有没有那么一首歌,触动了你的香港电影情怀?...
  6. 谷歌地图模型自动下载
  7. 极智Paper | YOLOS 通过目标检测重新思考Vision Transformer
  8. 35选7彩票销售java程序_跪求下面的题目答案
  9. 系统集成项目管理工程师案例分析考点汇总(整体管理)
  10. 关于的FPV救援机器人的演讲。