あの年、私たちに誤解されたTCP


引用する
最近、「慕課網」の実戦課程「剣指Java面接-Offer直通車」を結合して基礎知識を復習し、コンピュータネットワークを復習したところ、本で学んだTCP関連知識が正確ではなく、面接の要求に合わないことが分かった.
これは私がコンピュータのネットを学ぶ时使う教科书で、私达にいっしょに见て本当のTCP!
勉強する
概要TCP:フルネームTransmission Control Protocol,伝送制御プロトコル.TCPは、接続向けで信頼性の高い、バイトストリームベースのトランスポート層通信プロトコルである.
私たちが毎日使用しているHTTPHTTPSは、輸送層に基づくTCPプロトコルです.TCPパケット形式
TCPメッセージにはシーケンス番号と確認番号があり、再送メカニズムと組み合わせてデータ伝送の信頼性を保障している.TCP新聞の次の3つの表現は非常に重要である.ACK:確認シーケンス番号フラグSYN:接続プロセスFIN:finishフラグを確立し、接続を解放する
3回握手する.TCP接続の中で最も有名なのは です!
詳しく説明する
1回目の握手:接続が確立されると、クライアントはSYN ( seq = x )パケットをサーバに送信し、同時にSYN_SEND状態に入り、サーバの確認を待つ.
2回目の握手:サーバーはSYNパッケージを受け取り、お客様のSYN ( ack = x + 1 )を確認しなければならない.同時に、自分もSYN ( seq = y )パッケージ、すなわちSYN + ACKパッケージを送信し、この時サーバーはSYN_RECVステータスに入る.
3回目の握手:クライアントはサーバのSYN + ACKパケットを受け取り、サーバに確認パケットACK ( ack = y + 1 )を送信し、このパケットの送信が完了し、クライアントとサーバはESTABLISHED状態に入り、3回の握手を完了した.
なぜ接続を確立するには3回の握手が必要ですか?
非常に深い問題は、真剣に考えなければならない.
これは「コンピュータネットワーク」という本で説明されている.
2ページいっぱいで、核心を一言も言っていない.TCP三回握手の核心は交換ClientServer初期のSequence Numberである.
仮定TCP接続中に握手が3回もなかったと仮定します.さらに,通信中にClientからServerへの全二重通信チャネルが確立されたと仮定する.ClientServerにパケットを送信する場合.このパケット番号は18888であり、長さは100である.
正しく受信された場合は、TCPのメカニズムに従って、ACK,ack = 18988に返信する必要があります.
このパケットの場合、最初のパケットであれば、これは合理的であり、返信18988は、現在の18988以前のパケットがすでに受信されていることを意味し、次の期待データ番号は18988である.ClientServerが同時に2つのパケットを送信したと仮定し、1878818888は、ネットワークの問題で送信されなくなった.そのサーバ側が18788に返信するのは合理的ではありません.
したがって、ACK接続で通信する双方は、相手が送信を開始したデータの初期のTCPを知る必要がある.この任務を遂行するために、Sequence Numberの3回の握手があった.
3回握手する.
  • クライアントは、TCP初期値を送信します.
  • サービス側は受信を確認します.
  • サービス側は、そのSequence Number初期値を送信する.
  • クライアントは受信を確認します.
  • Sequence Numberは、サービス側が1つの2、3パケットを送信することで、自分のTCPの確認と送信の2つのタスクを完了することができるので、3回の握手です.
    まとめ
    本を書くのは容易ではありません.間違いは避けられません.すべての作者も尊重されるべきです.
    しかし、万千人の生徒を教える教科書として、学校に教科書の選択を頼むときは慎重にしてください.