コンピュータネットワーク----- TCPスリーウェイハンドシェイク関連のインタビュー質問の拡張

1.TCPスリーウェイハンドシェイク

直接上图 TCP三次握手

ここに画像の説明を挿入

一些专业缩写单词

説明
TCP 伝送制御プロトコル(TCP、伝送制御プロトコル)
SYN 同期シーケンス番号
SYN_SENT クライアントリクエスト接続
設立 意味TCP:接続の成功
ACK (確認文字)は確認文字です。ACK= 1の場合のみ確認番号欄が有効です。TCPは、接続が確立された後のすべてのメッセージの送信でACKを1に設定する必要があることを規定しています。
SYN_RCVD SYN_RCVDは、TCPスリーウェイハンドシェイクの中間状態であり、SYNパケットを受信して​​[SYN、ACK]パケットを送信した後のサービスポート(アプリケーションサーバーのポート80などの監視ポート)の状態です。
RST TCPヘッダーの6つのフラグビットの1つは、接続がリセットされ、接続がリセットされたことを示します。RSTをリセットします。RST= 1の場合、TCP接続に重大なエラーがあることを示します。接続を解放してから再確立する必要があります。
ISN 初期シーケンス番号(初期シーケンス番号)
終わり 接続を解放します。FIN = 1の場合、このメッセージの送信者のデータが送信され、解放が要求されたことを示します。
  • 最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动打开连接的是服务器。

第一次握手

  • クライアントクライアントはSYN(同步序列编号)を1に割り当て、ランダムに初期シーケンス番号を生成seqしてサーバーサーバーに送信し、SYN_SENT状態に入ります。
  • SYN_SENT接続が要求されていることを示します。他のコンピュータのサービスにアクセスする場合は、最初に同期信号をポートに送信する必要があります。このとき、ステータスはSYN_SENTです。接続が成功すると、次のようになります。ESTABLISHED

第二次握手

  • サーバーサーバーは、クライアントのSYN(同期シーケンス番号)を受信すると、クライアントが接続の確立を要求していることを認識し、SYNを1に、ACKを1に割り当て、確認応答番号=シーケンス番号+1を生成します。独自の初期シリアル番号をランダムに生成してクライアントに送信します。サーバーはSYN_RCVD状態になり、クライアントはESTABLISHED状態になります。

第三次握手

  • クライアントは、確認応答番号がシリアル番号+1であり、ACKが1であるかどうかを確認し、確認が正しいと、自身のACKを1に設定して、確認応答番号=サーバーから送信されたシリアル番号+1を生成します。サーバーに送信し、ESTABLISHED状態になります。サーバーACKが1で、確認番号がシーケンス番号+1であることを確認した後、ESTABLISHED状態になります。三者ハンドシェイクが完了し、接続は設立。

2. TCPスリーウェイハンドシェイクをツーウェイハンドシェイクにすることはできますか?

  1. できません
  2. 無効な接続要求セグメントがサーバーに送信される場合があります。
	client 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。
	本来这是一个早已失效的报文段。但 server 收到此失效的连接请求报文段后,就误认为是 client 再次发出的一个新的连接请求。
	于是就向 client 发出确认报文段,同意建立连接。假设不采用 “三次握手”,那么只要 server 发出确认,新的连接就建立了。
	由于现在 client 并没有发出建立连接的请求,因此不会理睬 server 的确认,也不会向 server 发送数据。
	但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,
	这样浪费服务端连接资源.采用 “三次握手” 的办法可以防止上述现象发生。例如刚才那种情况,client 不会向 server 的确认发出确认。
	server 由于收不到确认,就知道 client 并没有要求建立连接。
  1. 2つのハンドシェイクは、クライアントが2番目のハンドシェイクのメッセージを正しく受信することを保証できません(サーバーはクライアントがメッセージを受信したかどうかを確認できません)。また、クライアントとサーバー間の初期シリアル番号の交換が成功することも保証できません。

3. TCPは4ウェイハンドシェイクを使用できますか?

  1. できる。ただし、伝送効率が低下します。

  2. 4ウェイハンドシェイクとは、2番目のハンドシェイク:サーバーはACKと確認応答番号のみを送信し、サーバーのSYNと初期シーケンス番号は3番目のハンドシェイク中に送信されます。元のプロトコルの3番目のハンドシェイクは4番目のハンドシェイクになります。最適化の目的で、4ウェイハンドシェイクの2つと3つを組み合わせることができます。

4. 3番目のハンドシェイクで、クライアントのACKがサーバーに配信されない場合はどうなりますか?

  1. サーバ側:
	由于Server没有收到ACK确认,因此会重发之前的SYN+ACK(默认重发五次,之后自动关闭连接进入CLOSED状态),
	Client收到后会重新传ACK给Server。
  1. クライアント側、2つの状況:
	1. 在Server进行超时重发的过程中,如果Client向服务器发送数据,数据头部的ACK是为1的,所以服务器收到数据之后会读取 ACK number,进入 establish 状态
	2. 在Server进入CLOSED状态之后,如果Client向服务器发送数据,服务器会以RST包应答。

5.接続は確立されているが、クライアントに障害が発生した場合はどうすればよいですか?

  1. サーバーは、クライアントからの要求を受信するたびにタイマーをリセットします。時間は通常2時間に設定されます。クライアントから2時間データを受信しなかった場合、サーバーはプローブセグメントを送信し、その後75時間ごとに送信します。 1秒に1回送信されます。10個のプローブメッセージを送信しても応答がない場合、サーバーはクライアントに障害があると見なし、接続を閉じます。

6.最初のシリアル番号は何ですか?

  1. TCP接続の一方のパーティAは、送信データの初期シーケンス番号(ISN)として32ビットのシーケンス番号(シーケンス番号)をランダムに選択し(1000など)、シーケンス番号を発信元として使用してデータ送信番号を実行します。 :1001、1002 ...スリーウェイハンドシェイク中に、この初期シリアル番号を相手Bに送信して、データを送信するときにBが有効なデータ番号を確認できるようにします。同時に、データを送信するときにAまた、Bが受信するすべてのバイトについて、AがBの確認応答番号(確認応答番号)が2001である場合、1001〜2000の番号のデータがBによって正常に受け入れられたことを意味します。

おすすめ

転載: blog.csdn.net/weixin_45480785/article/details/114136987