TCP/IP詳解(包含ack,seq)


前言

個人認為在web開發中,對於TCP/IP協議的理解是首當其沖的,在大多數框架的沖擊下,使我們淡化了對於TCP/IP協議的理解。

理解好TCP/IP對於每個web開發者都是很有必要的。

TCP/IP協議

通常使用的網絡(包括互聯網)是在 TCP/IP 協議族的基礎上運作 的。而 HTTP 屬於它內部的一個子集。

 1.TCP/IP使用的是四層模型

①應用層--->②傳輸層(tcp協議)--->③網絡層(IP協議)--->④數據鏈路層

 1.應用層

應用層決定了向用戶提供應用服務時通信的活動。 TCP/IP 協議族內預存了各類通用的應用服務。比如,FTP(File Transfer Protocol,文件傳輸協議)和 DNS(Domain Name System,域 名系統)服務就是其中兩類。 HTTP 協議也處於該層。

2.傳輸層

傳輸層對上層應用層,提供處於網絡連接中的兩台計算機之間的數據 傳輸。 在傳輸層有兩個性質不同的協議:TCP(Transmission Control Protocol,傳輸控制協議)和 UDP(User Data Protocol,用戶數據報 協議)。

3.網絡層(又名網絡互連層)

網絡層用來處理在網絡上流動的數據包。數據包是網絡傳輸的最小數 據單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方計 算機,並把數據包傳送給對方。 與對方計算機之間通過多台計算機或網絡設備進行傳輸時,網絡層所 起的作用就是在眾多的選項內選擇一條傳輸路線。

4.鏈路層(又名數據鏈路層,網絡接口層)

用來處理連接網絡的硬件部分。包括控制操作系統、硬件的設備驅 動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等 物理可見部分(還包括連接器等一切傳輸媒介)。硬件上的范疇均在 鏈路層的作用范圍之內。

 

利用 TCP/IP 協議族進行網絡通信時,會通過分層順序與對方進行通 信。發送端從應用層往下走,接收端則往應用層往上走。

我們用 HTTP 舉例來說明,首先作為發送端的客戶端在應用層 (HTTP 協議)發出一個想看某個 Web 頁面的 HTTP 請求。

接着,為了傳輸方便,在傳輸層(TCP 協議)把從應用層處收到的數 據(HTTP 請求報文)進行分割,並在各個報文上打上標記序號及端 口號后轉發給網絡層。

在網絡層(IP 協議),增加作為通信目的地的 MAC 地址后轉發給鏈 路層。這樣一來,發往網絡的通信請求就准備齊全了。

接收端的服務器在鏈路層接收到數據,按序往上層發送,一直到應用 層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的 HTTP 請求。

 

 確保可靠性的TCP協議

 按層次分,TCP 位於傳輸層,提供可靠的字節流服務。

所謂的字節流服務(Byte Stream Service)是指,為了方便傳輸,將大 塊數據分割成以報文段(segment)為單位的數據包進行管理。而可 靠的傳輸服務是指,能夠把數據准確可靠地傳給對方。一言以蔽之, TCP 協議為了更容易傳送大數據才把數據分割,而且 TCP 協議能夠 確認數據最終是否送達到對方。

確保數據能到達目標 為了准確無誤地將數據送達目標處,TCP 協議采用了三次握手 (three-way handshaking)策略。用 TCP 協議把數據包送出去后,TCP 不會對傳送后的情況置之不理,它一定會向對方確認是否成功送達。

若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序發 送相同的數據包。

 

在第一次消息發送中,Client隨機選取一個序列號(此處為X)作為自己的初始序號發送給Server;

第二次消息Server使用ACK對A的數據包進行確認,因為已經收到了序列號為X的數據包,准備接收序列號為X+1的包,同時B告訴A自己的初始序列號,就是seq=Y;

第三條消息Client告訴Server收到了Server的確認消息並准備建立連接,此時Client數據包的序號到Z,故seq=Z,而ACK=Y+1是表示Client正准備接收Server序列號為Y+1的數據包。

seq是數據包本身的序列號;ack是期望對方繼續發送的那個數據包的序列號。

至此,一次連接就算完成了。

在http1.0中,每一次請求都會建立一次連接,而在http1.1中,通過頭部keep-alive字段可設置長連接,在一次連接之內請求所有資源。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM