IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 《计算机网络笔记》——TCP -> 正文阅读

[网络协议]《计算机网络笔记》——TCP

参考资料:刘超老师的《趣谈网络协议》、王道考研《计算机网络》

TCP的特点

  • 面向连接:三次握手、四次挥手
  • 有序可靠:累次确认、丢失重传、超时重传
  • 点到点:运输层解决不同主机进程通信问题,但实际上TCP连接的是进程的端口
  • 窗口和RTT动态变化
  • 全双工通信:TCP连接的每一端都有两个窗口:发送窗口与接收窗口
  • 面向字节流

面向字节流

image-20211029125406111

应用层将信息变成二进制流,再发给传输层。传输层再将二进制流变成数据报发送出去。

因为是面向字节流,因此TCP的传输机制是根据字节的序号进行的,而不是报文段。

TCP会根据对方的窗口大小以及信道拥塞程度,来决定发送多大字节的报文段。

TCP报文段

首部

  • 端口
  • 序号
  • 确认号
  • 数据偏移、保留、标识、窗口
  • 校验、紧急

32bits * 5 = 20 字节,固定首部为20字节 。还有4字节是选项和填充字段,用来保持TCP首部长度。因此共24字节。

image-20211029130232123

image-20211029130251459

序号字段

序号就是报文段的序号。报文被分隔成很多的报文段,每一段的报文段的序号就是该段第一个字节的序号。注意是以字节为单位。

image-20211125070234460

确认号字段

就是我想要从对方得到的报文段的序号,主要用于告诉对方下一次应该发什么给自己。

image-20211125070244914

注意因为是用‘C’传递,所以Seq才会递增1的,具体的Seq号还得看数据的大小

状态标识字段

SYN 与 FIN

用于连接过程。SYN置为1表示请求建立连接,FIN置为1表示请求断开连接

数据缓存

image-20211125070305042

发送方缓存

  • 准备发送的数据
  • 已发送未确认的数据

接收方缓存

  • 按序到达,还没上交给应用层的数据
  • 不按序到达的数据

TCP的功能

  • 连接
  • 可靠传输
  • 流量控制
  • 拥塞控制

连接过程

三次握手

  • 客户发送一个SYN报文段,表示我想请求与你连接
  • 服务器会从该数据报中提取出TCP SYN 报文段,为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的报文段,表示我同意与你连接,这个报文段称作SYNACK报文段
  • 客户接收到SYNACK报文段后,也会为TCP连接分配TCP缓存和变量,同时再发送一个报文段给服务器,告诉它我收到了你同意与我连接的信息了。

初始序号ISN

image-20211029131913583

为什么不能两次握手

image-20211029131951253

四次挥手

image-20211125070355164

MSL

报文在网络中存在的最长时间,超过这个时间报文就要被抛弃。

为什么要等待2MSL?

  • 保证最后一个ACK报文到达
  • 防止“已失效的连接请求报文段”出现在本连接中

可靠传输

对于失序的报文段,没有明确的处理办法,具体看编程人员怎么处理。

累次确认

image-20211125070416458

丢失重传

image-20211125070421926

超时重传

image-20211029132333813

ACK发送时机

image-20211029132415045

快速重传

当连续接到3个重复的ACK(注意是不包括原数据的那个ACK),发送方马上重传。

image-20211029132438973

选择确认 SACK

在双方赞同的情况下,可以使用SR协议。

如果使用选择确认,那么原来首部中的“确认号字段”的用法仍然不变。只是以后在 TCP 报文段的首部中都增加了 SACK 选项,以便报告收到的不连续的字节块的边界。

往返时间的估计与超时

往返时间的估计

上一次估计值与本轮观测值的加权和

image-20211029132650607

时间间隔设定多久为超时?

往返时间+安全边界值

image-20211029132709372

img

karn算法

image-20211029132802347

image-20211029132806246

流量控制

通过接收方告诉发送方自己的窗口大小,让发送端设计合适的窗口大小来发送分组,保证速度匹配。

变量解释

  • rwnd:接收窗口,接收方设置,并发送给发送方让其进行维护
  • RcvBuffer:接收缓存,由接收方来维护
  • LastByteRead:主机B上的应用进程从缓存读出的数据流的最后一个字节的编号,即缓存中第一个数据字节编号-1
  • LastByteRcvd:从网络中到达的并且已放入主机B接收缓存中的数据流的最后一个字节的编号,即缓存中最后一个数据的字节编号

设置接收窗口

//接收窗口计算公式
spare room in buffer

= RcvWindow

= RcvBuffer-[LastByteRcvd - LastByteRead]

image-20211029133015729

image-20211029133119116

发送方维护一个接收窗口(变量),接收窗口用来告诉发送方接收方还有多少可用的缓存空间;当发送方知道接收方缓存空间用完时,即接收窗口为0,发送方就不发了。现在问题就来了,接收方会逐渐清理缓存,但发送方并不知道接收方什么时候清理,那样就会出现死锁状态

通过持续计时器打破死锁

发送方的接收窗口为0时,会启动持续计时器,计时器结束就会发送一个窗口探测报文段,接收方确认这个探测报文段时,就返回了它现在缓存空间的大小,如果还是0,那么重复执行这个操作,直到不为0时,发送方就可以发送报文段了.

优化

只靠持续计时器,效率太低了,因此又加了两种方式来提高效率:

  • 第一种机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。
  • 第二种机制是由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送(push)操作

拥塞控制

当出现以下两种情况时,一般认为发送了拥塞:

  • 超时
  • 连续接收三个重复的ACK

拥塞窗口

拥塞窗口指发送端在一个RTT内可以最多发送的数据包数

image-20211029134113621

发送窗口

image-20211029134133659

拥塞控制算法

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

慢开始算法

image-20211029134353055

QQ截图20211125070637

拥塞避免算法

image-20211029134401638

慢开始与拥塞避免的搭配使用

image-20211029134406649

image-20211029134410303

image-20211029134413206

快重传算法

发送方:

  • 只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段
  • 每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。

接收方:

  • 每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。

快恢复算法

image-20211029134248174

快重传与快恢复算法的搭配使用

image-20211029134243558

注意一点,计算机网络中,慢开始+拥塞避免是必须存在的,而快开始和快恢复是为了提高效率,有则更好。

BBR 拥塞算法

拥塞控制的两个不合理点:

  • 拥塞判断不够合理,公网上带宽不满也会丢包,并不一定是拥塞。
  • 填满才认为会发生丢包,太晚了。这样有可能会把缓存也填满。

image-20211029135838179

TCP状态机

image-20211028164306688

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:28:41  更:2021-11-25 08:29:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/5 12:43:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码