私が理解しているように、これはクライアントが接続要求を行ったときに起こることです:
- サーバーは特定のポート番号にバインドされます。ポート番号は常にリスニングプロセスにバインドされます。サーバーのみが着信接続をリッスンしているため、クライアント側でバインドする必要はありません。
- サーバーはそのポート番号でlisteninigを継続します。
- クライアントは
connect()
リクエストを送信します。 - サーバーはを使用してリクエストを受け入れます
accept()
。サーバはクライアントの要求を受け入れるとすぐに、カーネルはさらに、サーバーのためのポート番号をランダムに割り当てとしてsend()
およびreceive()
サーバー上の同じポート番号を聞くだけでなく、送信するために使用することはできない、と以前のポートがまだあることから、新しい接続をリッスンする
以上のことを考えると、サーバーはクライアントが受信しているポートをどのようにして見つけるのでしょうか?クライアントが送信元ポートと宛先ポートを使用してTCPセグメントを送信することを知っているので、サーバーはそのセグメントの送信元ポートを宛先ポートとして使用しますが、サーバーはそのポートを見つけるためにどの関数を呼び出しますか?それはaccept()
?