速读原著-TCP/IP(长肥管道)

2024-01-23 06:40
文章标签 ip 管道 tcp 速读 原著 长肥

本文主要是介绍速读原著-TCP/IP(长肥管道),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第24章 TCP的未来和性能

24.3 长肥管道

在2 0 . 7节,我们把一个连接的容量表示为

c a p a c i t y (b) = b a n d w i d t h (b/s) × ro u n d-t r i p t i m e ( s )

并称之为带宽时延乘积。也可称它为两端的管道大小。当这个乘积变得越来越大时, T C P的某些局限性就会暴露出来。图 2 4 - 5显示了多种类型的网络的某些数值。
在这里插入图片描述
可以看到带宽时延乘积的单位是字节,这是因为我们用这个单位来测量每一端的缓存大小和窗口大小。

具有大的带宽时延乘积的网络被称为长肥网络( Long Fat Network,即L F N,发音为“e l e f a n ( t ) s”),而一个运行在 L F N上的T C P连接被称为长肥管道。回顾图 2 0 - 11和图2 0 - 1 2,管道可以被水平拉长(一个长的 RT T),或被垂直拉高(较高的带宽),或向两个方向拉伸。使用长肥管道会遇到多种问题。

  1. T C P首部中窗口大小为 16 bit,从而将窗口限制在 6 5 5 3 5个字节内。但是从图 2 4 - 5的最后一列可以看到,现有的网络需要一个更大的窗口来提供最大的吞吐量。在 2 4 . 4节介绍的窗口扩大选项可以解决这个问题。
  2. 在一个长肥网络 L F N内的分组丢失会使吞吐量急剧减少。如果只有一个报文段丢失,我们需要利用 2 1 . 7节介绍的快速重传和快速恢复算法来使管道避免耗尽。但是即使使用这些算法,在一个窗口内发生的多个分组丢失也会典型地使管道耗尽(如果管道耗尽了,慢启动会使它渐渐填满,但这个过程将需要经过多个 RT T)。 在RFC 1072 [Jacobson and Braden 1988]中建议使用有选择的确认( S A C K)来处理在一个窗口发生的多个分组丢失。但是这个功能在 RFC 1323中被忽略了,因为作者觉得在把它们纳入T C P之前需要先解决一些技术上的问题。
  3. 我们在第2 1 . 4节看到许多T C P实现对每个窗口的RT T仅进行一次测量。它们并不对每个报文段进行RT T测量。在一个长肥网络 L F N上需要更好的RT T测量机制。我们将在 2 4 . 5节介绍时间戳选项,它允许更多的报文段被计时,包括重传。
  4. T C P对每个字节数据使用一个32 bit无符号的序号来进行标识。如果在网络中有一个被延迟一段时间的报文段,它所在的连接已被释放,而一个新的连接在这两个主机之间又建立了,怎样才能防止这样的报文段再次出现呢?首先回想起I P首部中的T T L为每个I P段规定了一个生存时间的上限—2 5 5跳或2 5 5秒,看哪一个上限先达到。在1 8 . 6节我们定义了最大的报文段生存时间(M S L)作为一个实现的参数来阻止这种情况的发生。推荐的M S L的值为2分钟(给出一个2 4 0秒的2 M S L),但是我们在1 8 . 6节看到许多实现使用的M S L为3 0秒。

在长肥网络 L F N上,T C P的序号会碰到一个不同的问题。由于序号空间是有限的,在已经传输了4 294 967 296个字节以后序号会被重用。如果一个包含序号 N字节数据的报文段在网络上被迟延并在连接仍然有效时又出现,会发生什么情况呢?这仅仅是一个相同序号N在M S L期间是否被重用的问题,也就是说,网络是否足够快以至于在不到一个M S L的时候序号就发生了回绕。在一个以太网上要发送如此多的数据通常需要 6 0分钟左右,因此不会发生这种情况。但是在带宽增加时,这个时间将会减少:一个 T 3的电话线(45 Mb/s)在1 2分钟内会发生回绕,F D D I(100 Mb/s)为5分钟,而一个千兆比网络(1000 Mb/s)则为3 4秒。这时问题不再是带宽时延乘积,而在于带宽本身。在2 4 . 6节,我们将介绍一种对付这种情况的办法:使用 T C P的时间戳选项的 PAW S(Protection Against Wrapped Sequence numbers)算法(保护回绕的序号)。

4 . 4 B S D包含了我们将要在下面介绍的所有选项和算法:窗口扩大选项、时间戳选项和保护回绕的序号。许多供应商也正在开始支持这些选项。

千兆比网络
当网络的速率达到千兆比的时候,情况就会发生变化。 [Partridge 1994]详细介绍了千兆比网络。在这里我们看一下在时延和带宽之间的差别 [Kleinrock 1992]。

考虑通过美国发送一个 1 0 0万字节的文件的情况,假定时延为 30 ms。图2 4 - 6显示了两种情况:上图显示了使用一个 T 1电话线(1 544 000 b/s)的情况,而下图则是使用一个 1 Gb/s网络的情况。x轴显示的是时间,发送方在图的左侧,而接收方则在图的右侧, y轴为网络容量。

两幅图中的阴影区域表示发送的 1 0 0万字节。
在这里插入图片描述
图2 4 - 6显示了30 ms后这两个网络的状态。经过 30 ms(延时)以后数据的第1个比特都已到达对端。但对T 1网络而言,由于管道容量仅为 5 790字节,因此发送方仍然有 994 210个字节等待发送。而千兆比网络的容量则为 3 750 000字节,因此,整个文件仅使用了 2 5%左右的带宽,此时文件的最后一个比特已经到达第 1个字节后8 ms处。

经过T 1网络传输文件的总时间为5 . 2 11秒。如果增加更多的带宽,使用一个T 3网络(45 000 000 b/s),则总时间减少到0 . 2 0 8秒。增加约2 9倍的带宽可以将总时间减小到约2 5分之一。

使用千兆比网络传输文件的总时间为0 . 0 3 8秒:30 ms的时延加上8 ms的真正传输文件的时间。假定能够将带宽增加为 2000 Mb/s,我们只能够将总时间减小为 0.304 ms:同样30 ms的时延和4 m s的真正传输时间。现在使带宽加倍仅能够将时间减少约 1 0%。在千兆比速率下,时延限制占据了主要地位,而带宽不再成为限制。

时延主要是由光速引起的,而且不能够被减小(除非爱因斯坦是错误的)。当我们考虑到分组需要建立和终止一个连接时,这个固定时延起的作用就更糟糕了。千兆比网络会引起一些需要不同看待的连网观点。

这篇关于速读原著-TCP/IP(长肥管道)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_42528266/article/details/104812181
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/635533

相关文章

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地