三次握手
1.客戶端發送 SYN(SEQ=x)報文給服務器端,進入 SYN_SEND 狀態。
2.服務器端收到 SYN 報文,迴應一個 SYN (SEQ=y)ACK(ACK=x+1)報文,進入 SYN_RECV 狀態。
3.客戶端收到服務器端的 SYN 報文,迴應一個 ACK(ACK=y+1)報文,進入 Established 狀態。
打電話例子:
A:“喂,你聽得到嗎?” A->SYNSEND
B:“我聽得到呀,你聽得到我嗎?” 應答與請求同時發出 B->SYN_RCVD | A->ESTABLISHED
A:“我能聽到你,今天 balabala……” B->ESTABLISHED
四次揮手
1.某個應用進程首先調用 close,稱該端執行“主動關閉”(active close)。該端的 TCP 於是發送一個 FIN 分節,表示數據發送完畢。
2.接收到這個 FIN 的對端執行 “被動關閉”(passive close),這個 FIN 由 TCP 確認。
3.一段時間後,接收到這個文件結束符的應用進程將調用 close 關閉它的套接字。這導致它的 TCP 也發送一個 FIN。
4.接收這個最終FIN的原發送端 TCP(即執行主動關閉的那一端)確認這個 FIN。 既然每個方向都需要一個 FIN 和一個 ACK,因此通常需要 4 個分節。
打電話例子:
A:“喂,我不說了。” A->FIN_WAIT1
B:“我知道了。等下,上一句還沒說完。Balabala…..” B->CLOSE_WAIT | A->FIN_WAIT2
B:”好了,說完了,我也不說了。” B->LAST_ACK
A:”我知道了。” A->TIME_WAIT | B->CLOSED
爲什麼TCP連接只要三次而釋放需要四次呢?
這是由於TCP的半閉造成,因爲TCP連接是全雙工,所以進行關閉時每個方向都需要單獨關閉,這個單方向的關閉叫做半關閉。當一方完成它數據發送任務的時候,就發送一個FIN來向另一方通告對方我將要終止這個方向的連接。
TCP的狀態(SYN,FIN,ACK,PSH,RST,URG)
1.SYN(synchronous):建立連接
2.FIN(finish):結束連接
3.ACK(acknowledgement):確認
4.PSH(push):傳送
5.RST(reset):重置
6.URG(urgent):緊急
常用的TCP端口及功能
端口 | 協議 | 說明 |
---|---|---|
21 | FTP | FTP服務器所開放的控制端口 |
23 | TELNET | 用於遠程登錄,可以遠程控制管理目標計算機 |
25 | SMTP | SMTP服務器開放的端口,用於發送郵件 |
80 | HTTP | 超文本傳輸協議 |
110 | PoP | 用於郵件的接受 |
常用的UDP端口號及功能
端口 | 協議 | 說明 |
---|---|---|
69 | TFTP | 簡單的文件傳輸協議 |
111 | RPC | 遠程過程調用 |
123 | NTP | 網絡時間協議 |