?OSI (Open System Interconnection 開放式系統互聯) 參考模型:
具體可參考:OSI參考模型
? ? ? ? 它是由ISO國際標準化組織定義的一個標準,但只作為參考模型,所謂參考模型定義就是:供設備生產廠商或者軟件廠商參考用的網絡通信模型,而不是一個強制標準。TCP/IP 脫胎于OSI模型,所以要了解TCP/IP之前要先學習OSI。
OSI模型將網絡通信的工作分為7層:也可以理解為7個步驟
1. 應用層:通常最具有代表性的協議:http、ftp、smtp、OICQ(QQ)等
2. 表示層:主要對數據進行處理,包括格式轉化、加密、解密、壓縮
3. 會話層:管理會話
4. 傳輸層:分配端口號port,建立連接 (TCP UDP)同時控制傳輸過程和資源開銷
5. 網絡層:提供路由選擇(路由器),分配IP地址并尋址
6. 數據鏈路層:提供容錯處理,差錯控制,另一方面會將網絡地址轉化為mac地址,在物理層面進行尋址
7. 物理層:傳輸介質(網線、光纖),轉化為二進制流通過光信號或電信號傳輸
對于我來說,并不需要深入理解每一層的機制,因為大部分的工作只停留在前4層。
TCP/IP 將OSI模型改寫為4層
TCP協議(Transmission Control Protocol):傳輸控制協議
為了更好的理解TCP協議,可參考《使用wireshark分析TCP/IP協議中TCP包頭的格式》
1. 建立連接(3次握手)
? ? 1>. 客戶端向服務端發送SYN包,并進入SYN_SEND狀態,等待服務器確認
? ? 2>. 服務器接收到SYN包,必須確認接收狀態,發送ACK包響應,同時發送自己的SYN包,并 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? 進入SYN_RECV狀態
? ? ?3>. 客戶端接收到SYN+ACK包,進入ESTABLISHED狀態,并向服務器發送SYN包確認ACK,服務器接收到ACK包,并進入ESTABLISHED狀態
當客戶端和服務端都進入ESTABLISHED狀態,客戶端和服務端就可以開始雙向傳遞數據了。
具體流程如圖:
2. 關閉連接
? ? 1>. 主動關閉方向被動關閉端發送FIN包,并進入FIN_WAIT1狀態
? ? ?2>. 被動關閉端接收到FIN包后,向主動關閉方發送ACK包,并進入CLOSE_WAIT;主動關閉 ? ?方接收到ACK包,向被動關閉方發送ACK包,并進入FIN_WAIT2狀態。
? ? ? 3>. 被動關閉方發送FIN包,并進入LAST_ACK狀態
? ? ? 4>. 主動關閉方接收到FIN后,向被動關閉方發送ACK包,此時主動關閉方進入TIME_WAIT狀態,在2MSL(生命周期)時間后關閉連接;被動關閉方在接收到ACK后,關閉連接
3. 保證可靠 ?:也是TCP最重要的特點
UDP協議(User Diagram Protocol)用戶數據報協議
UDP和TCP的最主要的區別在于可靠性的保證上面,主要體現在沒有3次握手的過程。
UDP非常簡單
特點:1. ?可靠性差 ,它不會去關注數據報是否傳輸成功,是否丟失
? ? ? ? ? 2. 性能好
TCP和UDP選擇問題
因為TCP基本可以使用所有場景,所用用TCP不會錯,但是有些場景需要考慮性能和不需要可靠性保證,所以不需要所有數據的傳輸可靠,所以選擇UDP,比如,視頻聊天等