TCP 是网络协议集中的核心协议。它将底层 IP 协议提供的不可靠数据包传输服务变为一种可靠的数据流协议。它无疑是计算机网络进化历程中最伟大的变革。
TCP 出现之前,计算机网络协议期望计算机可以通过网络得到一种无损可靠的服务,并一直致力于对它的研究。DECnet 的 DDCMP 就是一种无损的数据连接控制协议。X.25 是 telsaur world 为连接到的电脑所提供的一种可靠的流式协议。我还记得在 Ethernet 问世之初因它缺乏可靠的确认机制而受人指责。是 TCP 的出现改变了这一切。TCP 将所有提供可靠数据传输的功能从底层网络转移到 TCP 会话两端的电脑的共享状态中。TCP 体现了网络架构的端到端原则,即将可以由会话终端提供的功能放在底层网络中并没什么好处。TCP 需要的是一种更加简单的网络服务,在这种网络上数据包可以无序传输或丢弃,但 TCP 协议能够检测到并修复这些问题,以保证传送到终端程序的比特流与传入 TCP socket 的原始数据完全相同。
TCP 协议到现在已经有40年历史了,但这并不意味着它将在近些年被冻结。
TCP 不仅是一中可靠的数据传送流协议,而且一种采用自适应速率控制的协议。TCP 可以以一种允许协议将尽可能多的数据通过网络的模式工作。一个常见的运作模式是:一个单独的 TCP 会话会不断探索最高的可传输数据率,通过分析丢包来降低发送速率并重复探索。TCP 的这方面的是一个不断被研究的领域,在流动控制领域已经做了许多的工作,目前有许多不同的 TCP 尝试来优化各种网络环境下的流量。
其他的工作瞄准在 TCP 的数据确认上,尝试在各种各样的条件下提高算法效率。SACK 允许接收端发送回更多的信息来响应发送端的丢失。FACK 指示在慢启动时数据丢失的问题。
提高数据传输路径也是一种尝试方法,相比同时打开多个 TCP 会话,这种方式将数据分成多个部分,然后每个会话发送其中的部分。有效开放多个并行的 TCP 会话。一个 TCP 的变体,MulTCP,在一个 TCP 会话模拟多个并行的 TCP 会话的行为。这些行为为并行的 TCP 会话假设相同的端点几相同的端到端网络路径。一个使用多个并行会话的 TCP 进化,但试图通过网络以多种路径传输这些会话,这就是多路径 TCP。
多路径 TC P有过一个短暂的曝光,据透露,苹果 iOS 7为其 Siri 应用包含一个多径TCP的实现,但它有可能在移动互联网中发挥更大的作用。在这篇文章中我将更详细地探讨这个 TCP 选项,看它是如何工作,看它如何在今天的移动网络中发挥作用。
首先我们要回到一个基本的网络概念,即寻址和地址。IP 协议里的地址与 1970 年和 1980 年通常使用的其他计算机通信协议有细微的不同。当时许多其他协议将其所使用的通信协议层地址作为主机地址,IP 协议小心的选择联想到了连接到网络接口的 IP 地址。这是在大多数情况下这是一个相对不重要的区别,当时的计算机通常只有一个单一的网络接口。但当计算机有两个或两个以上的接口连接到两个或两个以上的网络时,这却是一个重要的区别。一台 IP 主机有两个网络接口有两个 IP 协议地址,一个接口一个。在 IP 协议里它是设备间的接口,在网络里它是通信的地址端点。IP 主机会接受网络接口中接收到数据包中与自己 IP 地址匹配的包,而发送数据包时,发送数据包的源地址是其用于把数据包从主机发送到网络接口的IP地址。
这个模型的网络寻址尽可能的简单,但也存在一些操作上的问题。这种寻址的一个含义是:当一个主机有多个接口,使用 TCP 协议的应用层会话有一定“粘性”。比如,当一个网络接口已经开启一个 TCP 会话时,主机网络栈不能立马地迁移到另一个接口,因为这个会话正保持活动状态。试图通过“结束”的一个 TCP 会话而更改会话对端为另一个IP地址通常不会在原会话对端被承认。因此多接口和多个地址不会增加 TCP 连接的额外弹性。
只是简单地给每个网络接口配置唯一的 IP 地址并不满足所有应用场景的需求,而且没过多久就有了“辅助地址”了。给一台主机赋予多个地址的一种方法就是给一个网络接口配置多个 IP 地址。传输层可以给流出的数据包指定源 IP 地址,这样就不会采取默认的动作,即源 IP 地址为流出数据包所在接口的主地址。辅助地址有自己适用的场合,特别是你试图在单一平台上实现多个应用时尤其如此,不过,在 IPV4 环境下,辅助地址是针对特定需求而提出的特定解决方案,而不是通用方案。
使用 TCP 的应用还与初始化 TCP 握手时所采用的 IP 地址“紧密关联”,因此会话不可能在同一接口上的辅助地址间相互转换。
IPv6的寻址方式稍有不同。IPv6协议从诞生那一刻起就允许对单个接口指定多个IPv6单播地址,而且没有主次之分。IPv6协议还引入了“地址适用范围”这一理念,这样可以确保一个地址要么在本地连接网络中是唯一的,要么是一个全局地址。基于隐私方面的考虑还引入了永久地址和临时地址,为了支持移动性还引入了“最终地址”和“转发地址”。
IPv6从某种程度来说只是对原来IPv4地址模型作了表面上的修改。如果一个IPv6主机有多个接口,那么每个接口都拥有一组IPv6地址。而且如果TCP会话在一对地址上启动后,那么在这个TCP会话期间,TCP就无法转换到另一对地址上。在一个网络接口上启动的TCP会话与这一网络接口紧密相关,不管这个接口配置的IPv4地址还是IPv6地址都是如此。
随着移动互联网的引入,互联网已经发生了显著的变化,多路径的讨论主题也转移成了许多移动相关的问题。移动设备上附着着许多 IP 地址。蜂窝无线接口上也有 IP 地址集。这些“智能”设备中许多也有 WiFi 接口,也有可能有 IPv4 和 IPv6 地址。还可能会有具有 IP 地址的蓝牙接口,兴许还有一些 USB 的网络接口。当启用时每一个网络接口都需要其本地 IP 地址。我们现在所处的互联网中设备具有多个可用 IP 地址是相对较为普遍的。但我们如何利用这些地址呢?
在大多数情况下使用多地址是不值当的。常见的习惯是每一个新的会话是针对特定接口的,给会话的出站地址是通过本地策略决定的。但是,当我们开始考虑应用绑定的位置和标识时是非常多变的,网络连接是瞬态的,连接的成本和容量是不同的,因而现今通常的情况是这样的,移动蜂窝无线电服务和 WIFI 漫游服务会话,拥有一定数量的敏捷性跨网络转换是一个重要的因素。
如果一个端到端的会话能使用多地址,而且以此推理也能使用到多接口。那么应用就可以在移动数据链路和WiFi之间进行无缝数据传输,或者可以同时利用两链路进行传输。假如接口的 IPv4 地址和 IPv6 地址是等同地位的,那么在两种协议之间进行无缝地数据传输也是可实现的。至于在某个时刻使用哪种传输服务不再由移动运营商或者 WiFi 运营者,或者设备,或者运行的操作系统决定。如果应用能够使用到多地址,多协议和多接口,那么应用自身就可以根据各个连接是关闭还是可用状态来决定怎样选择连接才能最好的满足自身需求。同时,由于已分配到频谱的传统的移动运营商和未分配到频谱的WiFi运营商之间就获取未分配频谱的争论将会不断升温,自然“WiFi 传输“到底是由设备还是应用来实现就会随着事态的发展而变化。最终会改变传输功能的控制者。多地址 TCP 和多路径 TCP 是对这种争论的一种备受关注的响应:让应用自身来决定多连接环境下该如何选择。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务