これらの2つのパケットは同じtcpソケットに属していますか?

Dec 15 2020

2つのパケットAとがあったとしましょうB

A:source-IP S1、destination-IP D1、source-port SP1、destination-portがありますDP1

B:source-IP S2、destination-IP D1、source-port SP2、destination-portがありますDP1

どちらもTCPです。これらのパケットは両方とも同じソケットを持ちますか?


UDPについて私はそのソケットがdestination-IPとdestination-port-numberで構成されていることを読みました。これがUDPで行われた場合、両方のパケットが同じソケットで受信されます。

しかし、この例はTCP用であり、TCP用の同じソケットも通過するかどうかはわかりません。

回答

12 SteffenUllrich Dec 15 2020 at 00:01

まず、TCPは単一のパケットを気にしません。これらが単にドロップされるよりも前に接続が確立されていない単なるデータパケットである場合、ソケットは関係しません。したがって、これは確立された接続、または接続を確立するための初期パケットに関するものだと思います。TCP接続は、少なくとも(src-ip、src-port、dst-ip、dst-port)の4つのタプルによって定義されます。これらの4つのタプルはどちらの場合も明らかに異なるため、必要なソケットは異なります。

UDPについて私はそのソケットがdestination-IPとdestination-port-numberで構成されていることを読みました。

これは、接続されていないUDPソケットにのみ当てはまります。接続されたUDPソケット再度4-タプルが適切です。

2 MartinRosenau Dec 15 2020 at 15:28

UDPについて私はそれを読みました...

TCPとUDPの主な違いは、TCPはコネクション型であるのに対し、UDPは単一パケットの送信に使用されることです。

UDPソケットは、コンピューターの特定の(宛先)ポートに到着するすべてのUDPパケットを処理しています。

TCPソケットは、特定のTCP接続に属するすべてのパケットを処理しています。

これらのパケットは両方とも同じソケットを持ちますか?

それはあなたが思っているよりも複雑です:

説明する状況は通常、「サーバー側」(accept()APIを使用して着信接続を処理するコンピューター(Webサーバーなど))で発生します。

2台のコンピューター(Webブラウザーを実行している)が同じWebサーバーに接続したいとします。両方のコンピューターが同じ「送信元TCPポート」を選択しました。この場合、2台のコンピューターからWebサーバーに送信されるパケットは条件を満たします。2台のコンピューターから送信されるパケットは送信元IPアドレスのみが異なり、宛先IPアドレス、宛先ポート、および送信元ポートは同じです。

ただし、「サーバー側」では、2つのソケット単一のTCP接続の処理に関与します

  1. 着信TCP接続を使用listen()およびaccept()待機する1つのソケット。
  2. 着信TCP接続ごとに、によって返される1つのソケットaccept()

TCPパケットがTCP接続の最初のパケットである場合、パケットはlisten()宛先ポートでを実行しているTCPソケットによって「処理」されます。

このソケットは、UDPソケットと同様に、送信元IPアドレスや送信元TCPポートを気にしません。ソケットは、特定の宛先IPアドレスと特定の宛先ポートを持つTCP接続のすべての最初のパケットを処理しています。

その最初のパケットが受信されると、2番目のソケット(TCP接続を処理する)が作成され、access()APIによって返されます。

このソケットは、特定の接続(したがって、TCP接続の以降のすべてのパケット)を処理します。

この例では2つの異なる接続があり、2つのコンピューターが同じ「送信元TCPポート」を使用して同じサーバーに接続しているため、2つの異なるソケットが宛先TCPポートのみが異なるパケットを処理します。