如果 TCP 是面向连接的,为啥数据包遵循不同的路径?
Posted
技术标签:
【中文标题】如果 TCP 是面向连接的,为啥数据包遵循不同的路径?【英文标题】:If TCP is connection oriented why do packets follow different paths?如果 TCP 是面向连接的,为什么数据包遵循不同的路径? 【发布时间】:2013-03-14 03:24:52 【问题描述】:据我所知,如果必须设计互联网应用程序,我们应该使用面向连接的服务或无连接的服务,但不能同时使用。
Internet 面向连接的服务是 TCP,无连接服务是 UDP,两者都驻留在 Internet 协议栈的传输层。
Internet 的唯一网络层是 IP,它是一种无连接服务。所以这意味着我们设计的任何应用程序最终都会使用 IP 来传输数据包。
面向连接的服务使用相同的路径来传输所有的数据包,而无连接的服务则不然。
所以我的问题是
如果设计了面向连接的应用程序,它应该使用相同的路径传输数据包。但是IP通过使用不同的路由打破了这个规则。那么从这个意义上说,TCP和IP是如何协同工作的呢?这完全让我感到困惑。
【问题讨论】:
"面向连接的服务使用相同的路径来传输所有的数据包。"不,他们没有。你只是编造的。 如果您每天寄一封信到同一个地址,超过 100 天,很有可能会收到 100 封信。你的意思是,仅仅因为你总是使用同一个邮箱投递,而且信件都到达同一个目的地,所以每封信都使用相同的邮递员、货车、卡车等。 【参考方案1】:正确参考我的短点,
1) 面向连接的意思是 ==> 保留资源(缓冲区、cpu、带宽等)..但是“在哪里??”。(在哪里保留资源??这就是原因你的困惑,所以下面是答案。)。
2) 面向传输层的连接意味着 ==> 保留两端进程/端口的资源。(由于 TCP 是传输层,那么它的职责是保留两端的资源仅处理过程,与中间路径中发生的情况无关。)
3) 面向网络层的连接意味着 ==> 在网络层保留资源。(现在,在数据包从源到目的地的整个过程中,在所有中间路由器都可以找到网络层也是(但不是传输层)。因此,如果网络层的任何协议都是面向连接的,那么它的责任就是在所有中间路由器上预留资源,即所有数据包都必须遵循相同的中间路径,但 IP 连接较少,因此是中间的资源不会被保留。即数据包的旅程可能会遵循不同的路径等)
#CONCLUSION:==> 中间路径是由网络层决定的,因此如果IP,那么路径可能不同。(IP可能包含TCP),但TCP负责两端的资源预留进程,与数据包的中间路径无关。
【讨论】:
【参考方案2】:路由器仅在三层(物理层、数据链路层和网络层)上工作,因此路由器将仅根据信息做出决定。网络层(IP 协议),因此在路由器上没有关于其 TCP 或 UDP 的信息
【讨论】:
【参考方案3】:这个链接很好地回答了你的问题http://www.tcpipguide.com/free/t_ConnectionOrientedandConnectionlessProtocols-3.htm
有些人认为这(TCP)就像在更高网络层的电路交换的“模拟”;这可能是一个有点可疑的类比。尽管可以使用 TCP 连接在设备之间来回发送数据,但所有这些数据确实仍以数据包的形式发送;设备之间没有真正的电路。这意味着 TCP 必须处理分组交换通信的所有潜在缺陷,例如数据丢失或以错误顺序接收数据片段的可能性。
TCP 协议处理 IP 数据包无序到达或丢失的问题,让您感觉它们是通过单个 FIFO 通道到达的。是的,TCP 很聪明,可以做到这一点,不需要专用的底层通道。
【讨论】:
我必须保证这是我正在寻找的答案。【参考方案4】:你,我的朋友,混淆了两个不同层的功能。
从某种意义上说,TCP 是面向连接的,即在两端之间建立连接,它们可以协商不同的事情,例如拥塞控制机制等。 传输层协议的一般目的是提供进程到进程的传递,这意味着它对路由一无所知;你的数据包如何到达终端系统超出了他们的范围,他们只关心数据包是如何在两个终端进程之间传输的。
另一方面,IP 是 Internet 的网络层协议,它关注终端系统之间的数据传递,但它是无连接的,它不维护任何连接,因此每个数据包都独立于其他数据包进行处理。 离开您的系统后,每个路由器都会选择它认为适合每个数据包的路径,并且该路径可能会根据可用性/拥塞情况而改变。
这如何回答您的问题? TCP 将确保数据包到达另一个进程,它不会关心它们是如何到达那里的。 另一方面,IP 根本不会关心它们是否到达另一端,它只会根据它认为最适合特定数据包的内容转发每个不同的数据包。
注意: 让我们假设 IP 是面向连接的,这是否意味着数据包将遵循相同的路径? 不一定,这取决于这一层的“连接”一词的含义,如果它意味着协商与安全相关的某些选项,例如,您可能仍然通过 Internet 上的不同路由转发所有数据包。编辑: 不过不要让您感到困惑,网络层及以下的大多数面向连接的服务意味着连接在建立时也会建立所有“数据包”必须遵循的虚拟路径,有关更多信息,请阅读:@ 987654321@和frame-relay networks
【讨论】:
"TCP 将确保数据包到达另一个进程,它不会关心它们是如何到达那里的。"但是面向连接的服务被定义为所有数据包都将遵循相同的路由,对吗?那部分仍然让我感到困惑 抱歉回复有点晚了;不,这种说法是一种误导性的概括。您需要意识到数据包路由是网络层而不是传输层关注的问题,因此传输层的连接方向对数据包路由没有影响。【参考方案5】:TCP 协议由发送/接收机器实现,一旦数据包离开发送机器,它们所经过的路由器对 TCP 一无所知,它们只是使用 IP 将数据包从源端获取到目的地。然后,目标机器的工作就是使用 TCP 确保所有数据包都到达并且它们以正确的顺序到达。互联网本身对 TCP 一无所知,它只是一个层(通常是软件),用于连接无连接介质(互联网)。
因此,一旦数据包离开目的地,它可以(大部分)沿着任何路径到达目的地,而不管更高级别的协议(例如 TCP 或 UDP)。
我的意思是,它有点复杂,但据我所知,这是一般的想法。
【讨论】:
好吧,那我们为什么说面向连接的服务通过相同的路径发送数据包,而事实并非如此。 @Fazian 我们不这么说。你是唯一这么说的人。你编的。我们无法向您解释您为什么这样做。以上是关于如果 TCP 是面向连接的,为啥数据包遵循不同的路径?的主要内容,如果未能解决你的问题,请参考以下文章