tcp序列号为什么是随机的_译文:每个开发人员应了解的 TCP 知识

为什么要把服务器放在离用户很近的地理位置上?其中一个原因是为了实现更低的延迟。当您发送的数据是短的、应该尽可能快的传输数据时,这很有意义。但如果是大文件,比如视频等大文件呢?当然,在接收第一个字节时肯定会有延迟惩罚,但之后不应该一帆风顺吗?

通过TCP发送数据时,像HTTP一样,一个常见的误解是带宽与延迟无关。但是,对于TCP来说,带宽是延迟和时间的函数。我们来看看是怎么做到的。

握手

在客户端开始向服务器发送数据之前,它需要对TCP进行握手,对TLS进行另一个握手。

TCP使用三向握手来建立一个新的连接。

  1. 发送方选择一个随机生成的序列号 "x "并发送一个SYN数据包给接收方
  2. 接收方递增 "x",选择一个随机生成的序列号 "y "并发送一个SYN/ACK数据包。
  3. 发送方递增序列号,并回复一个ACK数据包和第一个字节的应用数据。

TCP使用序列号是为了保证数据的有序、无漏洞的传递。

1017231856ff4c7c9e19137bb257fb02

握手

握手引入了一个完整的往返,这取决于底层网络的延迟。TLS 握手也需要最多两次往返。在TLS连接打开之前,不能发送任何应用数据,这意味着在这之前,你的带宽是零。回程时间越低,建立连接的速度就越快。

流量控制

流量控制是一种回避机制,实现的目的是防止发送方压倒接收方。

接收方将传入的TCP数据包存储到一个接收缓冲区,等待应用程序处理。

6f40e887396647aebcc6a6750f0761f2

流量控制

每当接收方承认一个数据包时,接收方也会向发送方反馈缓冲区的大小。如果发送方尊重协议,发送方就会避免发送更多可以装入接收方缓冲区的数据。

0e84ab4d77234827b75923544aee3a59

流量控制

这种机制与应用层面的速率限制没有太大区别。但是,与API密钥或IP地址上的速率限制不同,TCP是在连接层面上的速率限制。

发送方和接收方之间的往返时间(RTT)越低,发送方就越能使其输出带宽适应接收方的容量。

拥堵控制

TCP不仅要防止接收方不堪重负,还要防止底层网络被淹没。

发送方如何知道底层网络的可用带宽是多少?唯一的方法就是通过测量来估算。

其思路是,发送方维护一个所谓的 "拥塞窗口"。拥塞窗口表示不等待对方的回执,可以发送的未完成的数据包总数。接收器窗口的大小限制了拥塞窗口的最大大小。拥塞窗口越小,在任何给定的时间内可以飞行的字节数就越少,带宽的利用率就越低。

当建立新连接时,拥塞窗口的大小被设置为系统默认值。然后,每承认一个数据包,窗口的大小就会成指数级地增加。这意味着,我们不能在建立连接后立即使用网络的全部容量。再次,来回时间越低,发送方就越能迅速开始利用底层网络的带宽。

ba2ef4c2ba86411b954a7fb45a7e2d1d

拥堵控制

如果数据包丢失了怎么办?当发送方通过超时检测到漏报时,一个叫做 "拥塞避免 "的机制就会启动,拥塞窗口大小就会减小。从此以后,时间会使窗口大小增加一定的量,超时则会使窗口大小减少另一个。

如前所述,拥塞窗口的大小定义了无需等待确认就可以发送的最大比特数。而发送者需要等待一个完整的往返,才能得到一个确认。所以,将拥塞窗口的大小除以往返时间,就可以得到最大理论带宽。

带宽= WinSize / RTT

这个简单的等式表明,带宽是延时的一个函数。TCP会非常努力地优化窗口大小,因为它对往返时间无能为力。但是,这并不总是能得到最佳配置。

总结一下,拥塞控制是一种自适应机制,用于推断网络的底层带宽和拥塞情况。类似的模式也可以应用在应用层面。想一想,当你在Netflix上看一部电影时,会发生什么?它开始模糊;然后,它会稳定到合理的程度,直到出现打嗝,质量再次恶化。这种应用于视频流媒体的机制被称为自适应比特率流媒体。

记住这一点

如果你使用的是HTTP,那么你就得听从底层协议的安排。如果你不知道香肠是怎么做的,你就无法获得最好的性能。

突发请求会受到冷启动惩罚。使用TCP和TLS握手协议发送第一个字节可能需要多次往返。而且由于拥塞控制的工作方式,往返时间越低,底层网络的带宽利用得越好。

在这个问题上已经写了整整一本书,你可以做很多事情来榨取每一盎司的带宽。但是,如果你必须记住一件事,那就是关于TCP的事情。

你不能以光速发送数据,但你可以做的是把你的服务器放在离客户端更近的地方,并重复使用连接来避免冷启动惩罚。

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

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

相关文章

matlab时域转换成频域_从时域到频域,你只需要旋转一下!

作为一个工科生,这里我不去说很多的严密的定理和知识,我只是从我的角度,形象的去理解时域和频域。首先我们来观察一个画在空间直角坐标系中的正弦函数:现在我们从两个视角去观察它分别是垂直于xoz面和垂直于yoz面看到的图像如下&a…

win7右键计算机管理参数错误,win7纯净版虚拟磁盘管理器参数错误怎么解决?

最近有用户反映win7纯净版虚拟磁盘管理器参数错误,他是硬盘分区太多,很乱,所以想要自己设置盘符名称,但没想到在修改盘符时出现提示“硬盘参数错误”,导致修改盘符失败,这让用户非常苦恼。那么,…

mysql查看用户名_Mysql创建数据表的方法介绍(附示例)

本篇文章给大家带来的内容是关于Mysql创建数据表的方法介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。数据表是数据库最重要的组成部分之一,是其他对象的基础。如果我们的数据库没有数据表就等于没有…

vue读取终端硬件信息_双通道RFID模块助力电力数据采集终端(不必多说,直接测试对比)...

推动超高频技术应用的RFID模块打包模组、全面简化设计极高的性价比,让更多领域用得起超高频RFIDM6002 是我司自主研发的一款高性能双通道嵌入式超高频RFID 读写模块,该模块主要是解决单通道读写模块的空间盲点问题,弥补单通道读写模块在应用中…

spring 查找实现类_69道Spring面试题和答案

什么是spring?Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。使用Spring框架的好…

2018全国计算机音乐大赛一等奖,2018全国数字音乐大赛总决赛精彩无限!小学员的技能震惊评委!...

2018全国数字音乐大赛总决赛精彩无限!小学员的技能震惊评委!近日,为期四天的第三届罗兰艺术节暨全国青少年数字音乐大赛总决赛于北京隆重召开并圆满闭幕。期间丰富多彩的音乐竞技赛事与演艺现场,让所有参与大赛的学员与家长们赞叹…

erp开发和java开发区别_Java程序员求职必学:Spring boot学习指南!

黑马程序员上海中心学姐微信:CZBKSH关注咳咳,今天学姐就来和你们说说Spring对于Java程序员的重要性。首先,Spring 官网首页是这么介绍自己的——“Spring: the source for modern Java”,这也意味着 Spring 与 Java 有着密切的关系…

irobot擦地机器人故障_33款扫地机器人口碑:售价6350元的戴森口碑垫底,小米、科沃斯谁更好用?...

市面上的扫地机器人琳琅满目,消费者该怎么选呢?2020年6月,《消费者报道》汇总了京东、天猫、苏宁上热销的33款扫地机器人的评价情况,对约3.9万条消费者评价数据进行了分析和评分。评价品牌科沃斯、海尔、iRobot、小米、浦桑尼克、…

专业显卡打游戏测试软件,专业显卡能玩游戏吗?专业卡游戏实测

专业显卡能玩游戏吗?专业卡游戏实测2013年03月06日 00:12作者:汤炜炜编辑:汤炜炜分享泡泡网显卡频道3月6日 图形工作站专业显卡与消费级游戏显卡在硬件上是完全一样的,区别只在于规格微调、驱动不同、软件验证。我们也知道&#x…

python集合运算符_Python 集合、字典、运算符

先区分一下序列类型和散列类型: 序列类型:list、string、tuple,他们中的元素是有序的。 散列类型:set、dict,他们中的元素无序的。(注意:python3.7.0开始字典变成"有序"了&#xff09…

wireshark 查看端口是否正常_网络抓包软件-Wireshark使用分享

Wireshark(以前叫Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是抓取网络封包,并尽可能地显示出详细的网络封包信息。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。基础界面介绍Wireshark软件界面有以下几个功能区域&#xf…

普通计算机用的是什么屏幕,笔记本屏幕的色域 72%NTSC和100%sRGB有什么区别

笔记本屏幕的色域 72%NTSC和100%sRGB有什么区别2018-09-15 11:00:05247点赞724收藏60评论无论是选购普通笔记本还是游戏本,大家除了关心产品的外观和配置外,越来越多的朋友把重点放在了屏幕上,也许TN屏和IPS屏大家很好判断哪个更好&#xff0…

redis源码分析 ppt_【Redis】redis各类型数据结构和底层实现源码分析

一、简介和应用Redis是一个由ANSI C语言编写,性能优秀、支持网络、可持久化的K-K内存数据库,并提供多种语言的API。它常用的类型主要是 String、List、Hash、Set、ZSet 这5种。Redis在互联网公司一般有以下应用:String:缓存、限流、计数器、分…

cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南

从数据预处理、增强、模型优化、调参再到损失函数...本文转载自:AI公园作者:Prince Canuma 编译:ronghuaiyang注:文末附CV学习交流群导读覆盖了模型相关的方方面面,从数据准备到模型的推理,每个阶段的方法和…

miniui datagrid 隐藏列默认赋值_Qt商业组件DataGrid:内置视图和布局详解(一)

QtitanDataGrid是Qt的商业DataGrid组件,它为将表格数据呈现给最终用户提供了真正的非凡可能性。该组件吸收了用于显示表格的用户界面构造领域中的所有现代成就。目前,这是Qt市场上唯一具有如此令人印象深刻的高级功能和出色性能的网格组件。QtitanDataGr…

zookeeper中展示所有节点_分布式协调服务之Zookeeper

??理论篇一、基础概念ZooKeeper是开源分布式协调服务,提供高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。二、ZooKeep…

idea怎么给项目改名_微软改名部惹祸了

IT服务圈儿有温度、有态度的IT自媒体平台作者:局长本文经公众号:开源中国(oschina2013)授权转载,如需转载请联系出处几年前,微软发布了一个名为"GVFS"的项目,这是一个 Git 虚拟文件系统,全称为 G…

@postconstruct注解方法没有执行_被标记为事务的方法互相调用的坑(下)

上一节,主要分析了 被标记为事务的方法互相调用,事务失效的原因,思考比较多,这一节主要说说解决方案,思考会少一些。解决方案的核心: 通过代理对象去调用方法1.把方法放到不同的类:如果想学习Ja…

python argparse_Python 命令行之旅:argparse、docopt、click 和 fire 总结篇

本文首发于HelloGitHub公众号,并发表于Prodesire 博客。一、前言在近半年的 Python 命令行旅程中,我们依次学习了 argparse、docopt、click 和 fire 库的特点和用法,逐步了解到 Python 命令行库的设计哲学与演变。 本文作为本次旅程的终点&am…

阻塞式和非阻塞式udp传输_NIO非阻塞网络编程三大核心理念

本次开始NIO网络编程,之前已经说过BIO,对于阻塞IO里面的问题一定有了清晰的认识,在JDK1.4版本后,提供了新的JAVA IO操作非阻塞API,用意替换JAVA IO 和JAVA NetWorking相关的API。NIO其实有个名称叫new IO。(一)NIO① 介…