TCP数据传输协议详解

这篇具有很好参考价值的文章主要介绍了TCP数据传输协议详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、TCP概述

1、点对点
一个发送方,一个接收方

2、可靠地,按顺序的字节流
没有报文边界

3、管道化(流水线)
TCP拥塞控制和流量控制设置
窗口大小

4、发送和接收缓存

5、全双工数据
在同一连接中数据流双向流动
MSS:最大报文段大小

6、面向连接:
在数据交换之前,通过握手(交换控制报文)初始化发送方、接收方的状态变量

7、有流量控制
发送方不会淹没接收方

2、TCP报文段的首部格式

1、TCP是面向字节流的,但是TCP传送的数据单元是报文段
2、一个TCP报文段分为首部和数据两部分
3、TCP首部的最小长度是20字节
tcp传输,网络

tcp传输,网络

4、首部固定部分各字段的意义如下:
1)源端口和目的端口
各占2个字节(1字节 = 8bit),分别写入源端口号和目的端口号。

2)序号(报文段序号):报文段首字节在字节流的编号。
占4个字节,在一个TCP连接中传送的字节流中的每一个字节都按照顺序编号,整个要传送的字节流的起始序号必须在连接建立是设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。

3)确认号
占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。
tcp传输,网络
总之,确认号 = N,则表明:到序号N-1为止的所有数据都已正确收到。
tcp传输,网络
tcp传输,网络
主机A发送X是从42开始,发送一个字节C【报文段中只包含一个字节】,主机B发送的ACK=79,说明78及以前的数据都收到了,告诉主机A希望再从X=79开始传

4)数据偏移
占4位,它指出TCP报文段的数据起始处距离TCP报文段起始处有多远。

5)紧急URG
当URG设置为1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中紧急指针字段配合使用。

6)确认ACK
仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。
TCP规定,在连接建立后所有传送的报文段都必须把ACK设置为1

7)窗口
tcp传输,网络

5、MSS:最大报文段长度
MSS是每一个TCP报文段中的数据字段的最大长度。
数据字段加上TCP首部才等于整个的TCP的报文段。所有MSS并不是整个TCP报文段的最大长度。而是TCP报文段长度减去TCP首部长度。

MSS应尽可能大些,只要在IP层传输时不需要再分片就行。对网络的使用率就高一些。如果TCP报文段十分长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片转配成原来的TCP报文段。当传输出错时还要进行重传。这些也都会使开销增大。
若主机没有填写这一项,则MSS的默认值是536字节长。因此,所有在互联网上的主机都应能接受的报文段长度是536+20(固定首部长度) = 556字节。
tcp传输,网络

6、往返时间RTT
第一,用来计算往返时间RTT。发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收不方在确认该报文段时把时间戳字段值复制到时间戳回送回答字段。因此,发送方在收到确认服文后,可以准确地计算出 RTT来。

第二,用于处理TCP序号超过232的情况,这又称为防止序号绕回PAWS S(Protect Against Wrapped Sequence numbers)。我们知道,TCP 报文段的序号只有32位,而每增加2的32次方个序号就会重复使用原来用过的序号。当使用高速网络时,在一次 TCP连接的数据传送。为了使接收方能够把新的报文段和迟到很久的报文段区分开,可以再报文段中加上这种时间戳。

3、超时重传时间的选择

1、TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。
tcp传输,网络

2、TCP采用了一种自适应算法
RTT:报文段的往返时间
tcp传输,网络

3、超时重传时间RTO
tcp传输,网络

4、TCP:可靠数据传输

1、TCP在IP不可靠服务的基础上建立了rdt
1)管道化的报文段
2)累计确认
3)单个重传定时器
定时器只和最老的报文段相关联
4)是否可以接收乱序的,没有规范
接收方收到一个乱序的报文段怎么处理,接收方可以进行缓存也可以抛弃掉

2、TCP发送方事件
从应用层接收数据:
1)用nextseq创建报文段
2)序号nextseq为报文段首字节的字节流编号
3)如果还没有运行,启动定时器
* 定时器与最早未确认的报文段关联
* 过期间隔:TimeOutInterval
4)超时
* 重传后延最老的报文段
* 重启定时器
tcp传输,网络

tcp传输,网络

tcp传输,网络
TCP快速重传是在超时重传时间到来之前,发送方连续收到3个ACK,发送方快速重传。

5、TCP:流量控制

1、接收方控制发送方,不让发送方发送太多,太快以至于让接收方的缓冲区溢出
tcp传输,网络

6、TCP连接管理

tcp传输,网络

7、拥塞控制原理

拥塞:
1、非正式的定义:“太多的数据需要网络传输,超过了网络的处理能力”
2、与流量控制不同
3、拥塞的表现
1)分组丢失(路由器缓冲区溢出)
2)分组经历比较长的延迟(在路由器的队列中排队)
4、网络中前10位问题

7.1 导致网络拥塞的原因

1、当某个节点缓存的容量太小时,到达该节点的分组因无存储空间暂存而不得不被丢弃。

2、简单的对节点缓存扩容也解决不了网络拥塞的问题,原因是由于链路的容量和处理机的速度并没有提高,在队列中的绝大多数分组的排队等待时间会大大增加,结果上层软件只好把他们进行重传(超过重传时间)。

3、如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组。但是当分组被丢弃,发送这一分组的源点就会重传这一分组,甚至可能还要重传多次,这样会引起更多的分组流入网络和被网络中的路由器丢弃。反而会加剧网络的拥塞。

tcp传输,网络

tcp传输,网络
1、理想的拥塞控制作用下,网络的吞吐量仍然维持在其所能达到的最大值。
2、实际的拥塞控制情况下,随着提供的负载的增大,网络吞吐量的增长速率逐渐减少。当提供的负载达到某一数值时,网络的吞吐量反而会随着提供的负载的增大而降低。当提供的负载继续增大到某一数值时,网络的吞吐量就下降到零,网络已无法工作,这就是所谓的死锁。

tcp传输,网络
网络拥塞的原因:
1、为了达到有效的输出,需要输入更多的数据。在网络拥塞的时候需要重传很多没有不必要的数据,从而加速了网络拥塞的程度,使得网络变得更拥塞。

tcp传输,网络

8、TCP拥塞控制

tcp传输,网络
tcp传输,网络
tcp传输,网络

tcp传输,网络

8.1 TCP的拥塞控制方法

1、慢开始算法:当主机开始发送数据时,由于并不清楚网络的负荷情况,所以如果立即把大量数据字节注入到网络,那么就有可能引起网络发生拥塞。经验证明,较好的方法是先探测一下,及由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。
tcp传输,网络
拥塞窗口cwnd是按倍数增加的。

2、拥塞避免算法:是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是像慢开始阶段那样加倍增长。因此在拥塞避免阶段就有“加法增大”的特点。这表明在拥塞避免阶段,拥塞窗帘cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增大速率缓慢得多。

3、快重传
tcp传输,网络文章来源地址https://www.toymoban.com/news/detail-534727.html

到了这里,关于TCP数据传输协议详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【TCP 协议】报文格式,数据可靠传输的机制(一)

    哈喽,大家好~我是你们的老朋友: 保护小周ღ   本期为大家带来的是网络编程的 TCP 传输控制协议的概念 ,首先会讲解 TCP 协议的报文格式 ,在学习报文格式之后,会学习两种 TCP 保证数据可靠传输的机制, 确认应答,超时重传, 这也是TCP 中较为核心的机制,以及接收缓

    2024年02月01日
    浏览(54)
  • Wireshark数据抓包分析之传输层协议(TCP协议)

            通过使用wireshark对TCP协议的数据包的抓取分析TCP协议的具体内容         1.需要了解TCP协议的三次握手过程         2.需要了解TCP协议的四次挥手的过程 part1:3次握手和4次挥手的数据包的获取 1.通过使用TCP测试工具在机器一中创建服务器,并且进行相应的配置,然

    2024年02月11日
    浏览(40)
  • UDP(用户数据报协议)和TCP(传输控制协议)是互联网协议(IP)中两种主要的传输层协议

    您的描述是正确的。UDP(用户数据报协议)和TCP(传输控制协议)是互联网协议(IP)中两种主要的传输层协议。他们之间有几个重要的区别,其中之一就是建立连接的方式。 连接方式: • TCP:在进行数据传输之前,需要通过三次握手(3-way handshake)建立连接。这可以确保

    2024年02月02日
    浏览(116)
  • Socket TCP/IP协议数据传输过程中的粘包和分包问题

    一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解: 下面对上面的图进行解释: 1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。 2.粘包情况:Socket Client发送的数据包,

    2024年02月12日
    浏览(44)
  • 通信模型四层(TCP/IP)、五层、七层(OSI)的作用、协议及数据传输单位

    四层模型 五层模型 七层模型 每层作用 物理层:传输比特流 数据链路层:控制网络层和物理层之间的通信 网络层:IP寻址和路由选择 传输层:建立、维护、管理端到端连接 会话层:建立、维护、管理会话连接 表示层:数据格式化,加密、解密、 应用层:为应用程序提供网

    2024年02月03日
    浏览(46)
  • ESP32网络编程-TCP客户端数据传输

    本文将详细介绍在Arduino开发环境中,实现一个ESP32 TCP客户端,从而达到与TCP服务器数据交换的目标。 Internet 协议(IP)是 Internet 的地址系统,具有将数据包从源设备传递到目标设备的核心功能。IP 是建立网络连接的主要方式,奠定了 Internet 的基础。IP 不负责数据包排序或错

    2024年02月03日
    浏览(46)
  • QT基于TCP协议实现数据传输以及波形绘制——安卓APP及Windows程序双版本

    文章代码有非常非常之详细的解析!!!诸位可放心食用 这个玩意我做了两个,一个是安卓app,一个是Windows程序。代码并非全部都是由我从无到有实现,只是实现了我想要的功能。多亏了巨人的肩膀,开源万岁!!! 我把程序放到GitHub上,需要的可自取。 安卓app:   mai

    2024年02月15日
    浏览(50)
  • ESP32网络开发实例-TCP服务器数据传输

    本文将详细介绍在Arduino开发环境中,实现一个ESP32 TCP服务器,从而达到与TCP客户端数据交换的目标。 Internet 协议(IP)是 Internet 的地址系统,具有将数据包从源设备传递到目标设备的核心功能。IP 是建立网络连接的主要方式,奠定了 Internet 的基础。IP 不负责数据包排序或错

    2024年02月07日
    浏览(58)
  • Labview实现vi间数据传递的方法汇总 ---子VI、队列、全局变量及UDP/TCP协议传输

    本文汇总一下不同VI之间数据传递的方式,使大家明确数据传递的几种类型并灵活使用。 本文程序均上传至云端,读者可自行下载学习。 基于目前大家所学到的基础知识,在Labview中简单来说数据类型基本包括 数值、字符串、数组、簇、布尔量、引用、路径、枚举量、波形图

    2024年04月10日
    浏览(54)
  • 数据链路层(MAC)、网络层(IP)、传输层(TCP/UDP)抓包分析

    OSI模型(OSI model),开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI)。 抓包通常抓取数据链路层、网络层、传输层的包。 OSI主要关注5层,数据从上至下逐级封装,加入每层的头部信息,在物理层转换为比特率发送; 接收端使用逆向顺序

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包