一、什么是TCP/IP
TCP/IP是一個協議族,是因為TCP/IP協議包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等許多協議,這些協議一起稱為TCP/IP協議。通信類似於語言的溝通,可以把協議理解為語言溝通,大家都說中文,咱們兩個人能夠互相交流。
TCP/IP協議族按照層次分為鏈路層、網絡層、傳輸層、應用層四個層次。(與TCP/IP協議並列的還有OSI網絡框架模型---開放式系統互連參考模型,分為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層七個層次)
為了更加形象的說明協議,可以把“數據鏈路層”比作一個人,但是這個人不會說話,交流起來比較困難。為了更方便的交流,便引出了“網絡層”,可以認為它是會說話的人,那么大家都會說話,但是一個人說英語一個人說中文,大家還是不能夠更好的溝通。那么接下來大家該討論下如何溝通,必須大家都要說中文,這樣大家才能理解彼此說的是什么意思,“傳輸層”就可以認為會說中文的人。這樣在傳輸層大家就能實現正常的通信了。為了大家更方便的溝通,或者說讓溝通看起來更加華麗更加實用。這時候“應用層”便應運而生。其實就是更方便,更有效大家溝通,可以把它比作為中文說的很好的人。
按照層次由上到下,層層包裝。
1、應用層:最上面的就是應用層了,這里面有http,ftp等等我們熟悉的協議。(TCP/IP的分層中,將OSI參考模型中的會話層、表示層和應用層的功能都集中到了應用程序中實現。TCP/IP應用的架構絕大多數屬於客戶端/服務器模型。)
負責直接和應用程序接口並提供常見的網絡應用服務,此外,為了向應用程序提供有效的網絡服務,應用層還需要確立相互通信的應用進程的有效性並提供雙方之間的同步,需要提供應用進程所需的信息交換和遠程操作,需要建立錯誤恢復的機制以保證應用層數據的一致性。(有FTP協議、TFTP協議、Telnet協議、DNS協議、HTTP協議)。
向用戶提供一組常用的應用程序,比如電子郵件、文件傳輸訪問、遠程登錄等。遠程登錄TELNET使用TELNET協議提供在網絡其它主機上注冊的接口。TELNET會話提供了基於字符的虛擬終端。文件傳輸訪問FTP使用FTP協議來提供網絡內機器間的文件拷貝功能。
DNS協議:主要功能是通過用戶友好的名稱為用戶提供域名解析服務,即將主機名域名解析為IP地址。
HTTP協議:超文本傳輸協議,是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則。
SMTP協議:Simple Mail Transfer Protocol(簡單郵件傳輸協議)。
SNMP協議:Simple Network manage Protocol(簡單網絡管理協議)。
FTP協議:File Transfer Protocol(文件傳輸協議)。
應用層的主要應用:
WWW:瀏覽器和服務端之間通信所用的協議是HTTP協議,所傳輸數據的主要格式為HTML,WWW中的HTTP屬於OSI應用層的協議,HTML屬於表示層的協議。
電子郵件:發送電子郵件時用到的協議是SMTP。最初,只能以文件格式發送電子郵件。然后現在的電子郵件的格式由MIME協議擴展之后,就可以發送聲音、圖像等各式各樣的信息。MIME屬於表示層的協議。
文件傳輸(FTP):文件傳輸是指將其它計算機磁盤上的文件轉移到本地計算機上,或將本地磁盤上的文件傳送到其它計算機磁盤上。該文件傳輸過程使用的協議叫做FTP協議。在FTP中進行文件傳輸時會建立兩個TCP連接,分別是發送傳輸請求時所要用到的控制連接與實際傳輸數據時所要用到的數據連接。
遠程登錄(TELNET與SSH):遠程登錄是指登錄到遠程的計算機上,使那台計算機上的程序得以運行的一種功能。遠程登錄常用TELNET與SSH兩種協議。(當然還有其它一些協議)
網絡管理(SNMP):在TCP/IP中進行網絡管理時,采用SNMP(Simple Network Management Protocol)協議。使用SNMP協議管理的主機、網橋、路由器等稱作SNMP代理,而進行管理的那一端叫做管理器。SNMP就是這個管理器和代理要用到的協議。在SNMP的代理端,保存着網絡接口的信息、通信數據量、異常數據量以及設備溫度等信息。這些信息可以通過MIB(Management Information Base)訪問。因此,在TCP/IP的網絡管理中,SNMP屬於應用協議,MIB屬於表示層協議。
2、傳輸層:著名的TCP和UDP協議就在這個層次(不要告訴我你沒用過UDP玩星際)。
提供應用程序間的通信。其功能包括:
(1)格式化信息流;
(2)提供可靠傳輸。為實現后者,傳輸層協議規定接收端必須發回確認,並且假如分組丟失,必須重新發送。
UDP協議(User Datagram Protocol,用戶數據報協議)是一種不可靠無連接的傳輸層協議,不考慮流控制、錯誤控制,沒有重傳機制,不會對分組進行順序檢查和排序。(UDP報頭含8字節定長和2字節倍數的數據<不是2字節倍數時需要填充位>)(UDP是一種面向無連接的傳輸層協議。UDP不關心對端是否真正收到了傳送過去的數據。如果需要檢查對端是否收到分組數據包,或者對端是否連接到網絡,則需要在應用程序中實現。UDP常用在分組數據較少或多播、廣播通信以及視頻通信等多媒體領域。)
TCP協議(Transport Control Protocol,傳輸控制協議)是一種面向連接、可靠的、基於字節流的傳輸層協議,采用了確認機制、超時重傳機制,還會對接收到的TCP報文段進行重新排列整理。(TCP報頭含20字節定長、選項和填充<選項和填充小於等於40字節>)(TCP是一種面向連接的傳輸層協議。它可以保證兩端通信主機之間的通信可達。TCP能夠正確處理傳輸過程中丟包、傳輸順序亂掉等異常情況。)
UDP優點:
控制選項少,無須建立連接,從而使得數據傳輸過程中的延遲小、數據傳輸效率高。
UDP適合對可靠性不高,或網絡質量有保障,或對實時性要求較高的應用程序。
TCP優點:
能保證可靠性、穩定性。
TCP適合用於端到端的通信,適用於對可靠性要求較高的服務。
3、網絡層:用來處理網絡上流動的數據包(網絡傳輸中最小的數據單元),規定了怎樣的路徑把數據包傳輸到目標計算機,並把數據包傳送給對方。(與tcp/ip協議密切相關的有IP協議、ARP協議、RARP協議)。IP協議就在這里,它負責對數據加上IP地址和其他的數據(后面會講到)以確定傳輸的目標。
負責相鄰計算機之間的通信。其功能包括三方面。
(1)處理來自傳輸層的分組發送請求,收到請求后,將分組裝入IP數據報,填充報頭,選擇去往信宿機的路徑,然后將數據報發往適當的網絡接口。
(2)處理輸入數據報:首先檢查其合法性,然后進行尋徑--假如該數據報已到達信宿機,則去掉報頭,將剩下部分交給適當的傳輸協議;假如該數據報尚未到達信宿,則轉發該數據報。
(3)處理路徑、流控、擁塞等問題。
IP協議:Internetworking Protocol(網間網協議),IP是跨越網絡傳送數據包,使整個互聯網都能收到數據的協議。IP也是分組交換的一種協議,但是它不具備重發機制,因此它是不可靠傳輸協議。
IPv4:頭部由20字節定長和一個可選的變長部分(小於等於40字節)組成,32位記錄源端IP地址,32位記錄目的端IP地址,所有內容長度最大為2^16=65476字節。
IPv6:頭部由40字節定長組成。128位記錄源端IP地址,128位記錄目的端IP地址。
ARP協議:地址解析協議,專用於將32位IP地址映射到網卡的48位MAC地址(從分組數據包的IP地址中解析出物理地址(MAC地址)的一種協議。)。
RARP協議:主要用於將網卡的48位MAC地址轉換為32位IP地址。
ICMP協議:Internet Control Message Protocol(互聯網控制信息協議),IP數據包在傳輸的途中一旦發生異常導致無法到達目的地址時,需要給發送端發送一個異常通知。ICMP就是為了這個功能制定的。
4、鏈路層:用來處理連接網絡的硬件部分,包括控制操作系統、硬件的設備驅動和網絡適配器,及光纖等物理可見的部分。硬件上的范疇均屬於鏈路層的作用范圍之內。
TCP/IP軟件的最底層,負責接收IP數據報並通過網絡發送之,或者從網絡上接收物理幀,抽出IP數據報,交給IP層。
這個層次為待傳送的數據加入一個以太網協議頭,並進行CRC編碼,為最后的數據傳輸做准備。再往下則是硬件層次了,負責網絡的傳輸,這個層次的定義包括網線的制式,網卡的定義等等(這些我們就不用關心了,我們也不做網卡),所以有些書並不把這個層次放在tcp/ip協議族里面,因為它幾乎和tcp/ip協議的編寫者沒有任何的關系。
發送協議的主機從上自下將數據按照協議封裝,而接收數據的主機則按照協議從得到的數據包解開,最后拿到需要的數據。這種結構非常有棧的味道,所以某些文章也把tcp/ip協議族稱為tcp/ip協議棧。
通俗理解:
二、以HTTP協議為例的工作流程
與之密切相關的協議有IP/TCP/DNS
DNS解析主機名域名為IP地址后,IP通過ARP解析后找到目的主機,TCP則通過三次握手與目的主機建立連接。
連接后,若一方想主動取消連接,TCP通過四次揮手與主動主機取消連接。
1、TCP連接建立的三次握手過程:
(前提:A主動打開,B被動打開。客戶端用A表示,服務器端用B表示)
- 客戶端發個請求“開門吶,我要進來”給服務器;
- 服務器發個“進來吧,我去給你開門”給客戶端;
- 客戶端有很客氣的發個“謝謝,我要進來了”給服務器。
2、TCP連接釋放的四次揮手過程
(前提:A主動關閉,B被動關閉。客戶端用A表示,服務器端用B表示)
- 客戶端發個“時間不早了,我要走了”給服務器,等服務器起身送他;
- 服務器聽到了,發個“我知道了,那我送你出門吧”給客戶端,等客戶端走;
- 服務器把門關上后,發個“我關門了”給客戶端,然后等客戶端走(尼瑪~矯情啊);
- 客戶端發個“我知道了,我走了”,之后自己就走了。
三、當訪問一個網頁時,所有協議在其中的作用如下:
四.深入理解TCP/IP