一、引言
TCP/IP協議簇是目前internet網的事實上的協議簇,它相對於國際標準化組織制定的OSI參考模型的七層協議(物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層)不同,它只有四層(鏈路層、網路層、運輸層、應用層)。分層的目的是將一個複雜的問題分解,每一層專注於一個功能點,單一職責。
二、分層
1.四層協議如下:
- 鏈路層,通常包括裝置驅動程式、網路介面卡、傳輸介質。處理物理介面細節。
- 網路層,處理網路中分組的活動,點到點,點到多端。包括IP協議、ICMP協議、IGMP協議等。
- 運輸層,提供兩臺主機上的兩個應用程式的端到端通訊。包括TCP協議、UDP協議。
- 應用層,處理特定應用的細節。如HTTP協議,FTP協議,SSH協議等等。
2.常用協議概覽(由下至上)
- ARP協議與RARP協議,用於轉換IP地址與MAC地址。
- ARP協議:地址解析協議(Address Resolution Protocol),IP地址 ---> MAC地址;
- RARP協議:反地址解析協議(Reverse Address Resolution Protocol),MAC地址 ---> IP地址;
- IP協議是網路層主要協議,ICMP協議是IP協議的附屬協議。
- IP協議:網際協議(Internet Protocol),控制點到點傳輸。
IP傳給鏈路層的資料單元叫IP資料包(IP datagram)
。 - ICMP協議:網路控制訊息協議(Internet Control Message Protocol),用於與其他機器交換錯誤報文資訊與其他重要資訊。
- IGMP協議:網際組管理協議(Internet Group Management Protocol),用於把一個UDP資料包多播到多個主機上。
- IP協議:網際協議(Internet Protocol),控制點到點傳輸。
- TCP協議與UDP協議,用於規定傳輸方式。都是IP協議的上層協議。
- TCP協議:傳輸控制協議(Transmission Control Protocol),用於提供端到端的、面向連線的、可靠的、基於位元組流的通訊協議。他需要三次握手建立連線,四次握手關閉連線。
TCP傳給IP的資料單元叫做TCP段(TCP segment)
。 - UDP協議:使用者資料包協議(User Datagram Protocol),為應用程式傳送/接收資料包(一定位元組數的資訊單元)。與TCP不同,UDP不是可靠的傳輸協議。常用的基於UDP的應用協議有DNS協議、TFTP協議等等。
UDP傳給IP的資料單元叫UDP資料包(UDP datagram)
。UDP資料包首部長8位元組。
- TCP協議:傳輸控制協議(Transmission Control Protocol),用於提供端到端的、面向連線的、可靠的、基於位元組流的通訊協議。他需要三次握手建立連線,四次握手關閉連線。
- HTTP協議、DNS協議、FTP協議等,這些協議都有其具體的應用場景。
- HTTP協議:超文字傳輸協議(HyperText Transfer Protocol),常用的網站協議。
- DNS協議:域名解析協議(Domain Name System),只有一個用途,將常見的域名地址(如www.baidu.com)解析成IP地址(如127.0.0.1)。
- FTP協議:檔案傳輸協議(File Transfer Protocol),正如其名,就是用來傳輸檔案用的。
三、網際網路的地址(IP地址)
internet上的介面都有唯一的一個IP地址。常用的IP地址長度是32bit,這32bit常寫成4個十進位制數(如127.0.0.1,每一個數最大為255)。如果一臺主機有多個網路介面,那麼每一個介面對應一個IP地址。所有的IP地址又可以分為三類:單播地址(目的為單個主機)
、多播地址(目的為同一組的所有主機)
、廣播地址(目的為給定網路的所有主機)
。
四、埠號
埠號,是用來區分一臺或多臺主機上的那些應用在通訊。你想啊,兩臺主機通訊,每臺主機上有n個應用程式在執行,鬼知道是哪個應用程式與哪個應用程式在通訊,所以有了埠號。傳輸層使用16bit來表示埠號。也就是說一臺機器最多有六萬多個埠號(0~65535)。埠號分類如下:
- 0,為保留埠號,不使用(若傳送過程不準備接受回覆訊息,則可以作為源埠)。
- 知名埠號(1~1023),由Internet號分配機構(Internet Assigned Numbers Authority,IANA)來管理。如 22-SSH、25-SMTP、80-HTTP等等。伺服器一般通過知名埠號來標識。檢視知名埠分配方式如下:
- 在Unix/Linix中,輸入
less /etc/services
檢視; - 檢視連結:線上工具-常用埠號;
- 檢視連線:維基百科-TCP/UDP埠列表;
- 在Unix/Linix中,輸入
- 零時埠號(1024~5000),系統自動分配的。客戶端一般不需要關心它使用的埠號,所以採用臨時埠號。
- 其他服務埠號(5001~65535),其他服務埠號(internet上不常用的服務)。如xdebug(PHP程式碼除錯)預設埠號9000、Fiddler(http抓包工具)預設http代理埠號8888等等。
五、客戶與服務模型
大部分的網路應用都是使用的客戶端+伺服器模型。讓伺服器為客戶端提供一些特定服務。通常服務可以分為兩類:重複型
與併發型
1.重複型服務
a. 等待一個客戶端請求到來。
b. 處理該客戶端請求。
c. 傳送響應給該請求的客戶端。
d. 返回a步驟。
複製程式碼
當出來一個客戶端請求的時候,無法為其他客戶端提供服務。
2.併發型服務
a. 等待一個客戶端請求到來。
b. 啟動一個新的服務(程式/執行緒/任務等)來處理該客戶端請求。
新服務處理該請求返回響應給該請求客戶端。
c. 返回a步驟。
複製程式碼
併發型服務優點在於可以同時處理多個請求。
都看到這裡了,要不要掃二維碼關注一下微信公眾號林灣村龍貓,會有意外驚喜喲。