networking - 为什么说TCP/IP族中的IP协议(protocol)是无连接的呢?

标签 networking network-programming tcp

IP为什么叫无连接协议(protocol)?如果是,那么什么是面向连接的协议(protocol)?

谢谢。

更新 - 1 - 20:21 2010/12/26

我认为,为了更好地回答我的问题,最好从物理上和逻辑上解释“连接”的实际含义。

更新 - 2 - 2013 年 2 月 1 日上午 9:59

根据下面的所有回答,我觉得这里所说的“联系”应该被视为一组行动/安排/纪律。因此它更像是一个抽象的概念,而不是一个具体的对象。

更新 - 2015 年 6 月 18 日 3 - 11:35

这是一个更物理的解释:

  • IP 协议(protocol)是无连接的,因为 IP 网络中的所有数据包都是独立路由的,它们不一定经过相同的路由,而在面向连接的虚电路网络中,所有数据包都经过相同的路由。这条单一路线就是“虚拟电路”的意思。

  • 有了连接,因为只有1条路由,所以所有的数据包都会按照发送的顺序到达。

  • 没有连接,不保证所有数据包都能到达 按照发送顺序相同。

更新 - 2016/1/20/周三 4 - 9:55

面向连接的特征之一是保留了数据包顺序。 TCP 使用序列号来实现,但 IP 没有这样的设施。因此,TCP 是面向连接的,而 IP 是无连接的。

最佳答案

基本思想非常简单:使用 IP(就其本身而言——没有 TCP、UDP 等),您只需发送一个数据包。您只需将一些带有目标地址的数据发送到网络上,仅此而已。 IP 本身提供:

  1. 不保证一定会送达
  2. 没办法知道是不是
  3. 没有让目的地知道等待数据包的东西
  4. 很多其他的

它所做的只是指定一个最小的数据包格式,这样您就可以从一个点到另一个点获取一些数据(例如,路由器知道数据包格式,因此它们可以查看目的地并在下一跳发送数据包)。

TCP 是面向连接的。建立连接意味着在 TCP 对话开始时,它会进行“三次握手”,因此(特别是)目标知道与源的连接已经建立。它在内部跟踪该地址,因此它可以/将/确实期望来自它的更多数据包,并且能够发送回复以(例如)确认它收到的每个数据包。源端和目标端还合作为确认方案对所有数据包进行序列号,因此每一端都知道它发送的数据包是否在另一端收到。这在物理上并不涉及太多,但逻辑上它涉及在两端分配一些内存。这包括用于元数据的内存,例如要使用的下一个数据包序列号,以及用于可能重新传输的有效负载数据,直到另一方确认收到该数据包。

关于networking - 为什么说TCP/IP族中的IP协议(protocol)是无连接的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4533686/

相关文章:

delphi - 如何监控/限制我的应用程序使用的网络流量?

networking - 如何使用 UdpSocket 通过特定网络接口(interface)发送?

java - 我无法从其他设备连接到 Flask 服务器(=不是来自本地主机)

c - 每个 udp 数据包有多个或单个请求?

networking - 为什么我的计算机与服务器通过不同端口3次进行3次握手-Wireshark?

c++ - 用于TCP/IP和网络编程的C/C++/C#教科书或教程(多平台)

node.js - 我应该发送多少个并发 http 请求?

tcp - 通过互联网同步时钟

c# - 在 C# 中使用原始套接字

c++ - 如何从服务器的源代码中提取网络协议(protocol)?