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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 《图解TCPIP》随笔--第六章(三)--tcp协议 -> 正文阅读

[网络协议]《图解TCPIP》随笔--第六章(三)--tcp协议

前言

特别写在前面

本文仅用学习记录及分享,不做他用.

如有不妥,请告知

一. 特点&目的

充分的实现了数据传输时的各种控制功能

  • 可以在丢包时进行重发控制
  • 可调节次序乱掉的数据包进行顺序控制
  • 可以控制通信中流量,防止浪费

二. 实现可靠性的手段

  • 校验和
  • 序列号
  • 确认应答
  • 重发控制
  • 连接管理
  • 窗口控制

1. 序列号(Seq) + 确认应答(ACK)

  • 序列号 - Seq – (序号)
    • 字长32位
    • 指发送数据的位置
    • 每发送一次数据,累加一次该字节数据

注意

建立连接断开连接 发送的 SYNFIN 数据包

虽不携带数据,但也会使 该字节+1

  • 确认应答号 - ACK
    • 字段长32位
    • 指下一次应该收到的数据的序列号
    • 发送端收到的确认应答号,表示此序列号之前的所有数据已正常接收
( 开始握手第一包 ACK == 0 , Seq == 0 )–Client
( 开始握手第二包 ACK == 1 , Seq == 0 )–Serve
> 一旦 - 回应上一包数据 - 确认接收后
> 下一包数据的 Seq = 当前ACK
> 下一包数据的 ACK + 1

两种异常情况

  • 数据包丢失
    • 当数据包丢失后,一段时间后 发送端 未收 接收端 返回的 ACK ,发送方 认为数据没有到, 重发控制 触发
  • 确认应答丢失
    • 发送端 没有收到 接受端 ACK 可能 仅仅 ACK丢失,数据正常传输
    • 一段时间后 重发
    • 这时,需要 序列号(Seq) + 确认应答(ACK) 判断是否需要丢掉重复数据

2. 连接管理

  • 请求连接 - SYN
  • 断开连接 - FIN

TCP 通信

三次"握手" , 四次"挥手"

正常通信过程 至少 来回 7个数据包 才能完成

3. 以段为单位发数据

MSS - 最大消息长度

最理想的情况

MSS 正好等于 IP 中不会被分片处理的最大长度

在开始通信时,双端都会产生一个MSS,会选择一个较小的值投入使用

4. 重发超时

重发超时 – 重发数据之前的等待时间

在每次数据往返时都要进行往返时间偏差 的计算

一般超时都以 0.5秒 为单位进行控制,所以重发超时都是 0.5s 的整数倍

最初的数据包还不知道往返时间,故其往返时间设置为 6s左右

如若 重发超时 后再次 发送 后,超时会以 2 , 4 倍指函数 增长

重发一定次数后 通信终止

重发超时 会随着发送的数据量 动态调整

5. 窗口控制 – 提速

以一段数据为单位发送,每段数据应答

  • 时间长
  • 性能低

滑动窗口 + 缓存区

滑动窗口

窗口大小 – 无需等待确认应答,但可以继续发送数据的 最大值 ( 图中窗口大小为四段 )

该机制的实现使用了大量 缓存区 ,对多端数据 同时 进行 确认应答

6. 窗口控制 + 重发控制

应答未返回时

  • 运用了窗口控制后 无需再次发送

应答未返回

报文丢失时

  • 发送主机如果 重复收到3次 同一个应答信号
  • 表示该部分数据丢失,重发

这种模式被称为 高速重发控制

在这里插入图片描述

7. 流控制

机制
接收端 发送窗口大小值给 发送端
发送端 根据 接收端 自身实际接收能力去 控制 发送的数据量

流控制

如上图
1. 主机B 从 3001号后的缓存区即满 -- 停止接收数据
2. 主机A 重发超时 了,也没有收到应答信号
3. 主机A 发送 窗口探测 ...  ... ...( 随时发一包 探测此时窗口大小 )
4. 直到 主机B 窗口更新 通知给 主机A , 通信再次开始

8. 拥塞控制

防止网络过度 拥堵 而崩溃

通信一开始 通过 慢启动算法 得出 慢启动阀值 ,对 发送端 进行控制

以免造成连续发包 – (爆发) 造成的网络拥堵

三. 提高网络利用率的规范

1. Nagle 算法

只有 同时 满足下列两个条件 ,才能进行 数据传输

  • 已发的数据都被接收
  • 可以发送最大段长度MSS的数据

虽然可以提高网络的利用率

但是会造成网络延时

窗口系统机械控制等领域 使用 tcp 时,会 关闭该算法

2. 延迟确认应答 - 较优处理机制

能够提高网络利用率

降低计算机处理负荷

实现机制

  • 在没有收到 2xMSS 的数据为止 ,不做确认应答 - ACK
    - 一些操作系统会规定
    - 无论数据大小 , 两个包即刻应答
  • 其他情况下 , 最大延迟 0.5s 回复确认信号
    - 很多操作系统设置为 0.2s 左右

3. 捎带应答

前提开启 延迟确认应答 才能实现

减少收发数据量

捎带应答

四. 首部格式

1. TCP数据包格式

tcp首部

名词长度解释
源端口号 - Source Port16bit发送端端口
目标端口号 - Destination Port16bit接收端端口
序列号 - Seq ( 计算机随机数 )32bit发送数据的位置 , 没成功发送一次 累计+1
确认应答号 - ACK32bit下次应收到的数据的系列号
数据偏移 - Data Offset32bit表示数据部分应该从哪里算起
==5 ,表示从源端口号到 4x5=20 个字节后都为数据部分
保留 - Reserved32bit用于后期扩展 , 一般为0
控制位 - Control Flag8bit见下文控制位表格
窗口大小 - Windows Size16bit表示从 确认应答信号 开始的位置算起 ,能够接收的 数据大小 ( 8bit )
==0 表示可以发送窗口探测
能够接收的 数据大小 必须 1Byte
校验和 - Checksum-见后文
紧急指针 - Urgent Pointer16bit控制位 - URG == 1 有效
紧急数据 - 从 数据首位紧急指针 为止
同时也用作数据流分段标志
选项 - Optionsmax == 40byte用于提高传输性能
长度和数据偏移有关

2. 控制位

控制位

第几位名称用途
No.8CWRCWR + ECE 用于 IP的 ECN 字段
==1 通知 对方 拥塞窗口 已缩小
No.9ECEIP的 ECN == 1 时
ECE == 1 告知对方网络拥堵
No.10URG==1 包中有 紧急处理 的数据
No.11ACK==1 确认应答字段有效
No.12PSH==1 数据立刻上传应用层
==0 缓存
No.13RST==1 出现异常,强制断开
No.14SYN==1 希望建立连接
并在 序列号字段 进行 序列号 初始值设定
No.15FIN==1 希望断开连接,之后不会再发送数据

3. 校验和

为了提供 可靠的 TCP 首部数据

TCP首部校验和计算三部分:TCP首部 + TCP数据 + TCP伪首部

TCP伪首部

tcp伪首部

参考

(1条消息) IP首部校验和计算及1的补码_cradmin的专栏-CSDN博客

(1条消息) tcp/udp校验和以及伪首部介绍_nice_wen的博客-CSDN博客_tcp 伪首部

TCP头校验和计算算法详解 - RodYang - 博客园 (cnblogs.com)

结束

~ ~ ~

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2021-11-22 12:42:59  更:2021-11-22 12:45:33 
 
开发: 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/3 21:38:51-

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