題 港口的目的是什麼?


我有幾個問題 以下是我發現的端口說明

Application層通過端口與Transport層對話。       端口已編號,標準應用程序始終使用相同的端口。

使用端口號允許傳輸協議(通常是TCP)       知道數據包裡面有哪種內容,讓它知道,在       接收方,它應該向哪個應用程序協議提供接收的數據。

  • 為什麼在沒有絕對保證的情況下,是否會使用端口號來說明哪種應用程序數據協議存在? 

    根據我的理解,您通過端口發送的應用程序數據沒有限制(這只是一個建議)。另外,為此目的,數據包中是否已包含協議數據?

  • 此外,如果您將HTTP或其他類型的協議發送到端口25的目標(預期SMTP),數據會發生什麼?

  • 第三,如果您將數據發送到未與任何程序綁定的端口,因此未被監聽,會發生什麼?

  • **最後,如果一個端口只能綁定到一個程序,那麼依賴於傳入HTTP數據的多個程序如何同時在我的計算機上運行?****

提前致謝!


4
2018-01-22 02:06


起源




答案:


為什麼在沒有絕對保證的情況下,是否會使用端口號來說明哪種應用程序數據協議存在?

因為猜測是運行事物的一種可怕方式,所以你無法阻止,例如,有人惡意發送錯誤的東西。所以,它有助於在每個人都玩得很好的情況下,並且不會讓事情變得更糟。

根據我的理解,您通過端口發送的應用程序數據沒有限制(這只是一個建議)。

正確。事實上,它甚至不是一個建議,只是一個很多人碰巧分享的協議。

另外,為此目的,數據包中是否已包含協議數據?

不。至少,不是在端口通常指示的級別:您知道正在發送什麼類型的更高級別的IP協議(例如:TCP,UDP),但不知道其內容是什麼(例如:HTTP,SMTP) 。

此外,如果您將HTTP或其他類型的協議發送到端口25的目標(預期SMTP),數據會發生什麼?

TCP只是將數據傳遞給應用程序層,應用程序層可以對它做任何想做的事情。大多數時候,你只是得到錯誤。有時你會得到可利用的安全漏洞。

有時,對於不正確的客戶端,您會獲得良好的行為,例如,當您不對端口使用SSL時,某些HTTPS服務器將提供的純文本HTTP錯誤。

第三,如果您將數據發送到未與任何程序綁定的端口,因此未被監聽,會發生什麼?

您從接收系統收到ICMP錯誤消息。從技術上講,接收器可以做任何令人滿意的事情,但在實踐中,就是這樣。

最後,如果端口只能綁定到單個程序,那麼依賴於傳入HTTP數據的多個程序如何同時在我的計算機上運行?

當您的瀏覽器與遠程服務器建立HTTP連接時,它使用隨機本地端口,並與遠程服務器上的眾所周知的端口(80或443)進行通信。在這種情況下,每個不同的出站連接都是唯一的。 (雖然從技術上講,它不一定是服務器機箱。)

在服務器端,當您監聽時,只有一個進程可以接受端口上的新連接(在Unix / BSD套接字中),但它可以將已建立的連接傳遞給其他進程進行服務。由於該集是唯一的,因此可以將流量路由到正確的連接。


15
2018-01-22 02:15



查看倒數第二個答案,路由器是否檢查端口號並在錯誤時發回錯誤?查看第3個到最後的答案,請求它的程序是否接受並處理數據或操作系統?為了澄清您的最後答案,您可以通過創建帶服務器的子端口系統並請求來自服務器的連接來解決限制?服務器在發送之前是否將自己的數據添加到堆棧中,因此可以區分傳入的數據? - Griffin
終端系統發送任何錯誤響應;中間路由器怎麼知道目標系統上正在運行哪些進程? - Daniel Pittman
一般而言,該計劃。操作系統只是一個管道,將數據傳遞給正在偵聽該端口的任何內容。 (一般來說,某些平台在內核中運行服務器,這可能會模糊行 - 但實質上仍然是應用程序。) - Daniel Pittman
對於你的最後一個問題,答案是“你正朝著錯誤的方向前進”;該 accept operation返回TCP連接的新文件句柄,您可以將其視為任何其他Unix文件句柄。其餘部分只是通過網絡傳輸數據的普通管道。沒有子端口,數據添加,沒有。只是普通的數據包,這四個值標識連接。 - Daniel Pittman
好的,所以程序請求連接到另一台計算機,當它將數據導向到端口80時;然後該計算機有一個程序正在偵聽端口80,它的功能是將它所做的連接轉移到其中一個機器開放端口。是對的嗎?請求連接的計算機如何獲取它所連接的新端口號? - Griffin