如果TCP是面向连接的,为什么数据包遵循不同的路径?

Ass*_*ins 26 ip networking tcp packets

根据我的知识,如果必须设计互联网应用程序,我们应该使用面向连接的服务或无连接服务,但不能同时使用两者.

Internet的面向连接的服务是TCP,无连接服务是UDP,它们都驻留在Internet协议栈的传输层中.

Internet唯一的网络层是IP,这是一种无连接服务.所以它意味着我们设计的任何应用程序最终都使用IP来传输数据包.

面向连接的服务使用相同的路径来传输所有数据包,而无连接则不会.

因此我的问题是

如果设计了面向连接的应用程序,它应该使用相同的路径传输数据包.但IP通过使用不同的路由打破了规则.那么TCP和IP如何在这个意义上协同工作?这让我很困惑.

Fin*_*fin 37

你,我的朋友,混淆了两个不同层的功能.

TCP是连接导向的,在两端之间存在连接建立,它们可以协商不同的事情,如拥塞控制机制等.
传输层协议的一般目的是提供进程到进程的交付,这意味着它对路由一无所知; 您的数据包如何到达终端系统超出了它们的范围,它们只关注数据包如何在两个进程之间传输.

另一方面,IP用于因特网的网络层协议,涉及终端系统之间的数据传递,但它没有连接,它保持不连接,因此每个数据包都独立于其他数据包进行处理.
离开您的系统后,每个路由器将选择它认为适合EACH数据包的路径,并且此路径可能会根据可用性/拥塞情况而改变.

这如何回答你的问题?
TCP将确保数据包到达其他进程,它不会关心他们如何到达那里.
另一方面,IP根本不关心它们是否到达另一端,它只是根据它认为最适合特定数据包的内容转发每个不同的数据包.

注意:
我们假设IP是面向连接的,这是否意味着数据包将遵循相同的路径?不一定,它取决于此层的"连接"一词意味着什么,如果它意味着协商与安全相关的某些选项,例如,您可能仍然通过Internet通过不同的路由转发所有数据包.

编辑:
不要混淆你,网络层及以下的大多数面向连接的服务意味着连接在建立时还建立了所有"数据包"必须遵循的虚拟路径,以获取有关的更多信息:
虚拟电路帧中继网络

  • 请原谅我迟到的回复; 没有这种说法是误导性的概括.您需要意识到数据包路由是网络层而不是传输层的关注点,因此传输层的连接方向对数据包路由没有影响. (6认同)

sta*_*wer 5

此链接很好地回答了您的问题http://www.tcpipguide.com/free/t_ConnectionOrientedandConnectionlessProtocols-3.htm

有些人认为这(TCP)就像是更高网络层电路交换的“模拟”;这可能是一个有点可疑的类比。尽管可以使用 TCP 连接在设备之间来回发送数据,但所有这些数据确实仍然以数据包的形式发送;设备之间没有真正的电路。这意味着 TCP 必须处理分组交换通信的所有潜在缺陷,例如潜在的数据丢失或以不正确的顺序接收数据片段。

TCP 协议处理 IP 数据包无序到达或丢失的问题,让您感觉它们是通过单个 FIFO 通道到达的。是的,TCP 足够聪明,可以做到这一点,不需要专用的底层通道。