學(xué)習(xí)啦>學(xué)習(xí)電腦>網(wǎng)絡(luò)知識(shí)>網(wǎng)絡(luò)技術(shù)>

TCP連接建立的方法

時(shí)間: 恒輝636 分享

  為了建立一條TCP連接,計(jì)算機(jī)需要為我們做如下的工作:

  1. 請(qǐng)求端(通常稱為客戶)發(fā)送一個(gè)SYN段指明客戶打算連接的服務(wù)器端口,以及初始序號(hào)(ISN)。這個(gè)SYN段為下面的UML中的報(bào)文段1。

  2. 服務(wù)器發(fā)回包含服務(wù)器的初始序號(hào)的SYN報(bào)文段(下面UML圖中的報(bào)文段2)作為應(yīng)答。同時(shí),將確認(rèn)序號(hào)設(shè)置為客戶的ISN加1對(duì)客戶的SYN報(bào)文段進(jìn)行確認(rèn)。

  3. 客戶必須將確認(rèn)序號(hào)設(shè)置為服務(wù)器的ISN加1對(duì)服務(wù)器的SYN報(bào)文段進(jìn)行確認(rèn)(下面UML圖中的報(bào)文段3).

  這三個(gè)報(bào)文段完成連接的建立。這個(gè)過(guò)程我們稱之為三次握手(three-way handshake)。

  發(fā)送第一個(gè)SYN的一端將執(zhí)行主動(dòng)打開(kāi)(active open)。接收這個(gè)SYN并發(fā)回下一個(gè)SYN的另一端執(zhí)行被動(dòng)打開(kāi)(passive open)。

  下面使用PlantUML語(yǔ)言進(jìn)行流程圖的繪制,以幫助大家更好的理解TCP連接的建立,這里給出作者繪制過(guò)程中使用的工具及源代碼,做到有圖有真相,大家可以進(jìn)行任意修改。:-)

  autonumber

  participant client

  participant server

  note over client , server

  client與server初始狀態(tài)都處于CLOSED

  end note

  client -> server : SYN(SEQ=x)

  activate client

  note left: 3次握手的第1步,\n此后client處于SYN_SENT狀態(tài)

  client

  activate server

  note right: 3次握手的第2步,\n此后server處于SYN_RCVD狀態(tài)

  client -> server : (SEQ=x+1,ACK=y+1)

  deactivate client

  deactivate server

  note left of client: 3次握手的第3步,\nclient確認(rèn)server的SYN,\n并處于ESTABLISHED狀態(tài)

  note right of server: server的SYN被client確認(rèn)后,\nserver也進(jìn)入ESTABLISHED狀態(tài)

  note over client , server

  3次握手結(jié)束,client與server都進(jìn)入ESTABLISHED狀態(tài)

  從現(xiàn)在開(kāi)始雙方可以傳輸數(shù)據(jù)了

  end note

  #+END_SRC

168397