<计算机网络自顶向下> 面向连接的传输:TCP

目录

TCP: 概述

TCP报文段结构

TCP往返延时(RTT)和超时

可靠数据传输

快速重传

 流量控制

 连接管理


TCP: 概述

  • 点对点
    • 一个发送方,一个接收方
  • 可靠的、按顺序的字节流
    • 不出错,不重复,不丢失,不失序
    • 没有报文边界:发多个报文(MSS小)对方可能收到更多小报文或者几个大报文(MSS大)
  • 管道化(流水线)
    • 在未经确认的情况下,发送方可以给接收方发送连续很多TCP段(应用进程往下交的报文要被TCP根据MMS的大小分成多个TCP段,每个段加上头部信息)
    • TCP拥塞控制和流量控制设置窗口大小
  • 发送和接收缓存
    • 发送端缓冲区为了检错重发,超时重传
    • 接收端缓冲区为了平衡接收和发送速度

  • 全双工数据
    • 在同一连接中数据流双向流动
    • MSS(Maximum Segment Size): 最大报文段大小(注意不包括头部)
  • 面向连接
    • 在数据交换之前,通过握手(交换控制报文)初始化发送方、接收方的状态变量
  • 有流量控制
    • 发送方不会淹没接收方

TCP报文段结构

  • 这里的序号是字节为单位的序号,这里TCP段的的body的第一个字节占整个字节流的偏移量就是序号,就是前一节发送的时候用来标识的序号,因为每个段大小不一定一样所以序号不一定是连续的
  • 确认号也是以字节为单位,TCP发送的确认号是累计确认的,但是要比当前已经接收的字节序号要大1。比如收到555ACK,那么554及以前的字节都收到了

  • 首部长度:以四个字节为单位,说明首部有多长
  • R,S,F用于两个应用进程建立TCP连接
  • 没有固定接收方如何处理乱序的报文段,取决于实现者自己

TCP往返延时(RTT)和超时

  • 怎样设置TCP超时
    • 比RTT要长,但是RTT是变化的
    • 太短:太早超时,造成不必要的重传
    • 太长:对报文段丢失反应太慢,消极
  • 怎样估计RTT
    • SampleRTT:测量从报文段发出到收到确认的时间,如果有重传,忽略此次测量
    • SampleRTT会变化,因此估计的RTT应该比较平滑,对几个最近的测量值求平均,而不是仅仅用当前的SampleRTT
  • EstimateRTT = (1-α)*EstimateRTT + α*SampleRTT
    • 定期的测量往返延迟
    • 过去样本的当前RTT的影响呈指数型衰减

    • 推荐值α=0.125
  • 设置超时
    • EstimateRTT+安全边界时间:EstimateRTT变化大(方差大)->较大的安全边界时间
  • SampleRTT会偏离EstimateRTT多远
    • DevRTT = (1-β)*DevRTT + β*|SampleRTT-EstimatedRTT|(注意,第一次计算时,DevRTT=0.5*SampleRTT)
    • 当前采样值里偏差的程度的平均值(相当于方差/标准差)
    • 推荐值β=0.25
  • 超时时间间隔设置为
    • TimeoutInterval = EstimatedRTT +4*DevRTT(“safety margin”)

可靠数据传输

  • TCP在IP不可靠服务的基础上建立了rdt
    • 管道化的报文段:GBN or SR
    • 累计确认(像GBN,但是是传下一个期望发的序号ACK)
    • 单个重传定时器(像GBN)
    • 没有规范是否可以接受乱序的
  • 通过一下事件触发重传
    • 超时:只发那个最早的没有确认的段(像SR)
    • 重复的确认: (比如收到了ACK50之后又收到3个ACK50)
      快速重传:TCP为了防止万一,超时定时器设置的比较长,但是有时候发送接收很快,就在超时之前发送了下一个字节的ACK请求,如果说连着发了四个还没有超时,计时器就提前中断,开启下一次发送。
  • 首先考虑简化的TCP发送方
    • 忽略重复的确认
    • 忽略流量控制和拥塞控制

  • 产生TCP ACK的建议 
接收方的事件接收方动作

所期望序号的报文段按序到达
所有在期望序号之前的数据都
已经被确认

延迟的ACK。 对另一个按序报文段的到达
最多等待500ms。如果下一个报文段在
这个时间间隔没到达,发下一个ACK
因为发送方会连续发送多个文件,如果ACK
给太快,可能造成不必要的重发——忍住不发
有期望序号的报文段到达
另一个按序报文段等待发送ACK

立即发送单个累计ACK,以确认两个按序报文段

比期望序号大的报文段乱序到达
检测出数据流中的间隔
立刻发送重复的ACK,指明下一个期待字节的序号

能部分或者完全填充接收数据间隔

的报文段到达

若该报文段起始于间隔(gap)的低端,则立刻发送ACK

快速重传

 流量控制

  • 接收端缓冲区
    • 取数据:用户
    • 灌数据:IP网上灌到TCP然后TCP往缓冲区灌
    • 通过rcv_window知道接受缓冲区还剩多少字节,发送ACK的时候会把容量发送给发送方(捎带技术)
    • 实际上,两个实体互相发送数据的时候这个发送可以包含上次的ACK,这次的数据和缓冲区的容量,这样可以减小发送次数从而减小开销
    • 目的:不让发送端发送太快使得接收端过载

 连接管理

  • 连接建立
    • 连接建立的本质(三次握手)
      • 知道要和对方通信(每一方都知道对方同意建立连接)
      • 准备好资源,控制变量比如base置位然后发给对方,两方都必须知道(统一连接参数)
        两端互相传数据的时候,约定好二者从x和y字节序号发送(二者都知道),不可以固定序号,可能造成老的连接对新的连接的干扰
    • 两次握手的失败场景
      • 有可能客户端发送了请求以后服务器的恢复超时了,然后客户端又发了一个请求,后面服务器两个连接请求都收到了,建立了两个连接但是实际上仅仅有一个连接是真正使用的,这样有一个连接是“半连接”(服务器维护连接而客户端没有维护)。注意每次连接都需要准备资源,这造成了资源浪费
      • 也有可能使得老的数据被当成新的数据接收了
      • 解决方案:三次握手
      • 两次握手达咩!客户端问服务器活着么,服务器说我活着呢,但是万一客户端没等到服务器的回应就嗝屁了呢,你得让服务器知道对方是死是活

  • TCP三次握手 (SYN=1就是连接请求)
    • 左边发送初始序号,SYN报文请求建立连接
    • 右边发送初始序号,SYN-ACK报文请求建立连接
    • 左边确认,发送ACK报文(这里的ESTAB是Established)                                 

    • 解决半连接和接收老数据问题
      • 第一种情况:客户端发现在上一次连接关闭之后,没有再向服务器发送建立连接的请求,因此拒绝
      • 第二种情况:刚开始半连接就没有建立起来,服务器发现自己从来没有与客户端建立连接就收到数据了,因此拒绝
      • 第三种情况(黑板图):客户端与服务器建立连接以后愉快的发送数据,结果其中一个数据突然不知道为啥滞留在中间,过了很长一段时间,客户端和,然后客户端和服务器的连接客户端仍然用相同的端口与服务器相同的端口建立连接,也不大可能把旧的数据当做新的数据接收,因为初始序号x和y不一样(要是一样的可能性太太小了),所以之前说x和y不是固定的数字可以防止新的连接被老的数据影响。x和y的选择和时钟周期有关系,把时钟周期的低32位当做初始序号。

  • 关闭连接(它并不完美,有可能在中间会出问题)
    • 连接是每个方向单独拆除的(两个来回)
      • 客户端向服务器发送连接拆除请求,对方回应后说明客户端到服务器的连接已经拆除了
      • 服务器向客户端发送链接拆除请求,对方回应后说明服务器到客户端的连接已经拆除了
    • 过程
      • 客户端,服务器分别关闭它自己这一侧的连接(发送FIN bit=1的TCP段)
      • 一旦接收到FIN用ACK回应,接收到FIN段,ACK可以和它自己发出的FIN段一起发送
      • 可以处理同时的FIN交换

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

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

相关文章

面试算法准备:动态规划

这里写自定义目录标题 1 理论2 例题2.1 斐波那契数列(什么是重叠子问题)2.1.1 带备忘录的递归解法 2.2 零钱兑换(讲解最优子结构)2.3 最长递增子序列(讲解如何求解状态转移方程)2.4 俄罗斯套娃信封问题&…

3月养颜抗氧化市场发展趋势洞察:抗糖亮肤功能性产品成为行业大势

随着我国人口老龄化程度的加深和人们对健康和美丽的追求日益增强,具备养颜抗氧化、抗衰老功能的产品逐渐成为市场热门,备受人们关注。 根据鲸参谋数据显示,今年3月份,在线上电商平台(京东天猫淘宝)养颜抗氧…

[Windows] Bypass分流抢票 v1.16.25 五一黄金周自动抢票软件(2024.02.08更新)

五一黄金周要来了,火车票难买到,即便官网候选订票也要看运气,推荐使用这个靠谱的自动抢票软件, 该工具是目前市面上最好用口碑最好的电脑抢票软件,从13年到现在,作者依旧在更新,可以自动识别123…

什么是最优物理隔离文件导出导入解决方案,来看看吧

企业进行物理隔离的主要原因是为了提高安全性,减少安全风险。物理隔离通常指的是将网络或系统中的关键部分与外界断开直接连接,以增强安全性。在企业环境中,这通常意味着将内部网络(内网)与外部网络(如互联…

关于MCU核心板的一些常见问题

BGA植球与焊接(多涂焊油): 【BGA芯片是真麻烦,主要是植锡珠太麻烦了,拆一次就得重新植】https://www.bilibili.com/video/BV1vW4y1w7oNvd_source3cc3c07b09206097d0d8b0aefdf07958 / NC电容一般有两种含义&#xff1…

控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包

目录 前言 基础知识 进阶实践 ANSI参数 ANSI类 JSLog类 工具的使用说明 配置相关 全局配置项 默认配置 基本用法 打印字符 添加全局配置项 清空所有样式及操作行为 校验传入的参数是否正确 样式控制 Node环境 浏览器中 光标控制指令 光标位置偏移 滚动条控…

消费增值:革新你的消费体验,让每一分钱都更有价值

亲爱的顾客们,你们好!今天,我想为大家介绍一种革新性的消费模式——消费增值,它赋予每一次购物以额外的价值,让消费过程变得更加丰富多彩。 过去,我们的消费观念往往是“一手交钱,一手交货”&am…

LCD彩屏显示方案选型攻略:从接口到GUI开发工具的全面评估

在现代人类社会,彩色显示技术是科技王国里最为绚丽夺目的技术奇葩,LCD彩屏通过显示实时信息并提供交互式的体验,将信息时代打扮得多姿多彩。无论是智能家电还是医疗健康设备领域,精美直观的LCD彩屏显示,往往能够为用户…

【Linux学习】初始冯诺漫体系结构

文章目录 认识冯诺依曼系统 认识冯诺依曼系统 什么是冯诺依曼体系结构? 冯诺依曼体系结构是一种将程序指令和数据以二进制形式存放在主存储器中,由中央处理器统一控制和执行的计算机系统结构。冯诺依曼体系结构实现了程序的可编程性和硬件与软件的分离&…

wordpress建网站主题案例推荐

wordpress企业网站主题案例 https://www.mymoban.com/wordpress/ wordpress公司官网主题案例 https://www.wowsoho.com/jianzhan wordpress外贸主题案例 https://www.wpniu.com/moban

用户中心 -- 插件使用 插件使用思路

易错注意点 1 5.1启动类 & 入口类 需保持一致 网址: 第一节课,用户管理--后端初始化,项目调通。二次翻工2-CSDN博客 一、 用户管理 框架 网址: 用户管理 --汇总 -- 明细-CSDN博客 1.2 更改路径,并生效 网址…

基于SpringBoot的“家具销售电商平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“家具销售电商平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 管理员登录界面 管理员功能界面 家具分类管理…

戴尔g15删掉的数据怎么恢复?介绍几种常用方法

随着科技的发展,电脑已成为我们日常生活和工作中不可或缺的一部分。其中,戴尔G15作为一款高性能的笔记本电脑,受到了许多用户的青睐。然而,就像任何电子设备一样,戴尔G15也难免会遇到数据丢失的问题。因此,…

【算法刷题】手撕LRU算法(原理、图解、核心思想)

文章目录 1.LRU算法1.1相关概念1.2图解举例1.3基于HashMap和双向链表实现1.3.1核心思想1.3.2代码解读1.3.3全部代码 1.LRU算法 1.1相关概念 LRU(Least Recently Used,最近最久未使用算法): 定义:根据页面调入内存后的…

(一)、SQL进阶——神奇的SQL

一、CASE表达式 1、CASE表达式概述 case表达式有简单case表达式和搜索case表达式两种写法 -- 简单case表达式 case sex when 1 then 男 when 0 then 女 else 其他 end -- 搜索case表达式 case when sex1 then 男 when sex1 then 男 else 其他 end 这两种写法执行的结…

跨平台手机号:微信手机号授权登录、微信授权登录双登录实现账户生态融合,新时代的身份密钥

小程序厂商的多样性体现在开发工具、服务领域、商业模式等多方面,各厂商凭借独特的技术优势、行业解决方案和市场策略,满足不同企业和用户需求。与此同时,随着移动互联网发展,手机号统一登录成为提升用户体验、简化登录流程的关键…

要养生也要时尚,益百分满足你的所有需求

要养生也要时尚,益百分满足你的所有需求 艾灸是个好东西,尤其是在近几年的时候,艾灸就像一阵浪潮席卷进了人们的日常生活之中,我们可以在街边看到大大小小的艾灸馆,有些评价比较高的艾灸馆门前甚至还排起了长长的队伍…

FasterViT:英伟达提出分层注意力,构造高吞吐CNN-ViT混合网络 | ICLR 2024

论文设计了新的CNN-ViT混合神经网络FasterViT,重点关注计算机视觉应用的图像吞吐能力。FasterViT结合CNN的局部特征学习的特性和ViT的全局建模特性,引入分层注意力(HAT)方法在降低计算成本的同时增加窗口间的交互。在包括分类、对…

【InternLM 实战营第二期笔记】Lagent AgentLego 智能体应用搭建

理论知识 Lagent 是什么 Lagent 是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。 Lagent 目前已经支持了包括 AutoGPT、ReAct 等在内的多个经典智能体范式,也支持了…

C语言指针+-整数、指针-指针、指针关系运算、指针和数组、二级指针、指针数组

文章目录 前言一、指针 - 整数二、指针 - 指针三、指针的关系运算四、指针和数组五、二级指针六、指针数组指针数组可以将几个一维数组模拟成二维数组 总结 前言 C语言指针整数、指针-指针、指针关系运算、指针和数组、二级指针、指针数组等介绍,还包括指针数组将几…