原始 IP 通信?

网络工程 ipv4 ip 通讯协议 协议理论 传输协议
2021-07-30 23:34:33

我正在研究协议 IP 和 TCP 之间的区别。据说 IP 提供不可靠的数据报服务,而 TCP 提供可靠的字节流服务。此外,TCP 在 IP 之上工作。所以我的问题是,协议 IP 可以单独用于发送数据包(不通过 TCP 协议)吗?

4个回答

[总结问题]

我可以在没有传输层的情况下与原始 IP 数据报通信吗?

简短的回答

对,但是:

  1. 这是构建应用程序的一种非常奇怪的方式(您必须告诉您的操作系统 NIC 驱动程序将使用 [IP 协议编号] 的数据包发送到其正确的内核驱动程序,使您的出口数据避免与现有 IP 协议编号发生冲突,并排队所有其他数据包直接发送到您的应用程序缓冲区)。
  2. 除了阅读这句话所花费的时间之外,您不应该费心考虑这个想法。

更长的答案

也许你想知道为什么...

  • 这个答案假设所有应用程序都与 IPv4 通信;我们将忽略 IPv6(使用类似的动态)并忽略原始以太网协议。
  • IP数据到达端点地址后,您需要知道将其交付给哪个应用程序这意味着大多数人想要的不仅仅是“一个 IP 地址”来识别应用程序。为什么大家?如果你只使用你的 IP 地址来识别应用程序,你必须过滤掉大量“正常”的应用程序流量,这些流量也恰好使用了你的应用程序 ID,比如 DNS、ssh、ping 等......你为什么要构建你的应用程序?通道中有这么多噪音的应用程序?

TCP 和 UDP 等传输协议使用端口号在单个地址上复用应用程序;有时人们会使用IP 协议编号 (但 IP 协议标头只有 8 位宽)。但是,在所有情况下,您都必须在 IP 协议字段中添加一些内容(即使您的主机会按照您的建议忽略该字段)。

大多数 IP 协议都在一个非常小的领域中浪费了空间

关于IP 协议编号列表的另一个有趣的事情是:至少 50% 的具有专用 8 位IP 协议编号协议是互联网的考古遗迹(阅读:浪费的协议编号)。

反问:您最后一次听说有人使用网络语音协议(IP 协议 11)主机监控协议(IP 协议 20)是什么时候?没有人这样做,他们使用SIP进行语音(TCP 和 UDP)或 ping (ICMP) 进行主机监控。

常用IP协议列表

我能想到的几乎每个应用程序都使用以下 IPv4 协议之一(按照人们在网上看到的粗略频率顺序):

  • TCP(IP 协议 6)
  • UDP(IP 协议 17)
  • ICMP(IP 协议 1)
  • OSPF(IP 协议 89)
  • EIGRP(IP 协议 88)
  • GRE(IP 协议 47)
  • ESP(IP 协议 50)
  • AH(IP 协议 51)
  • PIM(IP 协议 103)
  • IGMP(IP协议2)
  • VRRP(IP 协议 112)
  • SCTP(IP 协议 132)

就是这样……统计上,其他所有 IP 协议都在噪音中排名……如果这还不够明显,这些协议中的每一个都至少执行 IP传输协议的功能之一这只是简单地强调一个事实:尽管“你可以建立内生的IP负载你自己的协议,如果你想要的。很少人应该想”这样做会将您的 IP 地址专用于单个应用程序,并且可能会以多种方式“重新发明轮子”。

总结:大多数人应该使用TCP(因为它有先进的错误恢复、数据确认、MSS协商和流量控制)。少数应该使用 UDP 或 SCTP。其余的将使用以太网类型或 IP 协议复用他们的协议。任何人都不应仅使用主机 IP 地址来识别他们的应用程序。

我认为这里的一些网络基础知识有点混乱:首先你说“TCP 在 IP 之上工作”,这是正确的,然后你问 IP 是否有可能发送数据包“而不通过通过 TCP 协议”。

由于 IP 在比 TCP 更低的 OSI 层上工作(IP 是第 3 级协议,而 TCP 是第 4 级协议),因此 IP 封装的是 TCP 数据,反之亦然。每个 OSI 层(以及 TCP/IP 层)都为其上层提供服务,并将数据发送到其下层。

所以是的,IP 可以不使用 TCP 发送数据,它是 TCP 数据无法避免通过 IP 层。

请注意,可能会使用另一种级别 3 协议,IP 恰好是使用最广泛的协议。

TCP 实际上并不发送数据包。它使用分段,分段是由 IP 在数据包中在主机之间发送的有序消息。

IP 是数据(TCP、UDP 或其他)如何将其从一台主机传输到另一台主机......它是转发。TCP 指定这些主机如何通过基于数据包的网络层实现可靠的连接,没有交付保证,具有排序、窗口和重传。

这听起来可能很奇怪,但是一旦您习惯了“TCP 数据包”是“IP 数据包中携带的 TCP 段”的简写,而“UDP 数据包”是“IP 数据包中的 UDP 数据报”的简写这一想法,它就会变得不那么令人困惑。

TCP 和 IP 在 OSI 模型中处于不同的层次;TCP 是第 4 层协议,传输层,而 IP 是第 3 层,一种网络协议。

模型中的每一层都执行特定的功能,因此快速描述每一层可能会有所帮助:

第 3 层(网络)- 定义将可变长度数据序列从网络上的一个节点传输到另一个节点的功能和过程。基本上,这一层只是将提供给它的数据从更高层发送到目的地,这里没有可靠性。在这一层进行寻址和路由。示例协议:IPv4、IPv6、IPsec、AppleTalk。

第 4 层(传输)- OSI 将这一层定义为定义功能和程序的协议,用于将可变长度数据序列从网络上的一个节点传输到另一个节点,同时保持服务质量功能。这一层是关于将数据尽可能可靠地传送到远端,TCP 提供传输保证和流量控制,例如 UDP 则没有。示例协议:TCP、UDP、L2TP。

因此,让我们看一下 IP 数据包标头(来自RFC 791):

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

注意头的第三行有一个协议部分,这里的数据包描述了数据包中包含的第 4 层协议,一些可能的例子是(完整列表):

  Decimal     Protocol Name       
  -------     ---------------- 
       1       ICMP
       6       TCP 
      17       UDP
      88       EIGRP
      89       OSPFIGP

总而言之,是的,您可以在不使用 TCP 的情况下发送数据。:)