### 概述
網絡協議通常分不同層次進行開發,每一層分別負責不同的通信功能。一個協議族,比如TCP/IP,是一組不同層次上的多個協議的組合。TCP/IP通常被認為是一個四層協議系統.

每一層負責不同的功能:
1. **鏈路層**,有時也稱作數據鏈路層或網絡接口層,通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細節。
2. **網絡層**,有時也稱作互聯網層,處理分組在網絡中的活動,例如分組的選路。在TCP/IP協議族中,網絡層協議包括IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(Internet組管理協議)。
3. **運輸層** 主要為兩臺主機上的應用程序提供端到端的通信。在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。
TCP為兩臺主機提供高可靠性的數據通信。它所做的工作包括把應用程序交給它的數據分成合適的小塊交給下面的網絡層,確認接收到的分組,設置發送最后確認分組的超時時鐘等。由于運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節。
而另一方面,UDP則為應用層提供一種非常簡單的服務。它只是把稱作數據報的分組從一臺主機發送到另一臺主機,但并不保證該數據報能到達另一端。任何必需的可靠性必須由應用層來提供。
這兩種運輸層協議分別在不同的應用程序中有不同的用途,這一點將在后面看到。
4. **應用層** 負責處理特定的應用程序細節。幾乎各種不同的TCP/IP實現都會提供下面這些通用的應用程序:
? Telnet遠程登錄。? FTP文件傳輸協議。? SMTP簡單郵件傳送協議。? SNMP簡單網絡管理協議。

### 互聯網地址
互聯網上的每個接口必須有一個唯一的Internet地址(也稱作IP地址)。IP地址長32 bit。Internet地址并不采用平面形式的地址空間,如1、2、3等。IP地址具有一定的結構,五類不同的互聯網地址格式如圖1-5所示。

### 用戶數據封裝和分用
應用程序用TCP傳送數據時,數據被送入協議棧中,然后逐個通過每一層直到被當作一串比特流送入網絡。其中每一層對收到的數據都要增加一些首部信息(有時還要增加尾部信息),該過程如圖1-7所示。TCP傳給IP的數據單元稱作TCP報文段或簡稱為TCP段(TCP segment)。IP傳給網絡接口層的數據單元稱作IP數據報(IP datagram)。通過以太網傳輸的比特流稱作幀(Frame)

當目的主機收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議。這個過程稱作分用(Demultiplexing)

### 端口號
服務器一般通過端口號來識別對應的應用程序。TCP和UDP采用16 bit的端口號來識別應用程序。任何TCP/IP實現所提供的服務都用知名的1~1023之間的端口號。大多數TCP/IP實現給臨時端口分配1024~5000之間的端口號。大于5000的端口號是為其他服務器預留的(Internet上并不常用的服務)
> 到1992年為止,知名端口號介于1~255之間。256~1023之間的端口號通常都是由Unix系統占用,以提供一些特定的Unix服務—也就是說,提供一些只有Unix系統才有的、而其他操作系統可能不提供的服務。現在IANA管理1~1023之間所有的端口號。
### 應用編程
TCP/IP協議的應用程序通常采用兩種應用編程接口(API):socket和TLI(運輸層接口:Transport Layer Interface)
- PC
- IO模型
- Inode介紹
- Linux
- Linux基本操作命令
- Linux網絡相關命令
- Crontab計劃任務
- Shell
- Sed命令
- Awk命令
- LAMP/LNMP
- PHP
- 基本語法
- 面向對象
- 錯誤和異常處理
- 命名空間
- PHP7
- 正則表達式
- Hashtable
- 變量的內部實現
- PHP-FPM
- PHP運行原理
- swoole
- mysql
- SQL標準
- mysql三范式
- 存儲引擎
- Mysql事務
- Mysql索引
- Mysql優化
- Explain
- MySQL索引原理及慢查詢優化
- MongoDb
- 計算機網絡
- IP協議
- TCP(傳輸控制協議)
- UDP(用戶數據報協議)
- HTTP 協議
- HTTPS
- HTTP的基本優化
- Websocket協議
- 版本控制器
- Git
- Svn
- 數據結構
- 數組
- 鏈表
- 算法