TCPソケットとUDPソケットは同じポートを使用できますか?


104

まず、同じサーバーでUDPとTCPの両方を使用することに問題はありますか?

次に、同じポート番号を使用できますか?

回答:


110

はい、TCPとUDPの両方に同じポート番号を使用できます。たとえば、DNSはudp / 53 および tcp / 53で動作します。

技術的には、各プロトコルのポートプールは完全に独立していますが、TCPまたはUDPのいずれかを使用できる上位レベルのプロトコルの場合、デフォルトで同じポート番号に設定されるのが慣例です。

念頭に置いて、サーバー、クマを書くときも通常通りとして以来、TCPソケットのためのイベントのシーケンスは、はるかに困難UDPソケットのためのよりであることsocketと、bind通話あなたもしなければならないlistenaccept

さらに、そのaccept呼び出しは新しいソケットを返し、そのソケットは受信イベントをポーリングする必要があります。サーバーはaccept、それぞれのソケットで受信イベントをトリガーする複数のクライアントに同時にサービスを提供しながら、元のソケットで接続を継続できるように準備する必要があります。


2
@Eric Fortis RFC 1700は例でいっぱいです。それらをすべてリストしませんか?;-)
Lorneの侯爵

2
@Eric FortistなぜNetBIOSのポート番号を「誰もが知っている」必要があるのでしょうか。
ローン侯爵

4
質問として投稿してください。答えを出してください
Eric Fortis

6
この回答では説明できないものがあります。「ポート」セマンティックは、トランスポートレベル(OSIモデルレベル4)の各プロトコルに固有です(ただし、このセマンティックがないものもあります)。したがって、TCPには独自のポートがあり、TCPスタックによって解釈されます。UDPには独自のポートがあり、UDPスタックによって解釈されます。つまり、ポートはUDPとTCPの間で共有されません。たまたま、両方のプロトコルで「ポート」の定義が同じであり、単純化するために、同じサービスへの異なるタイプの複数の接続に同じポート値を使用しています。
moala 14

2
@EricFortisそのような質問は、それを興味深いと考える理由と同様に、私や他の誰にとっても興味がないので、ここで議論している目的のためにここにある1つの RFC を引用することに反対します。
ローンの侯爵

8

まず、サーバーでtcpとudpの両方を使用しても問題はありません。

次に、各要求は送信元IP、宛先IP、送信元ポート、宛先ポート、プロトコル(プロトコルはTCPまたはUDPの場合があるため)に含まれる5要素で識別されるため、UDP要求とTCP要求の両方を同じポートで使用できます。


3
あなたが述べる理由はしばしば与えられますが、それは本当に意味がありません。UDP接続のようなものはなく、関連するプロトコルに関係なく接続が考慮されるコンテキストはありません。実際のところ、ポートはTCPとUDPのアーティファクトであるため、これらを混同する可能性はありません。
ローン侯爵、2014

私の欠点を指摘していただきありがとうございます。UDPを使用した接続がないのは正しいことです。
aMooly
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.