以太网TCP协议(十二)

news2024/10/7 10:16:22

目录

一、概述

二、功能

2.1 连接管理

2.2 响应与序列号

2.3 超时重发

2.4 传输单位:段

2.5 窗口控制

2.6 流控制

2.7 拥塞控制

2.8 效率提高

三、报文格式


一、概述

        TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

二、功能

2.1 连接管理

        TCP是面向连接的通信,其连接建立与连接断开分别被称为三次握手、四次挥手机制。

2.2 响应与序列号

        TCP为每个传输的报文提供序列号以及响应机制,实现数据重复判断、缺失重发等功能,提高了数据通信的可靠性。

2.3 超时重发

        TCP在每次发包时都会计算往返时间及其偏差,而超时重发时间就是比这两个值之和稍微大一些。

        在BSD的Unix以及Windows系统中,超时都以0.5秒为单位进行控制,因此重发超时都是0.5秒的整数倍(偏差的最小值也是0.5秒。因此最小的重发时间至少是1秒。) 。不过,由于最初的数据包还不知道往返时间,所以其重发超时一般设置为6秒左右。

        数据被重发之后若还是收不到确认应答,则进行再次发送。但是之后的等待应答时间将以2倍的方式指数增长。同时,需要注意的是重发次数并不是无限次数的,而是在达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接。并且通知应用通信异常强行终止。

2.4 传输单位:段

        在建立TCP连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS)。TCP在传送大量数据时,是以MSS的大小将数据进行分割发送。进行重发时也是以MSS为单位。

        MSS是在三次握手的时候,在两端主机之间被计算得出。在建立连接时,如果某一方的MSS选项被省略,可以选为IP包的长度不超过576字节的值(IP首部20字节,TCP首部20字节,MSS 536字节)

2.5 窗口控制

        TCP以1个段为单位,每发一个段进行一次确认应答的处理。这样的传输方式在包的往返时间越长通信性能就越低。为解决这个问题,TCP引入了窗口这个概念。确认应答不在以段为单位,而是选择更大的单位进行确认,从而减少网络性能的下降。该机制也成为了滑动窗口机制。

备注:

(1)窗口在一定程度上较大时,即使有少部分的确认应答丢失也不会进行数据重复。可以通过下一个确认应答进行确认

(2)接收端在没有收到自己所期望的序列号数据时,会对之前收到的数据进行确认应答。发送端一旦收到某一个应答后,又连续3次收到同样的确认应答,则认为数据段已经丢失,需要进行重发。

2.6 流控制

        TCP提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量。这就是所谓的流控制。它的具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。

2.7 拥塞控制

        为了避免通信开始时TCP就发送大量的数据导致网络拥塞,TCP引入慢启动机制,即定义一个拥塞窗口,在每一次发送得到确认后,发送端口会逐渐增大,以提高网络吞吐量。

2.8 效率提高

Nagle算法-发送数据条件:

  • 已发送的数据都已经收到确认应答时;
  • 可以发送最大段长度(MSS)的数据时;

延迟确认应答-响应条件:

  • 在没有收到2×最大段长度的数据为止不做确认应答
  • 其他情况下,最大延迟0.5秒发送确认应答

三、报文格式

        TCP报文时面向连接的传输层协议,使用了序列号和确认号,以及三次握手、四次挥手以及重传机制,实现可靠的传输。

(1)源端口号:表示数据发送方的应用层程序

(2)目的端口号:表示数据接收方的应用层程序

(3)序列号SEQ:TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。

(4)确认号ACK:是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。

(5)首部长度:数据偏移,即首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,以32比特(4字节)为计算单位。最多有60字节的首部,若无选项字段,正常为20字节。

(6)保留:保留,占 6位,必须为0

(7)控制位:

  • URG:表示紧急指针字段有效
  • ACK:接收数据序号字段有效
  • PSH:表示通过flush操作发送的数据
  • RST:强制断开连接,用于异常中断的情况
  • SYN:同步序号,用于建立连接过程,在连接请求中发送SYN=1和ACK=0 , 应答 SYN=1和ACK=1
  • FIN:用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

(8)窗口:TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数。窗口最大为65535字节。

(9)校验和:校验字段,包括TCP首部和TCP数据

(10)紧急指针,只有当URG标志置1时紧急指针才有效。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)

(11)选项字段:长度不定。但必须是32bits的整倍数

(12)数据:可以不发送任何数据,TCP会在握手阶段告知对方自己的MSS(最大分段大小,常见为1460),而MSS+TCP头部(20byte)+IP头部(20byte)就得到MAC层的MTU1500字节

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

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

相关文章

SD-MTSP:蜘蛛蜂优化算法SWO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。蜘蛛蜂优化算…

Hugging Face 的文本生成和大语言模型的开源生态

[更新于 2023 年 7 月 23 日: 添加 Llama 2。] 文本生成和对话技术已经出现多年了。早期的挑战在于通过设置参数和分辨偏差,同时控制好文本忠实性和多样性。更忠实的输出一般更缺少创造性,并且和原始训练数据更加接近,也更不像人话。最近的研…

论文研读-SIMD系列-基于分区的SIMD处理及在列存数据库系统中的应用

基于分区的SIMD处理及在列存数据库系统中的应用 单指令多数据(SIMD)范式称为列存数据库系统中优化查询处理的核心原则。到目前为止,只有LOAD/STORE指令被认为足够高效,可以实现预期的加速,并且认为需要尽可能避免GATHE…

Sentieon | 每周文献-Benchmark and Method Study(基准与方法研究)-第八期

基准与方法研究系列文章-1 标题(英文): Standardized Comparison of Different DNA Sequencing Platforms 标题(中文): 不同 DNA 测序平台的标准化比较 发表期刊: Clinical Chemistry 作者单…

leetCode刷题记录1

文章目录 hot100题200. 岛屿数量206. 反转链表207. 课程表208. 实现 Trie (前缀树)★ Student[] strArr new Student[26];//真的只是创建了引用数组 只是new了数组存放引用的内存 并没有真的new对象内存 215. 数组中的第K个最大元素221. 最大正方形226. 翻转二叉树234. 回文链表…

Java定时算法实现与应用(最小堆、时间轮)

文章目录 一、定时算法 概述二、最小堆算法1、概述2、Java实现最小堆算法(1)Timer使用(2)源码分析 3、应用 三、 时间轮算法1、概述2、Java实现时间轮算法 一、定时算法 概述 系统或者项目中难免会遇到各种需要自动去执行的任务&…

免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务 bbc

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端…

视频音频怎么提取成MP3?教你几种简单提取方法

提取视频音频并将其转换为MP3格式有很多好处。首先,MP3格式是一种广泛支持的音频格式,可以在几乎所有设备上播放,包括计算机、手机和音乐播放器。这意味着您可以在任何设备上随时随地享受音频内容,而不必担心格式兼容性问题。那么…

Win11中使用pip或者Cython报错 —— error: Microsoft Visual C++ 14.0 is required.

第一步:下载Visual Studio 2019 下载地址: https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes 第二步:安装组件 选择单个组件,勾选以下两个组件 其他错误: 无法打开文件“python37.li…

触控触感方案原厂18按键触摸芯片电路图

VK3618I具有18个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较 高的集成度,仅需极少的外部组件便可实现触摸按键的检测。 提供了2组I2C输出功能,1个INT中断输出脚,2组I2C脚和INT可并联,每组单键输出…

【腾讯云 Cloud Studio 实战训练营】快速构建React完成点餐H5页面

一,前言 1.1 相关链接 官网地址:Cloud Studio 官方文档地址:Cloud Studio(云端 IDE)简介 | Cloud Studio 1.2 Cloud Studio(云端 IDE)简介 Cloud Studio 是基于浏览器的集成式开发环境&#…

山景DSP芯片可烧录AP8224C2音频处理器方案

AP8224C2高性能32位音频应用处理器AP82系列音频处理器是面向音频应用领域设计的新一代SoC平台产品,适用于传统音响系统、新兴的蓝牙或Wifi 无线音频产品、Sound Bar 和调音台等市场。该处理器在总体架构和系统组成上,充分考虑了音频领域的特点&#xff0…

一个月学通Python(三十四):使用Selenium模拟人工操作及获取网页内容

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教…

【cs61b】学习笔记day2

历史文章目录 【cs61b】学习笔记day1 文章目录 历史文章目录List两个小问题bits声明一个变量引用类型方框和指针表示法数组的实例化链表 SLList List 两个小问题 思考下面两个代码分别输出什么 Walrus a new Walrus(1000, 8.3); Walrus b; b a; b.weight 5; System.out.…

并发编程面试题1

并发编程面试题1 一、原子性高频问题: 1.1 Java中如何实现线程安全? 多线程操作共享数据出现的问题。 锁: 悲观锁:synchronized,lock乐观锁:CAS 可以根据业务情况,选择ThreadLocal,让每个…

2023最新版Anaconda下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

1. 前言 小编的电脑是win10系统的,这里以win10系统安装Anaconda为例,其他的系统安装过程类似,可以照猫画虎,下面请看具体的安装过程。 2. 下载软件 1、首先去官网上进行下载软件,下载地址: https://docs…

php获取随机订单号(封装函数)

作为一个开发人员,生成订单时常常需要获取一段随机码来表示订单号,并且订单号一般包含的特定的时间日期等信息,临时现写一个比较浪费时间,这里有一个封装好的生成随机订单号的函数,需要时直接调用即可。 代码如下&…

【腾讯云 Cloud Studio 实战训练营】一个新的趋势已来

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

Datahub稳定版本0.10.4安装指南(独孤风版本)

大家好,我是独孤风,大数据流动的作者。 曾几何时,我在第一次安装JDK环境的时候也遇到了不小的麻烦,当时还有朋友就因为这个环境问题觉得自己根本不是编程的料,选择了放弃。当时有个段子说,“如果不是JDK环境…

生物学家呼吁:基因组测序是从大流行病中快速获得信息的最重要方法之一

生物学家Jason Ladner和Jason Sahl于2023年8月1日发表在《PLOS Biology》(IF20229.8)的一篇文章中主张,持续发展基因组测序是能从大流行病中快速获得信息的最重要方法之一。基因组测序对全球应对COVID-19产生了巨大影响,随着更多研…