我知道TCP和UDP都是建立在IP之上的,并且我知道TCP和UDP之间的区别,但是我对“原始ip”到底是什么感到困惑。可以公平地说TCP和UDP都实现IP,但是IP本身不能传输数据吗?还是IP是一种非常底层的通信形式,可以通过TCP和UDP进一步抽象化?
我知道TCP和UDP都是建立在IP之上的,并且我知道TCP和UDP之间的区别,但是我对“原始ip”到底是什么感到困惑。可以公平地说TCP和UDP都实现IP,但是IP本身不能传输数据吗?还是IP是一种非常底层的通信形式,可以通过TCP和UDP进一步抽象化?
Answers:
IP是第3层协议。TCP / UDP是第4层协议。它们各自具有不同的目的。
第三层负责端到端交付。它唯一的功能是向数据包添加任何必需的内容,以将数据包从一台主机发送到另一台主机。
第4层负责服务到服务的交付。它的唯一功能是隔离数据流。您的计算机可以运行多个程序,每个程序都可以在线路上发送/接收位。IE:您可能有多个浏览器选项卡运行,流式传输互联网广播,运行下载,运行某些合法种子,使用聊天应用程序等。所有这些都从网络接收1和0,第4层将每个数据流隔离到需要它们的独特应用程序。这是一个例子:
IP无法将数据包传递到正确的服务/应用程序。TCP / UDP无法将数据包从Internet的一端传递到另一端。
TCP和IP共同工作,使它们都能实现Internet通信的“最终目标”。
OSI模型的上层生成需要从一台主机传输到另一台主机的数据。
此数据向下传递到L4,L4将添加从服务到服务之间传递数据所需的信息,例如带有源端口和目标端口的TCP标头。现在将数据和L4标头称为段。
然后,该段将被传递到L3,L3将添加从头到尾传递该段所必需的信息,例如带有Source和Destination IP地址的IP标头。现在可以将L3标头和分段称为数据包。
此过程称为封装和解封装(或有时称为解封装)。这是其工作原理的动画:
如果这没有道理,我建议您阅读有关OSI模型的更多信息,以及每一层如何承担不同的职责,以共同完成在Internet上移动数据包的工作。
inside an IP header is usually a TCP or UDP header
是不正确的,TCP / UDP标头不在IP标头之内,而是在IP数据包的数据部分之内。
IP可以很好地传输数据,问题是当数据到达另一端时会发生什么。唯一的标识信息是主机的IP地址和协议号。两者均未提供任何方法来区分数据用于哪个套接字。
程序可能会通过所谓的“原始套接字”直接使用IP,但是缺少一种适当的机制来决定向哪个套接字发送数据以提高安全性和性能(内核必须将数据发送到所有原始套接字)给定的协议号)。因此,打开“原始套接字”的能力通常仅限于root用户(或您的平台的对等用户)。
UDP是IP上相当小的层。它添加了端口号以标识数据用于哪个套接字以及校验和(拒绝损坏的数据包)。该应用程序仍然负责处理丢失的数据包,控制拥塞并将数据拆分为适当大小的数据包。
TCP是一种更为复杂的协议,除了提供端口号和校验和之外,它还将字节流拆分为数据包,然后在其目的地进行重组,并提供拥塞控制和恢复功能。