我知道TCP和UDP都是建立在IP之上的,我知道TCP和UDP之间的区别,但是我对“原始ip”到底是什么感到困惑。可以说TCP和UDP都实现IP,但是IP本身不能传输数据吗?还是IP是一种非常底层的通信形式,可以通过TCP和UDP进一步抽象化?

评论

为了进一步说明下面的一些评论(仅仅为了清楚起见,还不足以提供完整的答案):IP是一种传输数据的协议。 TCP或UDP也是传输数据的协议。 TCP和UDP通常位于IP之上,因此IP的数据有效载荷可以是TCP或UDP。以太网通常用于承载IP。因此,例如,以太网帧可以承载IP数据包作为其数据有效载荷,而该IP数据包可以承载TCP分段作为其有效载荷,依此类推。您最终会获得像goo.gl/1uEYtC这样的协议栈

IP当然可以传输数据-例如,它携带那些TCP / UDP数据包。但是,它通常不是应用程序可用的。 UDP是基于IP的非常原始的协议,但是它已经添加了端口号,从而允许多个服务同时处理系统上的UDP流量。否则,您将只能获得与IP地址一样多的服务。

#1 楼

IP是第3层协议。 TCP / UDP是第4层协议。它们各自有不同的用途。

第3层负责端到端交付。它唯一的功能是向数据包添加任何必需的东西,以将数据包从一个主机发送到另一主机。

第4层负责服务到服务的交付。它的唯一功能是隔离数据流。您的计算机可以运行多个程序,每个程序都可以在线路上发送/接收位。 IE:您可能有多个浏览器选项卡运行,流式传输互联网广播,运行下载,运行某些合法种子,使用聊天应用程序等。所有这些都从网络接收1和0,第4层将每个数据流隔离到需要它们的独特应用程序。这是一个示例:



IP无法将数据包传递到正确的服务/应用程序。 TCP / UDP无法将数据包从Internet的一端传递到另一端。

TCP和IP共同工作,使它们都可以实现Internet通信的“最终目标”。取决于OSI模型的上层。

此数据向下传递到L4,L4将添加从服务到服务传递数据所需的信息,例如带有源端口和目标端口的TCP标头。现在将数据和L4标头称为段。

,然后将该段传递到L3,这将添加从头到尾传递段所需的信息,例如带有源源IP地址。现在可以将L3标头和段称为数据包。此过程称为封装和解封装(有时也称为解封装)。以下是其工作原理的动画:



如果这没有道理,我建议您阅读有关OSI模型的更多信息,以及每个层如何承担不同的职责,以共同完成在互联网上移动数据包的职责。

评论


请注意,Internet仅宽松地遵循OSI模型。

–user253751
16年2月16日在2:33

在IP标头中通常是不正确的TCP或UDP标头,TCP / UDP标头不在IP标头中,而是在IP数据包的数据部分中。

– Eborbob
16年2月16日在10:50

“它的唯一功能是隔离数据流”,而这对于UDP来说大多是正确的(也有一个校验和,但对),对于TCP肯定不是正确的。

– Peter Green
16年2月16日在17:57

@immibis是的,但是我还没有看到遵循OSI模型在哪些方面导致令人毛骨悚然的实现或理解琐事。在大多数情况下,尤其是对于刚接触Internet技术的人而言,继续沿着OSI模型的约束进行思考更有价值。

–艾迪
16年2月16日在18:25

@Eborbob我可以看到它的错误,具体取决于如何看这句话。老实说,整个段落都可以使用一个改写,今晚晚些时候我会尝试使用它。感谢您指出。

–艾迪
16-2-16在18:26



#2 楼

IP可以很好地传输数据,问题是当数据到达另一端时会发生什么。唯一的标识信息是主机的IP地址和协议号。两者都不提供区分数据所用套接字的任何方法。哪个套接字发送数据会引起安全性和性能问题(内核必须将给定协议号的数据发送到所有原始套接字)。因此,打开“原始套接字”的能力通常仅限于root用户(或您的平台的等效用户)。

UDP是IP上相当小的层。它添加端口号以标识数据用于哪个套接字以及校验和(拒绝损坏的数据包)。该应用程序仍然负责处理丢失的数据包,控制拥塞并将数据拆分为适当大小的数据包。

TCP是一种更为复杂的协议,除了提供端口号和校验和,还将字节流拆分为数据包,然后在目的地重新组装,并提供拥塞控制和恢复功能。

#3 楼

IP是OSI第3层协议,而TCP和UDP是OSI第4层协议。作为第3层协议,IP可以承载许多不同的第4层协议。 TCP和UDP可能是最常见的,但不是唯一的。第4层协议是应用程序用作其端到端连接的协议。 IP在网络之间(主机到主机)传输第4层协议。第2层协议(如以太网)在LAN上传输第3层协议。匹配。