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四層模型對比:
相同點:
- ISO/OSI參考模型和TCP/IP參考模型都采用了層次結(jié)構(gòu)的概念;
- 都能夠提供面向連接(TCP協(xié)議)和無連接(UDP協(xié)議)兩種通信服務(wù)機制。
不同點:
- 前者是七層模型結(jié)構(gòu),后者是四層模型結(jié)構(gòu);
- 對可靠性要求不同,TCP/IP參考模型的要求更高;
- ISO/OSI參考模型是在協(xié)議開發(fā)之前設(shè)計的,具有通用性;TCP/IP參考模型則是在協(xié)議集已有的情況下建立的,不適用非TCP/IP網(wǎng)絡(luò);
- 實際市場應(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的報文格式如下:
上圖中有幾個字段需要重點介紹下:
- 序號:seq序號,占32位,用來標識從TCP源端向目的端發(fā)送的字節(jié)流,發(fā)起方發(fā)送數(shù)據(jù)時對此進行標記。
- 確認序號:ack序號,占32位,只有ACK標志位為1時,確認序號字段才有效,ack=seq+1。
-
標志位:共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è)丟失了)將會被重傳,整個流程如下圖所示:
- 第一次握手:主機A將標志位SYN置為1,隨機產(chǎn)生一個值seq=J,并將該數(shù)據(jù)包發(fā)送給主機B,主機A進入SYN_SENT狀態(tài),等待主機B確認。
- 第二次握手:主機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)。
- 第三次握手:主機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é)議如下:
DNS:域名系統(tǒng)
端口號53
DNS是因特網(wǎng)使用的命名系統(tǒng),用來把便于人們使用的機器名字轉(zhuǎn)換為IP地址。FTP:文件傳輸協(xié)議
端口號21用于FTP的登陸認證,端口號20用于實際的數(shù)據(jù)傳輸
FTP是因特網(wǎng)上使用得最廣泛的文件傳送協(xié)議。FTP提供交互式的訪問,允許客戶指明文件類型與格式,并允許文件具有存取權(quán)限。Telnet:遠程登錄協(xié)議
端口號23
Telnet是一個簡單的遠程登錄協(xié)議,它也是因特網(wǎng)的正式標準。
但是需要注意,現(xiàn)在默認不開啟23端口,因為Telnet協(xié)議在后臺使用明文傳遞,只要被截獲就可以讀取傳遞的數(shù)據(jù),甚至不需要破解,因此要盡可能的不使用23端口而使用其他服務(wù)代替。HTTP:超文本傳輸協(xié)議
端口號80
HTTP是面向?qū)ο蟮膽?yīng)用層協(xié)議,它是萬維網(wǎng)上能夠可靠地交換文件的重要基礎(chǔ)。HTTP使用面向連接的TCP作為運輸層協(xié)議,保證了數(shù)據(jù)的可靠傳輸。SMTP:簡單郵件傳送協(xié)議
端口號25
SMTP規(guī)定了在兩個相互通信的SMTP進程之間應(yīng)如何交換信息。SMTP通信的三個階段:建立連接、郵件傳送、連接釋放。POP3:郵件讀取協(xié)議
端口號110
POP3(Post Office Protocol 3)協(xié)議通常被用來接收電子郵件。
6、數(shù)據(jù)的封裝與街封裝
通過示例可以更直觀的了解數(shù)據(jù)的封裝與解封裝過程,同時為了便于閱讀文字,動畫切換間隔設(shè)置的比較長。

版權(quán)聲明:歡迎轉(zhuǎn)載,歡迎擴散,但轉(zhuǎn)載時請標明作者以及原文出處,謝謝合作! ↓↓↓