網絡干貨,無論是運維還是開發都要知道的網絡知識系列之(三)


TCP/IP協議簇(DoD參考模型)

用於簡化OSI層次,以及相關的標准。

²  傳輸控制協議(tcp/ip)族是相關國防部(DoD)所創建的,主要用來確保數據的完整性及在毀滅性戰爭中維持通信

²  是由一組不同功能的協議組合在一起構成的協議簇

²  利用一組協議完成OSI所實現的功能

====================TCP / IP=====================
應用層:    它只負責產生相應格式的數據  ssh ftp nfs cifs dns http smtp pop3
-----------------------------------
傳輸層:    定義數據傳輸的兩種模式:
        TCP(傳輸控制協議:面向連接,可靠的,效率相對不高)   
        UDP(用戶數據報協議:非面向連接,不可靠的,但效率高)
-----------------------------------
網絡層:    連接不同的網絡如以太網、令牌環網
        IP (路由,分片) 、ICMP、 IGMP    
-----------------------------------
數據鏈路層:以太網傳輸
        ARP ( 地址解析協議,作用是將IP解析成MAC )
-----------------------------------
物理層:    主要任務是規定各種傳輸介質和接口與傳輸信號相關的一些特性
-----------------------------------

TCP/IP協議簇中的相關協議

TCP/IP協議簇---應用層

TCP/IP協議簇---主機到主機層

TCP與UDP對比

傳輸控制協議(TCP)

用戶數據報協議(UDP)

面向連接

無連接

可靠傳輸

不可靠傳輸

流控

盡力而為,盡力傳遞

使用TCP應用:

WEB瀏覽器;電子郵件;文件傳輸程序

使用UDP的應用:

域名系統(DNS);視頻流;IP語音(VoIP)

 

TCP相關報文結構

    源端口:即本地發起連接的端口
    目標端口:即要訪問的服務的端口
    序列號:因為傳輸層會將上層的數據進行分段,因此需要對分段數據進行編號
           同時也便於數據的重組
    驗證號:用於對數據的進行驗證

UDP相關報文結構

TCP/UDP端口號(1~65535)

1.源端口隨機分配,目標端口使用知名端口
2.應用客戶端使用的源端口號一般為系統中未使用的且大於1023的
3.目的端口號為服務器端應用服務的進程,如telnet為23

TCP三次握手過程

置位概念: 根據TCP的包頭字段,存在三個重要的標識ACK SYN FIN

² ACK:表示驗證字段

² SYN: 位數置1,表示建立TCP連接

² FIN:位數置1,表示斷開TCP連接

建立過程說明:

①由主機A發送建立TCP連接的請求報文,其中報文中包含seq序列號,是由發送

端隨機生成的,並且還將報文中SYN字段置為1,表示需要建立TCP連接

②主機B會回復A發送的TCP連接請求報文,其中包含seq序列號,是由回復端隨

機生成的,並且將回復報文的SYN字段置1,而且會產生ACK字段,ACK字段數

值是在A發過來的seq序列號基礎上加1進行回復,以便A收到信息時,知曉自

己的TCP建立請求已得到了驗證

③A端收到B端發送的TCP建立驗證請求后,會使自己的序列號加1表示,並且再

次回復ACK驗證請求,在B端發送過來的seq基礎上加1,進行回復

①一開始,建立連接之前服務器和客戶端的狀態都為CLOSED。***
②服務器創建socket后開始監聽,變為LISTEN狀態。               ***
③客戶端請求建立連接,向服務器發送SYN報文,客戶端的狀態變
為SYN_SENT。   ***
④服務器收到客戶端的報文后向客戶端發送ACK和SYN報文,此時服務器的
狀態變為SYN_RCVD。    ***
⑤然后,客戶端收到ACK、SYN,就向服務器發送ACK,客戶端狀態
變為ESTABLISHED,                ***
服務器收到客戶端的ACK后也變為ESTABLISHED。此時,3次握手完成,
連接建立! 

TCP四次揮手過程

建立過程說明:

①主機A發送斷開TCP連接請求的報文,其中報文中包含seq序列號,是由發送端隨機生成的,並且還將報文中FIN字段置為1,表示需要斷開TCP連接

②主機B會回復A發送的TCP斷開請求報文,其中包含seq序列號,是由回復端隨機生成的,而且會產生ACK字段,ACK字段數值,是在A發過來的seq序列號基

礎上加1進行回復,以便A收到信息時,知曉自己的TCP斷開請求已得到了驗證

③主機B在回復完A的TCP斷開請求后,不會馬上就進行TCP連接的斷開,主機B會先確保斷開前,所有傳輸到A的數據是否已經傳輸完畢,一旦確認傳輸數據完畢

就會將回復報文的FIN字段置1,並產生隨機seq序列號。

④主機A收到主機B的TCP斷開請求后,會回復主機B的斷開請求,包含隨機生成的seq字段和ack字段,ack字段會在主機B的TCP斷開請求的seq基礎上

加1,從而完成主機B請求的驗證回復。

至此TCP斷開的4次揮手過程完畢

由於tcp連接是全雙工的,斷開連接會比建立連接麻煩一點點。

①客戶端先向服務器發送FIN報文,請求斷開連接,其狀態變為FIN_WAIT1。

②服務器收到FIN后向客戶端發生ACK,服務器狀態變為CLOSE_WAIT。

③客戶端收到ACK后就進入FIN_WAIT2狀態。此時連接已經斷開了一半了。如果服務器還有數據要發送給客戶端,就會繼續發送。

④直到發完了,就發送FIN報文,此時服務器進入LAST_ACK狀態。

⑤客戶端收到服務器的FIN后,馬上發送ACK給服務器,此時客戶端進入TIME_WAIT狀態

⑥再過了2MSL長的時間后進入CLOSED狀態。服務器收到客戶端的ACK就進入CLOSED狀態。

 至此,還有一個狀態沒有提及:CLOSING狀態。

 CLOSING狀態表示:

     客戶端發生了FIN,但沒有收到服務器的ACK,卻收到了服務器的FIN。

     這種情況發生在服務器發送的ACK丟包的時候,因為網絡傳輸有時會有意外。

四次分手:

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收 到一個 FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關 閉。

1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送(報文段4)。

(2)服務器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1(報文段5)。和SYN一樣,一個FIN將占用一個序號。

(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A(報文段6)。

(4)客戶端A發回ACK報文確認,並將確認序號設置為收到序號加1(報文段7)。

1.為什么建立連接協議是三次握手,而關閉連接卻是四次握手呢?

這是因為服務端的LISTEN狀態下的SOCKET當收到SYN報文的建連請求后,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作 用)放在一個報文里來發送。但關閉連接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了;但未必你所有的數據都全部發送給對方了,所 以你可以未必會馬上會關閉SOCKET,也即你可能還需要發送一些數據給對方之后,再發送FIN報文給對方來表示你同意現在可以關閉連接了,所以它這里的 ACK報文和FIN報文多數情況下都是分開發送的。

2.為什么TIME_WAIT狀態還需要等2MSL后才能返回到CLOSED狀態?

這是因為雖然雙方都同意關閉連接了,而且握手的4個報文也都協調和發送完畢,按理可以直接回到CLOSED狀態(就好比 從SYN_SEND狀態到ESTABLISH狀態那樣);但是因為我們必須要假想網絡是不可靠的,你無法保證你最后發送的ACK報文會一定被對方收到,因 此對方處於LAST_ACK狀態下的SOCKET可能會因為超時未收到ACK報文,而重發FIN報文,所以這個TIME_WAIT狀態的作用就是用來重發 可能丟失的ACK報文。

TCP的十一種狀態轉移總結

狀態出現方式

狀態出現環境

狀態名稱

狀態描述

TCP建立過程

涉及5種狀態

服務端/客戶端

CLOSED

默認初始化狀態

服務端

LISTEN

建立socket,進入監聽狀態

客戶端

SYN_SENT

發送syn報文,進入syn發送狀態

服務端

SYN_RCVD

接收syn報文,並回復ack及syn報文

客戶端/服務端

ESTABLISHED

接收syn報文,回復ack,建立連接(客戶端)

接收ack報文,建立連接(服務端)

TCP斷開過程

涉及6種狀態

服務端/客戶端

ESTABLISHED

默認斷開前初始化狀態

客戶端

FIN_WAIT1

發送斷開請求FIN報文

服務端

CLOSE_WAIT

收到FIN后向客戶端發生ACK

客戶端

FIN_WAIT2

收到服務端返回的ACK報文,等待數據傳輸

服務端

LAST_ACK

發送FIN斷開請求報文

客戶端

TIME_WAIT

回復FIN斷開請求,發送ack報文

服務端/客戶端

CLOSED

收到ack報文,立即轉變為斷開狀態

等待2MSL后,進入斷開狀態

客戶端

CLOSEING

沒有收到回復FIN報文的ACK,直接收到FIN

 

TCP/IP協議簇---因特網層

定義了最重要的協議IP協議,和路由協議。

 


免責聲明!

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



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