天天看點

TCP三向交握

<a href="https://s1.51cto.com/wyfs02/M00/05/8E/wKiom1mnbGvzh5uxAAP1JBdKgWQ050.png" target="_blank"></a>

說明:A ,B處于關閉CLOSED狀态,一般是用戶端主動發起連接配接請求的,因為用戶端的端口是随機産生的,不固定,伺服器的端口是固定的,容易找到。伺服器端不能一直處于關閉狀态,伺服器要工作。要變成收聽狀态,這樣就可以随時接受到來自用戶端的請求了。

    (1) 當A要與B通信時,會發送SYN=1(請求通訊位,1代表請求建立連接配接),seq=x(x 表示所發的資料包在用戶端A上所排的序号,在抓包時,這個序号一般是相對序号,例如當A與B第一次建立連接配接,那麼這個序号,一般為0),當A發完包後,會立即進入SYN-SENT 同步已發送狀态。

   (2)當B收到A發來的包後,會回複确認收到,回複SYN=1(請求建立連接配接),ACK=1(确認收到),seq=y(所收到的包在我自己機器上即B所排的序号),ack=x+1(這裡的x和A發來的x是一樣的,假如x=100,代表A發送的是第100個包,B如果想告訴A我收到這個100包了,會回複,我希望你下一個發的包是101個,即代表已經收到了100包,是以這裡是ack=x+1,代表下一個期望收到的包序号),B回複後會立即進入SYN-RCVD同步收到狀态。

   (3)當A收到B發來的回複後,會再次與B确認,發送ACK=1(确認收到),seq=x+1(這個包的序号是x+1,即B上次的回複中請求下次要發的包),ack=y+1(B在上次回複中有告訴A,你第一次發的包在我這的排序,是以這次A發送時,直接計算了這次發的包在B那邊的排序),當A發送完後,會進入ESTAB-LISHED已建立連接配接狀态。

   (4)B收到後也會進入ESTAB-LISHED已建立連接配接狀态,然後雙方開始資料傳送。

    例子:當雙方打電話時,當你打過去電話時,對方會回複喂,然後你也會說,喂,是我,然後雙方開始通話。

本文轉自 hawapple 51CTO部落格,原文連結:http://blog.51cto.com/guanm/1961297

上一篇: WHO AM I

繼續閱讀