教你TCP如何連接
為了建立一條TCP連接,計算機(jī)需要為我們做如下的工作:
1. 請求端(通常稱為客戶)發(fā)送一個SYN段指明客戶打算連接的服務(wù)器端口,以及初始序號(ISN)。這個SYN段為下面的UML中的報文段1。
2. 服務(wù)器發(fā)回包含服務(wù)器的初始序號的SYN報文段作為應(yīng)答。同時,將確認(rèn)序號設(shè)置為客戶的ISN加1對客戶的SYN報文段進(jìn)行確認(rèn)。
3. 客戶必須將確認(rèn)序號設(shè)置為服務(wù)器的ISN加1對服務(wù)器的SYN報文段進(jìn)行確認(rèn).
這三個報文段完成連接的建立。這個過程我們稱之為三次握手(three-way handshake)。
發(fā)送第一個SYN的一端將執(zhí)行主動打開(active open)。接收這個SYN并發(fā)回下一個SYN的另一端執(zhí)行被動打開(passive open)。
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)在開始雙方可以傳輸數(shù)據(jù)了
end note
#+END_SRC