(二)TCP/IP四層模型


1、基本介紹

TCP/IP協(xié)議,也稱TCP/IP協(xié)議族或TCP/IP協(xié)議棧,其中:

TCP:Transmission Control Protocol 傳輸控制協(xié)議
IP: Internet Protocol 互聯(lián)網(wǎng)協(xié)議

該協(xié)議是目前世界上應(yīng)用最為廣泛的協(xié)議,是以TCP和IP為基礎(chǔ)的不同層次上多個協(xié)議的集合,兩臺主機要實現(xiàn)通訊,都必須遵守TCP/IP協(xié)議。
  
  以下是ISO/OSI七層模型與TCP/IP四層模型對比:

相同點:

  1. ISO/OSI參考模型和TCP/IP參考模型都采用了層次結(jié)構(gòu)的概念;
  2. 都能夠提供面向連接(TCP協(xié)議)和無連接(UDP協(xié)議)兩種通信服務(wù)機制。

不同點:

  1. 前者是七層模型結(jié)構(gòu),后者是四層模型結(jié)構(gòu);
  2. 對可靠性要求不同,TCP/IP參考模型的要求更高;
  3. ISO/OSI參考模型是在協(xié)議開發(fā)之前設(shè)計的,具有通用性;TCP/IP參考模型則是在協(xié)議集已有的情況下建立的,不適用非TCP/IP網(wǎng)絡(luò);
  4. 實際市場應(yīng)用不同, ISO/OSI參考模型只是理論上的模型,并沒有成熟的產(chǎn)品支持;而TCP/IP參考模型已經(jīng)成為“實際上的國際標準”。

2、網(wǎng)絡(luò)接口層

網(wǎng)絡(luò)接口層與OSI參考模型中的物理層數(shù)據(jù)鏈路層相對應(yīng),它負責(zé)監(jiān)視數(shù)據(jù)在主機和網(wǎng)絡(luò)之間的交換。實際上TCP/IP本身并未定義該層的協(xié)議,而由參與互聯(lián)的各個網(wǎng)絡(luò)使用其自己的物理層和數(shù)據(jù)鏈路層協(xié)議,然后與TCP/IP的網(wǎng)絡(luò)接口層進行連接。
  地址解析協(xié)議(ARP)工作在此層,即OSI參考模型中的數(shù)據(jù)鏈路層,負責(zé)將IP地址轉(zhuǎn)譯成MAC地址,可在系統(tǒng)的命令提示符中輸入“arp -a”來查看:


3、網(wǎng)際互聯(lián)層

網(wǎng)際互聯(lián)層對應(yīng)OSI參考模型的網(wǎng)絡(luò)層,主要解決主機到主機的通信問題。
  該層有3個主要協(xié)議:網(wǎng)際協(xié)議(IP)、互聯(lián)網(wǎng)組管理協(xié)議(IGMP)、互聯(lián)網(wǎng)控制報文協(xié)議(ICMP)。其中互聯(lián)網(wǎng)控制報文協(xié)議(ICMP)可以用來查看當(dāng)前計算機是否與某指定IP的計算機實現(xiàn)網(wǎng)絡(luò)互通,利用該協(xié)議可以給指定IP發(fā)送一個數(shù)據(jù)包,當(dāng)收到回復(fù)后,證明網(wǎng)絡(luò)已經(jīng)互相連通,可在系統(tǒng)的命令提示符中輸入“ping 192.168.XXX.X(某IP地址)”來查看:


4、傳輸層

傳輸層對應(yīng)OSI參考模型的傳輸層,為應(yīng)用層實體提供端到端的通信功能,保證了數(shù)據(jù)包的順序傳送及數(shù)據(jù)的完整性。該層有兩個最主要的功能,第一定義了兩個主要的協(xié)議:傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報協(xié)議(UDP),其中TCP協(xié)議是可靠的、面向連接的協(xié)議;UDP協(xié)議是不可靠的,面向無連接的協(xié)議;第二,確定接收端的端口號即發(fā)送端的端口號。
<br />

1.端口

當(dāng)我們發(fā)送或接受數(shù)據(jù)時,通過IP地址可以確定目標計算機,但該主機可以提供許多服務(wù),比如Web服務(wù)、FTP服務(wù)、SMTP服務(wù)等,主機如何區(qū)分并確定應(yīng)該使用哪項服務(wù)來處理數(shù)據(jù)就是通過端口號。
  端口號分為源端口和目的端口,各占16位,因此,總共可用的端口號總數(shù)為2^16,即從0開始至65535,共計65536個。端口分為以下三類:

  • 周知端口
    周知端口是眾所周知的端口號,范圍從0到1023,例如80端口分配給WWW服務(wù),21端口分配給FTP服務(wù)等,其他常用端口號詳見本篇第五部分“應(yīng)用層”。
  • 注冊端口
    端口1024到49151,分配給用戶進程或應(yīng)用程序;這些進程主要是用戶選擇安裝的一些應(yīng)用程序,而不是已經(jīng)分配好了公認端口的常用程序;這些端口在沒有被服務(wù)器資源占用的時候,可以用用戶端動態(tài)選用為源端口。
  • 動態(tài)端口
    動態(tài)端口的范圍是從49152到65535。之所以稱為動態(tài)端口,是因為它 一般不固定分配某種服務(wù),而是動態(tài)分配。

可在系統(tǒng)的命令提示符中輸入“netstat -an”來查看,其中:

“-a”是查看所有連接和監(jiān)聽接口
“-n”是顯示IP地址和端口號,而不顯示域名和服務(wù)名



注意:
1.最下方紅色方框圈起的表示本機的隨機端口連接到對方的80端口,說明本機開啟了網(wǎng)頁服務(wù);
2.關(guān)于常見的幾種“狀態(tài)”:LISTENING代表正在被監(jiān)聽,表明開啟了一些本機服務(wù),ESTABLISHED代表已連接,并且在持續(xù)連接的狀態(tài),CLOSE_WAIT、TIME_WAIT表示連接超時;
3.UDP協(xié)議不像TCP協(xié)議那樣需要首先經(jīng)過“三次握手”確認對方是否存在,而是直接傳送數(shù)據(jù),因此不需要監(jiān)聽,也就不會有狀態(tài);
4.此方法也可用于判斷并確定對方的IP地址。

<br />

2.TCP協(xié)議

下面著重講解TCP協(xié)議的“三次握手”,在此之前先來了解TCP報文及格式:當(dāng)應(yīng)用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)?、?位字節(jié)表示的數(shù)據(jù)流時,TCP會把數(shù)據(jù)流分割成適當(dāng)長度的報文段,之后TCP把數(shù)據(jù)包傳給IP層,由它來通過網(wǎng)絡(luò)將包傳送給接收端實體的TCP層,TCP的報文格式如下:

上圖中有幾個字段需要重點介紹下:

  1. 序號:seq序號,占32位,用來標識從TCP源端向目的端發(fā)送的字節(jié)流,發(fā)起方發(fā)送數(shù)據(jù)時對此進行標記。
  2. 確認序號:ack序號,占32位,只有ACK標志位為1時,確認序號字段才有效,ack=seq+1。
  3. 標志位:共6個,即URG、ACK、PSH、RST、SYN、FIN,具體含義如下:
    URG:緊急指針有效。
    ACK:確認序號有效。
    PSH:接收方應(yīng)該盡快將這個報文交給應(yīng)用層。
    RST:重置連接。
    SYN:發(fā)起一個新連接。
    FIN:釋放一個連接。

再來看三次握手(Three-Way Handshake),即建立TCP連接,指建立一個TCP連接時,需要連接雙方總共發(fā)送3個包以確認連接的建立。TCP為了保證報文傳輸?shù)目煽?,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的字節(jié)發(fā)回一個相應(yīng)的確認(ACK);如果發(fā)送端實體在合理的往返時延(RTT)內(nèi)未收到確認,那么對應(yīng)的數(shù)據(jù)(假設(shè)丟失了)將會被重傳,整個流程如下圖所示:

  1. 第一次握手:主機A將標志位SYN置為1,隨機產(chǎn)生一個值seq=J,并將該數(shù)據(jù)包發(fā)送給主機B,主機A進入SYN_SENT狀態(tài),等待主機B確認。
  2. 第二次握手:主機B收到數(shù)據(jù)包后由標志位SYN=1得知主機A請求建立連接,主機B將標志位SYN和ACK都置為1,ack=J+1,隨機產(chǎn)生一個值seq=K,并將該數(shù)據(jù)包發(fā)送給主機A以確認連接請求,主機B進入SYN_RCVD狀態(tài)。
  3. 第三次握手:主機A收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,并將該數(shù)據(jù)包發(fā)送給主機B,主機B檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,主機A和主機B進入ESTABLISHED狀態(tài),完成三次握手,隨后就可以開始傳輸數(shù)據(jù)了。

關(guān)于“三次握手”的由來,可以參考這個經(jīng)典的兩軍問題

<br />

3.UDP協(xié)議

最后簡單介紹一下UDP協(xié)議,報文格式如下:



  跟之前的TCP協(xié)議報文格式相比,明顯更加精簡,這也意味著解析UDP包頭所需要的資源更少,因此UDP協(xié)議傳輸?shù)母臁?/p>


5、應(yīng)用層

應(yīng)用層對應(yīng)OSI參考模型的高層,為用戶提供所需要的各種服務(wù),常用協(xié)議如下:

  1. DNS:域名系統(tǒng)
    端口號53
    DNS是因特網(wǎng)使用的命名系統(tǒng),用來把便于人們使用的機器名字轉(zhuǎn)換為IP地址。

  2. FTP:文件傳輸協(xié)議
    端口號21用于FTP的登陸認證,端口號20用于實際的數(shù)據(jù)傳輸
    FTP是因特網(wǎng)上使用得最廣泛的文件傳送協(xié)議。FTP提供交互式的訪問,允許客戶指明文件類型與格式,并允許文件具有存取權(quán)限。

  3. Telnet:遠程登錄協(xié)議
    端口號23
    Telnet是一個簡單的遠程登錄協(xié)議,它也是因特網(wǎng)的正式標準。
    但是需要注意,現(xiàn)在默認不開啟23端口,因為Telnet協(xié)議在后臺使用明文傳遞,只要被截獲就可以讀取傳遞的數(shù)據(jù),甚至不需要破解,因此要盡可能的不使用23端口而使用其他服務(wù)代替。

  4. HTTP:超文本傳輸協(xié)議
    端口號80
    HTTP是面向?qū)ο蟮膽?yīng)用層協(xié)議,它是萬維網(wǎng)上能夠可靠地交換文件的重要基礎(chǔ)。HTTP使用面向連接的TCP作為運輸層協(xié)議,保證了數(shù)據(jù)的可靠傳輸。

  5. SMTP:簡單郵件傳送協(xié)議
    端口號25
    SMTP規(guī)定了在兩個相互通信的SMTP進程之間應(yīng)如何交換信息。SMTP通信的三個階段:建立連接、郵件傳送、連接釋放。

  6. POP3:郵件讀取協(xié)議
    端口號110
    POP3(Post Office Protocol 3)協(xié)議通常被用來接收電子郵件。


6、數(shù)據(jù)的封裝與街封裝

通過示例可以更直觀的了解數(shù)據(jù)的封裝與解封裝過程,同時為了便于閱讀文字,動畫切換間隔設(shè)置的比較長。


版權(quán)聲明:歡迎轉(zhuǎn)載,歡迎擴散,但轉(zhuǎn)載時請標明作者以及原文出處,謝謝合作!             ↓↓↓
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,180評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,340評論 6 174
  • 協(xié)議基礎(chǔ) 協(xié)議就是計算機之間通過網(wǎng)絡(luò)實現(xiàn)通信時實現(xiàn)所達成的一種“約定”,這種約定使得那些由不同廠商的設(shè)備,不同的C...
    d9fc24a0c9a9閱讀 2,502評論 0 6
  • 名詞延伸 通俗的說,域名就相當(dāng)于一個家庭的門牌號碼,別人通過這個號碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,783評論 2 56
  • 李嫵娟 周口太康 分享堅持第25天 古人云,羊羔雖美,眾口難調(diào)??倳腥苏f你好,也會有人說你不好,但只要...
    李嫵娟閱讀 316評論 1 3

友情鏈接更多精彩內(nèi)容