Linux

實際上是否可以在沒有任何套接字的情況下通過 tcp/ip 將一些數據發送到遠端目標?

  • September 14, 2021

我正在研究套接字概念。據我所知,套接字就像在通信設備(或程序)的兩端創建的電插座。Socket 可以讓自己永遠活著以監聽一些請求(這可能是任何伺服器程序的關鍵概念)。

但是,我好奇的心想知道是否可以在不創建任何套接字(文件描述符)的情況下在兩台電腦之間進行通信?

請幫忙詳細說明,我是這方面的新手。

先感謝您!

套接字只是一個標準化的程式介面。理論上可以直接在網卡上工作(像 DPDK 這樣的庫可以做到這一點),但是使用套接字 API 可以更容易並且獨立於特定的硬體和網路設置。

要接收任何具有 NIC 卡的電腦的數據包,只需要第 2 層 Mac 目標地址。因此Is it actually possible to send some data to remote destination over tcp/ip without any socket?

$$ Answer $$是的,發送帶有目標 MAC 地址作為所需電腦 MAC 地址的數據包。數據包將在 NIC 上接收而不會丟棄。如果遠端目標是同一個 LAN 或者可以通過 VLAN 組或連接的點對點連接,則這是正確的。 注意:如果問題是Is it actually possible to send some data to remote destination (not in the same LAN network) over tcp/ip without any socket?

$$ Answer $$不,如果目標(遠端目標)不在您的網路中,您無法僅使用 MAC 地址和/或 VLAN 訪問目標電腦。 有2個選項

  1. 如果機器通過 MPLS、VxLAN、PPoP 等第 2 層隧道連接,則可以封裝原始數據包(乙太網 MAC + 有效負載)
  2. 您可以使用IP或IP封裝,其中路由器將辨識IP地址到MAC轉換並通過右側轉發使其到達目的地。

注意:DPDK、PF_RING、Netmap、XDP 是繞過核心棧的機制。使用核心繞過,您可以從 NIC 接收或傳輸數據包。但這將取決於網路交換機或路由器將在網路中發送或轉發數據包的 L2/L3 的實際值

引用自:https://serverfault.com/questions/1006650