加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • TCP和UDP可以同時(shí)綁定相同的端口嗎?
    • 1、TCP與UDP介紹
    • 2、什么是網(wǎng)絡(luò)端口?端口有什么作用?
    • 3、TCP和UDP的Socket可以綁定同一個(gè)端口嗎?
    • 客戶端的端口可以重復(fù)使用嗎?
    • 多個(gè) TCP 服務(wù)進(jìn)程可以綁定同一個(gè)端口嗎?
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

TCP和UDP可以同時(shí)綁定相同的端口嗎?

2023/02/21
3208
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

TCP和UDP可以同時(shí)綁定相同的端口嗎?

TCPUDP可以同時(shí)綁定相同的端口嗎?解答這個(gè)問題之前,我們需要先來了解什么是TCP和UDP,什么又是網(wǎng)絡(luò)端口。

1、TCP與UDP介紹

TCP和UDP是IP(Internet Protocol)的獨(dú)立的兩個(gè)協(xié)議,他們都工作在OSI模型中的網(wǎng)絡(luò)層。其中TCP和UDP最大的區(qū)別就是面向連接和面向無連接。

TCP

當(dāng)需要傳輸?shù)臄?shù)據(jù)的可靠性非常重要的時(shí)候,我們一般使用TCP進(jìn)行傳輸,因?yàn)門CP協(xié)議傳輸?shù)臄?shù)據(jù)是按照順序依次傳輸。如果數(shù)據(jù)接收方未收到發(fā)送方傳輸?shù)臄?shù)據(jù),TCP會(huì)在特定時(shí)間之后重新發(fā)包。這就是我們常說的丟包重傳機(jī)制,還有就是擁塞控制、流量控制等,TCP的可靠性正是因?yàn)橛羞@些特性。

UDP

UDP(User Datagram Protocol)是一種面向無連接的服務(wù),UDP的數(shù)據(jù)將不像是TCP那樣保證按序傳輸,接收方無論收沒收到數(shù)據(jù)都不會(huì)重傳,因此UDP相對(duì)于TCP有更低的延遲。在時(shí)間優(yōu)先級(jí)高于數(shù)據(jù)可靠性的應(yīng)用中,UDP更為常用,例如平時(shí)使用的視頻通話、網(wǎng)絡(luò)游戲等。因?yàn)閷?duì)于這些應(yīng)用來說,時(shí)間比數(shù)據(jù)的一致性更為重要。

2、什么是網(wǎng)絡(luò)端口?端口有什么作用?

我們的電腦上有許多的通信程序,當(dāng)我們的電腦收到數(shù)據(jù)包之后,數(shù)據(jù)包是如何精準(zhǔn)的分配至不同的應(yīng)用的呢?我們可以這樣理解,在網(wǎng)絡(luò)中的IP地址相當(dāng)于我們現(xiàn)實(shí)生活中的小區(qū)名,端口號(hào)就像是具體的門牌號(hào)。

端口的作用是讓應(yīng)用層的各種應(yīng)用進(jìn)程都能將其數(shù)據(jù)通過端口向下交付給傳輸層,以及讓傳輸層知道應(yīng)當(dāng)將其報(bào)文段中的數(shù)據(jù)向上通過端口交付給應(yīng)用層的進(jìn)程。為了對(duì)端口進(jìn)行區(qū)分,將每個(gè)端口進(jìn)行了編號(hào),這就是端口號(hào)。當(dāng)我們將數(shù)據(jù)從一臺(tái)設(shè)備發(fā)送到另一臺(tái)設(shè)備時(shí),它會(huì)轉(zhuǎn)到特定的 TCP 或 UDP 端口,具體取決于我們用于通信的協(xié)議。

3、TCP和UDP的Socket可以綁定同一個(gè)端口嗎?

TCP與UDP服務(wù)端網(wǎng)絡(luò)都會(huì)調(diào)用bind綁定端口。

TCP網(wǎng)絡(luò)編程

UDP 網(wǎng)絡(luò)編程

TCP 和 UDP 端口彼此不相關(guān)。TCP 端口由 TCP 堆棧解釋,而 UDP 堆棧解釋 UDP 端口。端口是多路復(fù)用連接的一種方式,以便多個(gè)設(shè)備可以連接到一個(gè)節(jié)點(diǎn)。因此,從技術(shù)上講,更高級(jí)別的協(xié)議可以使用相同或不同的 TCP 和 UDP 端口號(hào)。另一方面,一臺(tái)計(jì)算機(jī)可以同時(shí)使用相同的 TCP 和 UDP 端口號(hào)與兩個(gè)不同的服務(wù)進(jìn)行通信。

如上圖, TCP/UDP 各自的端口號(hào)是相互獨(dú)立的, TCP 有一個(gè) 80 號(hào)端口,UDP 也可以擁有一個(gè) 80 號(hào)端口,兩者并不沖突。

所以,TCP 和 UDP 是可以同時(shí)綁定相同的端口的。

TCP 和 UDP 傳輸協(xié)議,在內(nèi)核中是由兩個(gè)完全獨(dú)立的軟件模塊實(shí)現(xiàn)的。

當(dāng)主機(jī)收到數(shù)據(jù)包后,可以在 IP 包頭的“協(xié)議號(hào)”字段知道該數(shù)據(jù)包是 TCP還是UDP,所以可以根據(jù)這個(gè)信息確定送給哪個(gè)模塊(TCP/UDP)處理,送給 TCP/UDP 模塊的報(bào)文根據(jù)“端口號(hào)”確定送給哪個(gè)應(yīng)用程序處理。

因此, TCP/UDP 各自的端口號(hào)也相互獨(dú)立,互不影響。

客戶端的端口可以重復(fù)使用嗎?

只要客戶端連接的不是相同的服務(wù)器,內(nèi)核是允許端口重復(fù)使用的。TCP 連接由四元組(源IP地址,源端口,目的IP地址,目的端口)唯一確認(rèn)的,四元組其中任何一個(gè)元素改變,就表示不同的 TCP 連接。

假如客戶使用端口1與服務(wù)器A建立了連接,客戶端也可以使用端口1與服務(wù)器B建立連接,即使客戶端的端口號(hào)相同,但因四元組信息發(fā)生變化,并不會(huì)導(dǎo)致連接沖突。

多個(gè) TCP 服務(wù)進(jìn)程可以綁定同一個(gè)端口嗎?

若多個(gè)TCP服務(wù)進(jìn)程同時(shí)綁定相同的IP地址和端口,那么執(zhí)行bind() 時(shí)候就會(huì)報(bào)錯(cuò)“Address already in use”;若TCP服務(wù)進(jìn)程只是綁定相同的端口,但綁定的IP地址不同,那么則不會(huì)報(bào)錯(cuò)。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜