blog

TCP/IPプロトコル

注:IPプロトコルとIPアドレスを混同しないでください。TCP/IPのIPとは、ネットワーク層に位置するインターネット・プロトコルのことで、IPプロトコルの役割は、さまざまなパケットを相手側に送信する...

Jul 25, 2020 · 4 min. read
シェア

注:IPプロトコルとIPアドレスを混同しないでください。TCP/IPのIPとは、ネットワーク層に位置するインターネットプロトコルのことです。IPプロトコルは様々なデータパケットを相互に送信するために使用されます。それらが確実に相手側に届くためには、様々な条件を満たす必要があります。最も重要な条件の2つは、ノードに割り当てられているアドレスを示すIPアドレスと、ネットワークカードの固定アドレスであるMACアドレスです。

主なTCPメッセージ・フラグの意味。

  • seq(シーケンス番号):送信されるデータ・バイト・ストリームを示し、TCP伝送が整然と行われるように、各バイトに番号が付けられます。
  • ack(確認シーケンス番号):送信側が受信を期待する次のシーケンス番号で、受信に成功した後のデータ・バイトのシーケンス番号に1を加えたもの。
  • ACK:確認応答シーケンス番号フラグ。ACK=1は確認応答シーケンス番号が有効であることを示し、ACK=0はメッセージに確認応答シーケンス番号情報が含まれていないことを示します。
  • SYN:接続要求シリアル番号フラグ、接続を確立するために使用され、SYN=1は接続を要求していることを意味します。
  • FIN:終了フラグ。接続を解放するために使用され、1はローカルデータフローを閉じることを意味します。

つまり、接続の確立はSYNとACK、それにseqとack。切断はFINとACK、それにseqとack。

3回のハンドシェイク

TCP/IPプロトコルとは何ですか?

4つの波

不都合なTCPの4つの波

問題点

、なぜ3回の握手?回じゃダメなの?なんで?

つのハンドシェイクの目的は、信頼できる通信チャネルを確立することであり、単にデータの送受信を行うだけである。3つのハンドシェイクの主な目的は、双方が正常に送受信していることを確認することである。
一方では、次の3点に対する答えがある:
* 最初のハンドシェイク:クライアントは何も確認できず、サーバーは相手が正常に送信していることを確認する。
* 2回目のハンドシェーク:クライアントは、自分が正常に送受信し、相手も正常に送受信していることを確認する。サーバーは、自分が正常に受信し、相手も正常に送信していることを確認する。
* 第3のハンドシェーク:クライアントは正常な送受信を行い、相手も正常な送受信を行うことを確認し、サーバーは正常な送受信を行い、相手も正常な送受信を行うことを確認する。
つまり、3回のハンドシェイクで、ダブル送受信機能が正常であることを確認することになる。
すでに失敗した接続要求メッセージが突然サーバーに再送信され、不必要なエラーが発生するのを防ぐためである。クライアントから送信された最初のリクエスト接続が失われたのではなく、サーバーに到着するのが遅れたというシナリオを想定することは可能である。,
TCPクライアントは、タイムアウト時間内にサーバーの確認メッセージを受信しなかったため、サーバーは、この時点で、サーバーが受信していないと考え、このメッセージをサーバーに再送信し、その後、クライアントとサーバーは、2回のハンドシェイクが完了した後に、このメッセージをサーバーに再送信する。
接続が行われ、データが転送されると、コネクションはクローズされる。その後、ネットワークがサーバーに到達するのがスムーズであるため、遅れている1つのリクエスト接続は、このメッセージは無効であるはずだが、2回のハンドシェイクのメカニズムにより、クライアントは、次のようになる。
その後、サーバーはコネクションを閉じ、再度サーバーとのコネクションを確立するが、これは不必要なエラーとリソースの浪費につながる。 

, なぜTIME_WAITは2倍のMSLなのですか?

第四波がACKメッセージを送信するとき、それはMSLの最大メッセージセグメント伝送時間のサービス側に到着し、ACKメッセージセグメントが失われたときに、極端なケースでは、ちょうど1つのMSLは、その後、サービス側はFINを再送信され、それはクライアントの時間に別のMSLである送信し、このケースは極端なケースである、つまり、最大はMSLの2倍になりますこれは極端なケースです。つまり、最大でMSLの2倍の間隔になり、失われ再送されたFINがクライアントに到達すると、クライアントはMSLの2倍にリセットし、ACKを再送します。

、接続を確立するのに3回のハンドシェイクが必要なのに、接続を閉じるのに4回のハンドシェイクが必要なのはなぜですか?

コネクションを確立する場合、LISTEN状態のサーバーはコネクション確立を要求するSYNメッセージを受信し、ACKとSYNを1つのメッセージとしてクライアントに送信します。

接続を閉じるとき、サーバは相手からFINメッセージを受け取りますが、それは相手がもうデータを送信しないが、まだデータを受信できることを意味するだけで、相手にすべてのデータを送信しないかもしれないので、当事者はすぐに接続を閉じるか、相手にいくつかのデータを送信してから、今接続を閉じることに同意することを示すために相手にFINメッセージを送信することができます。そのため、通常、ACKとFINは別々に送信されます。

、接続が確立されたのに、クライアントが突然失敗した場合、どうすればいいですか?

TCPにはキープアライブタイマーもあります。 クライアントが失敗した場合、サーバは無駄に待ち続けてリソースを浪費するわけにはいきません。サーバはクライアントからのリクエストを受信するたびにこのタイマをリセットします(通常は2時間に設定されています)。2時間クライアントからデータを受信しなかった場合、サーバはプローブ・メッセージ・セグメンテーションを送信し、以後75秒ごとに送信します。プローブメッセージを10回送信しても応答がない場合、サーバはクライアントの接続に失敗したと判断し、接続を切断します。

Read next

APP-JSブリッジの簡単な分析

混合開発では、モバイルAPPは、多くの場合、Webページで使用されますが、Webページの機能にいくつかの制限があるか、または呼び出しを達成するために、APPの既存の機能を通じて、開発リソースを節約したい、などの一般的な機能:ログイン、共有、コピー、日付のコンポーネントなど、メッセージの相互運用性を達成するためにAPPとWeb通信を必要とします。 2.JS->APP通信

Jul 25, 2020 · 1 min read