摘要:建立連接次握手次握手的目的同步連接雙方的序列號和確認號交換窗口大小信息。客戶端狀態建立連接三次握手服務端狀態第一次握手建立連接。計算規則為序列號為應答碼對方上次的首次發送時為系統隨機生成對方的無數據傳輸時或者報文數據的長度
OSI7層網絡模型閱讀時間:8min
閱讀目標:掌握TCP連接過程
學會計算seq、ack碼
TCP 協議是HTTP協議的重要基礎,充分理解TCP協議的連接及端口,有助于我們深入理解網絡請求和連接。今天就來看圖學習TCP請求的連接、數據傳輸及端口連接。
OSI是Open System Interconnection的縮寫,國際標準化組織(ISO)制定了OSI模型,該模型定義了不同計算機互聯的標準,是設計和描述計算機網絡通信的基本框架。
參考模型(從上至下) | 各層含義 |
---|---|
應用層 | 為應用程序提供服務,如HTTP、FTP、SMTP、POP3等 |
表示層 | 數據格式轉換翻譯、數據加密解密、壓縮解壓縮 |
會話層 | 不同機器之間的用戶建立及管理會話 |
傳輸層 | 建立管理和維護端到端的連接,TCP、UDP |
網絡層 | IP地址及路由選擇 |
數據鏈路層 | 物理尋址,將原始比特流轉化為邏輯傳輸線路 |
物理層 | 機械、電子、定時接口通信信道上上的原始比特流傳輸 |
接受上一次的數據,將數據進行分割,保證數據準確到達對端。2. TCP
TCP是面向連接的無狀態的協議。為了連接的可靠性,每次連接的建立都需要3次握手。2.1 建立連接(3次握手)
3次握手的目的:
同步連接雙方的序列號和確認號;
交換TCP窗口大小信息。
客戶端(狀態) | 建立連接(三次握手) | 服務端(狀態) |
---|---|---|
CLOSED | LISTEN | |
SYN seq=0 ==》 | ||
SYN_SENT | ||
《== SYN ACK ack=1,seq=0 | ||
SYN_RCVD | ||
ACK ack=1,seq=1 ==》 | ||
ESTABLISHED | ESTABLISHED |
第一次握手: 建立連接。客戶端發送連接請求,發送SYN報文,隨機生成seq,本例默認為0。然后,客戶端進入SYN_SEND狀態,等待服務器的確認。
第二次握手: 服務器收到客戶端的SYN報文段。需要對這個SYN報文段進行確認,發送ACK報文,將ack設置為1(ack值為對方seq+1或者seq+L(數據長度L))。同時,自己還要發送SYN請求信息,將seq為0。服務器端將上述所有信息一并發送給客戶端,此時服務器進入SYN_RECV狀態。
第三次握手: 客戶端收到服務器的ACK和SYN報文后,進行確認,然后將ack設置為1,seq設置為1,向服務器發送ACK報文段,這個報文段發送完畢以后,客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。
2.2 數據傳輸客戶端 | 數據傳輸 | 服務端 |
---|---|---|
PSH seq=1, ACK ack=1(segmentLen = 99) ==》 | ||
《== PSH seq=1, ACK ack=100 (segmentLen = 119) | ||
ACK ack=120,seq=100 ==》 |
客戶端先向服務器發送數據,該數據報是長度為99的數據。
服務器收到報文后, 也向客戶端發送了一個數據進行確認(ACK),并且返回客戶端要請求的數據,數據的長度為111,將seq設置為1,ack設置為120(1 + 119)。
客戶端收到服務器返回的數據后進行確認(ACK),將seq設置為100, ack設置為112(1 + 111)。
2.3 斷開鏈接(4次揮手)客戶端(狀態) | 斷開連接 | 服務端(狀態) | |
---|---|---|---|
FIN ACK ack=120,seq=100 ==》 | |||
FIN_WAIT_1 | |||
《== ACK ack=101,seq=120 | |||
FIN_WAIT_2 | CLOSE_WAIT | ||
《== ACK ack=101,seq=120 | |||
LAST_ACK | |||
ACK ack=121,seq=101 ==》 | |||
TIME_WAIT | CLOSE |
第一次揮手:客戶端向服務器發送一個FIN報文段,將設置seq為100和ack為120,;此時,客戶端進入 FIN_WAIT_1狀態,這表示客戶端沒有數據要發送服務器了,請求關閉連接;
第二次揮手:服務器收到了客戶端發送的FIN報文段,向客戶端回一個ACK報文段,ack設置為101,seq設置為120;服務器進入了CLOSE_WAIT狀態,客戶端收到服務器返回的ACK報文后,進入FIN_WAIT_2狀態;
第三次揮手:服務器會觀察自己是否還有數據沒有發送給客戶端,如果有,先把數據發送給客戶端,再發送FIN報文;如果沒有,那么服務器直接發送FIN報文給客戶端。請求關閉連接,同時服務器進入LAST_ACK狀態;
第四次揮手:客戶端收到服務器發送的FIN報文段,向服務器發送ACK報文段,將seq設置為101,將ack設置為121,然后客戶端進入TIME_WAIT狀態;服務器收到客戶端的ACK報文段以后,就關閉連接;此時,客戶端等待2MSL后依然沒有收到回復,則證明Server端已正常關閉,客戶端也可以關閉連接了。
計算規則:
seq 為序列號
ack 為應答碼
seq = 對方上次的ack;(首次發送時seq為系統隨機生成)
ack = 對方的seq+1(無數據傳輸時) 或者 seq+L(報文數據的長度L)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94010.html
摘要:很多人都知道協議是基于協議創造出來的采用文本方式傳輸非二進制傳輸的應用層協議,協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而應用層協議,主要解決如何包裝和規范數據。你也可以自己定義應用層協議,只不過所有配套的東西都要自己重新造輪子。 從問題切入能幫我們更好地理解晦澀難懂的概念。很多人都知道http協議是基于Tcp協議創造出來的采用文本方式傳輸(非二進制傳輸)的應用層協議,TPC/I...
摘要:很多人都知道協議是基于協議創造出來的采用文本方式傳輸非二進制傳輸的應用層協議,協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而應用層協議,主要解決如何包裝和規范數據。你也可以自己定義應用層協議,只不過所有配套的東西都要自己重新造輪子。 從問題切入能幫我們更好地理解晦澀難懂的概念。很多人都知道http協議是基于Tcp協議創造出來的采用文本方式傳輸(非二進制傳輸)的應用層協議,TPC/I...
摘要:三次握手和四次揮手的問題在面試中是最為常見的考點之一。上面有一個非常特殊的狀態,它是主動關閉的一方在回復完對方的揮手后進入的一個長期狀態,這個狀態標準的持續時間是分鐘,分鐘后才會進入到狀態,釋放套接字資源。 showImg(https://segmentfault.com/img/remote/1460000018918991); TCP三次握手和四次揮手的問題在面試中是最為常見的考點...
閱讀 3164·2019-08-30 15:55
閱讀 2945·2019-08-30 13:46
閱讀 1447·2019-08-29 17:29
閱讀 3514·2019-08-29 11:08
閱讀 3439·2019-08-29 11:04
閱讀 1088·2019-08-28 18:20
閱讀 545·2019-08-26 13:37
閱讀 1327·2019-08-26 11:49