トランスポート層8 - TCPトランスポート接続の管理

EDITORIAL:この記事では、「コンピュータネットワーク第7版、」研究ノートのためであります

1--トランスポート層トランスポート層プロトコルの概要

2--トランスポート層UDPユーザーデータグラムプロトコル

トランスポート層3--伝送制御プロトコルTCP概要

4トランスポート層 - 作品のTCP信頼性の高い輸送

輸送層5 - TCPパケットヘッダフォーマット・セグメント

6トラ​​ンスポート層 - TCPは、信頼性の高い伝送を実現します

トランスポートレイヤ7 - TCPフロー制御と輻輳制御

トランスポート層8 - TCPトランスポート接続の管理

TCPは、コネクション型のプロトコルです。トランスポート接続の3つの段階があります。接続、データ伝送と接続解除を確立します。TCPは接続を確立するためにクライアントサーバモードを使用しています。受動的にサーバーと呼ばれる接続を確立するために、アプリケーション・プロセスのために待機している間の接続は、クライアントと呼ばれる確立するために、アプリケーション・プロセスを開始します。

1. TCPコネクションの確立

TCPコネクションの確立は、ハンドシェイクと呼ばれ、クライアントとサーバ間のハンドシェイクは、3つのTCPセグメントを交換する必要があり、また、3ウェイハンドシェイクパケットと呼ばれます。

5d36b730af99d71230

図:

  • 顧客は、Bは、最初のTCP端部が閉じているサーバであり、且つ、アクティブA、Bパッシブオープンを開き、想定されます。

  • クライアント・プロセスの接続要求を受け入れる準備ができて、伝送制御ブロックTCBを作成するために始め、BのTCPサーバー。サービスは、クライアント接続要求を待って、LISTEN状態です。

  • 初期シーケンス番号のSEQ = xを選択しながらTCBはまた、第1の同期ビットSYN = 1、今回のセクションBに接続要求パケットを送信する場合、TCP接続を確立することを意図するものでモジュールを作成します。TCPの規定は、SYNセグメントがデータを運ぶが、SYN-SENT(同期送信される)Aの状態に数、クライアントプロセスを消費しません。

  • Bは、あなたが接続を確立することに同意するならば、それはAに確認応答を送信し、接続要求パケットセグメントを受信します SYN = 1、ACK = 1、確認応答番号のACK = X + 1を提供し、初期シーケンス番号seq = Yを設定します。このセグメントは、データを運ぶが、シリアル番号を消費しません。TCPサーバ(受信した同期)状態SYN-RCVDにこの時点で。

  • 確認処理は、TCPクライアントBを受信するだけでなく、Bに確認応答を送信した後 ACK = 1、SEQ = X + 1、ACK = Y + 1。このとき、ACKセグメントは、データを搬送することができるが、セグメント番号の次のシーケンス番号は、配列依然として= X + 1である場合に消費されていないデータを搬送しません。このとき、TCP接続が確立されており、クライアント・プロセスは、のESTABLISHED(確立された接続)の状態になります。

  • 領収書を確認した後だけでなく、ESTABLISHED状態にB。

なぜそれの最終確認を送信する必要がありますか?

这是防止已失效的连接请求报文段突然又传送到了B而引发错误。

失效的连接请求:A第一次先发送了一个请求,但是丢失了,于是A再发送一个连接请求,重新建立连接,发送数据并释放连接。

但是有可能出现异常情况,即A发送的连接请求并没有丢失,而是滞留了在网络中。如果在传输数据完成之后,这个请求又发到B,B误以为A还要发送数据,因此发送确认报文,但是A没有运输需求,因此不予理睬。如果没有最后一次确认,B一直等待A的确认,这样会造成的浪费。

采用三报文握手,如果B没有收到A的确认,则可以知道A没有建立连接的需求,就可以避免上述这种情况。

2. TCP的连接释放

5d36c06f25e4685687

如图:

  • A和B目前都处于ESTABLISHED状态,A的应用进程向其TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接。此时,FIN=1,seq=u,u等于前面已发送的最后一个字节的序号加1。这时A进入到FIN-WAIT-1(终止等待1)状态,等待B的确认。FIN报文段即使不携带数据,也要消耗一个序号;

  • B收到释放连接后立即发出确认,此时,ACK=1,确认号是ack=u+1,序号seq=v,v等于B前面所有已传送数据的最后一个字节的序号加1。B进入到CLOSE-WAIT(关闭等待)状态,TCP服务器进程向高层应用进程告知,此时A到B的连接已经释放,TCP连接处于半关闭状态。但是,B到A这个方向的连接尚未关闭;

  • A收到B的确认后,就进入到FIN-WAIT2(终止等待2)的状态,等待B发送连接释放报文段;

  • 若B已经没有数据需要发送,则应用进程通知TCP释放连接,这时B发送的报文段:FIN=1,ACK=1,seq=w(可能后面又发送了一些数据),ack=u+1,并且这个报文消耗一个序号。B进入到LAST-ACK(最后确认)的状态,等待A的确认;

  • A收到B的确认后,必须对此发送确认报文。该报文中:ACK=1,seq=u+1,ack=w+1。然后进入到TIME-WAIT(时间等待)状态。

  • このとき、TCP接続が完全に解放されていない、我々は、経過時間を入力する前に、2MSL後に設定されたタイマ、CLOSED状態を待たなければなりません。MSLの時間は、最大セグメント寿命と呼ばれます。

なぜ2MSLそれを待つのか?

  1. 保証は最後B.に到達するためにACKセグメントを送信しました メッセージが失われたので、Bが最後の肯定応答セグメントを再送信し、確認メッセージを再送信し、Aは、Bが閉に正常状態に入ることができるまで、タイマを再起動することができるからです。

  2. 上記の「失敗した接続要求パケット」を防ぎます この間、接続要求メッセージは、ネットワークに消えることがあります。

また、閉状態に最初よりもB。

おすすめ

転載: www.cnblogs.com/anzhengyu/p/11232813.html