目录

  • 前言
  • 一. 特点&目的
  • 二. 实现可靠性的手段
    • 1. 序列号(`Seq`) + 确认应答(`ACK`)
    • 2. 连接管理
    • 3. 以段为单位发数据
    • 4. 重发超时
    • 5. 窗口控制 -- 提速
    • 6. 窗口控制 + 重发控制
    • 7. 流控制
    • 8. 拥塞控制
  • 三. 提高网络利用率的规范
    • 1. Nagle 算法
    • 2. 延迟确认应答 - 较优处理机制
    • 3. 捎带应答
  • 四. 首部格式
    • 1. TCP数据包格式
    • 2. 控制位
    • 3. 校验和
  • 结束

前言

特别写在前面

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

如有不妥,请告知

一. 特点&目的

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

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

二. 实现可靠性的手段

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

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数据包格式

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

2. 控制位

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

3. 校验和

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

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

TCP伪首部

参考

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

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

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

结束

~ ~ ~

《图解TCPIP》<6.3>tcp协议相关推荐

  1. 《TCP IP网络编程》阅读笔记及部分《图解 TCPIP》《图解 HTTP》补充笔记

    第一章:理解网络编程和套接字 接受连接请求的套接字(接电话) 服务器端创建的套接字又称为服务器端套接字或监听套接字. socket 套接字编程. 为了与远程计算机进行数据传输,需要连接到因特网,而编程 ...

  2. TCP协议三次握手过程分析【图解,简单清晰】

    转自:http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是 ...

  3. 图解 | 为什么HTTP3.0要弃用TCP协议,而改用UDP协议?

    点击上方蓝色小字,关注"涛哥聊Python" 重磅干货,第一时间送达 来源:后端技术指南针 作者:指南针氪金入口 1. 大白和小黑 生活不止眼前的苟且,还有诗和远方的田野. 新的一 ...

  4. 图解TCPIP 笔记

    图解TCPIP-基础知识(前三章干货少 重点在后边) 表示层:将计算机特定的数据格式转换为网络标准数据格式,标记格式编码 会话层:用于选择建立哪种连接方式,会在数据前端增加首部或标签信息 传输层:会话 ...

  5. 2020-12-28 TCP协议

    Go to my github 返回主页Edison Zhou坚持学习,善于总结,乐于分享- <图解TCP/IP>读书笔记 一.国际惯例:书托 TCP/IP 这是一本图文并茂的网络管理技术 ...

  6. 面试:TCP协议经典十五连问!

    以下文章来源方志朋的博客,回复"666"获面试宝典 前言 TCP协议是大厂面试必问的知识点.整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀 1.  讲下TCP ...

  7. TCP协议三次握手过程分析

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  8. 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?

    [转]使用TCP协议连续传输大量数据时,是否会丢包,应如何避免? Posted on 2008-06-11 15:24 路缘 阅读(3868) 评论(0) 编辑 收藏  http://www.cnbl ...

  9. 4-5:TCP协议之连接管理机制(三次握手、四次挥手详解)

    文章目录 一:TCP三次握手过程和状态变迁 (1)三次握手过程和状态变迁过程详解 (2)为什么必须要三次握手? A:只有三次握手才可以阻止重复历史连接的初始化(主要原因) B:同步双方初始序列号 C: ...

  10. tcp协议的主要功能是什么_计算机网络 | 一文搞懂什么是TCP/IP协议

    什么是TCP/IP协议? 计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件, ...

最新文章

  1. php判断表单修改内容,JavaScript判断用户是否对表单进行了修改的方法_javascript技巧...
  2. mybatis源码阅读(二):mybatis初始化上
  3. python我的世界给予物品指令_我的世界指令给予物品 我的世界指令给予物品是多少...
  4. Python爬虫时中文乱码的处理
  5. mysql小问题集锦
  6. url 收录工具_为什么我的网站不收录??
  7. 【linux】安装python依赖库confluent_kafka
  8. 信息安全系统设计基础实验四:外设驱动程序设计
  9. AlphaGo Zero 强化学习算法原理深度分析
  10. Python_day01-----day07
  11. 【分子动力学模拟】centos7使用gmx_MMPBSA时使用gmx_MMPBSA_ana时无法调用pyqt5
  12. 403 forbidden 错误解决方案
  13. verilog的时钟分频与时钟使能
  14. 什么是keep-alive?怎么去使用?简述keep-alive
  15. vivox70pro怎么拍出好看的月亮
  16. 【小甲鱼编程题05】打印杨辉三角形
  17. 10公斤快递怎么用计算机,10公斤快递
  18. onnx-modifier使用
  19. IO模型_阻塞_非阻塞_多路复用
  20. 剑指offter 动态规划

热门文章

  1. poi导出Excel之模板导出
  2. 西门子S7-1200PLC脉冲控制伺服程序
  3. 关于红楼梦Python文本分析
  4. 韩顺平Java学习 泛型
  5. 浅谈jquery源码解析
  6. 25款优秀的WordPress必备插件推荐
  7. android 微信 备份通讯录,微信备份手机通讯录在哪?怎么用微信备份手机通讯录?...
  8. 简单专注,OV最值得小米学习的地方
  9. Linux-Postfix+Dovecot+Postfixadmin+Roundcubemail 搭建邮件服务器管理系统(一)
  10. Python基础语法(自用)