OSI模型 和 TCP/IP


從上圖中看出來,TCP/IP 與 OSI 在分層模塊有一些區(qū)別。OSI 參考模型注重“通信協(xié)議必要的功能是什么”,而 TCP/IP 則更強調“在計算機上實現協(xié)議應該開發(fā)哪種程序”。

TCP/IP 是互聯(lián)網相關的各類協(xié)議族的總稱
協(xié)議中存在各式各樣的內容。從電纜的規(guī)格到 IP 地址的選定方法、尋找異地用戶的方法、雙方建立通信的順序,以及 Web 頁面顯示需要處理的步驟,等等。
像這樣把與互聯(lián)網相關聯(lián)的協(xié)議集合起來總稱為 TCP/IP。也有說法認為,TCP/IP 是指 TCP 和 IP 這兩種協(xié)議。還有一種說法認為,TCP/IP 是在 IP 協(xié)議的通信過程中,使用到的協(xié)議族的統(tǒng)稱。
TCP/IP四層
應用層
應用層決定了向用戶提供應用服務時通信的活動。TCP/IP 協(xié)議族內預存了各類通用的應用服務。比如,FTP(FileTransfer Protocol,文件傳輸協(xié)議)和 DNS(Domain Name System,域名系統(tǒng))服務就是其中兩類。
HTTP 協(xié)議也處于該層。
傳輸層
傳輸層對上層應用層,提供處于網絡連接中的兩臺計算機之間的數據傳輸。
在傳輸層有兩個性質不同的協(xié)議:TCP(Transmission ControlProtocol,傳輸控制協(xié)議)和 UDP(User Data Protocol,用戶數據報協(xié)議)。
網絡層(又名網絡互連層)
網絡層用來處理在網絡上流動的數據包。數據包是網絡傳輸的最小數據單位。該層規(guī)定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,并把數據包傳送給對方。與對方計算機之間通過多臺計算機或網絡設備進行傳輸時,網絡層所起的作用就是在眾多的選項內選擇一條傳輸路線。
鏈路層(又名數據鏈路層,網絡接口層)
用來處理連接網絡的硬件部分。包括控制操作系統(tǒng)、硬件的設備驅動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等物理可見部分(還包括連接器等一切傳輸媒介)。硬件上的范疇均在鏈路層的作用范圍之內。
面試題(以下部分重點)
傳輸層中的 TCP 和 UDP
TCP(Transmission Control Protocol, 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。與之對應的是UDP(User Datagram Protocol ,用戶數據報協(xié)議),是不可靠的傳輸層協(xié)議。
三步握手
可以想象兩人用對講機交談。
A:我準備好了你準備好了嗎,收到請回答。
B:收到收到,我也準備好了,收到請回答。
A:收到收到

- 客戶端發(fā)送 SYN報文給服務器端,序列號是n,進入 SYN_SEND 狀態(tài)。
- 服務器端收到 SYN 報文,回應一個ACK(序列號是n+1)同時發(fā)一個 SYN (序列號是m),進入 SYN_RECV 狀態(tài)。
- 客戶端收到服務器端的 SYN 報文,回應一個 ACK(序列號是m+1)報文,進入 Established 狀態(tài)。
四步揮手

- 客戶端發(fā)送一個 FIN ,告訴服務器想關閉連接。
- 服務器收到這個 FIN ,發(fā)回一個 ACK。
- 服務器通知應用程序關閉網絡連接,應用程序關閉后通知服務器。服務器發(fā)送一個 FIN 給客戶端 。
- 客戶端發(fā)回 ACK 報文確認。
為什么握手要三步,揮手卻是四步?
這是因為服務端的 LISTEN 狀態(tài)下的 SOCKET 當收到客戶端建立連接請求的SYN 報文后,它可以把 ACK 和 SYN ( ACK 起應答作用,而 SYN 起同步作用)放在一個報文里來發(fā)送。但關閉連接時,當服務器收到客戶端的 FIN 報文通知時,服務器只能發(fā)一個回應報文ACK:“哦,我知道了”,然后通知應用程序。應用程序完成全部數據發(fā)送并確定可以終止了,服務器才能發(fā)送FIN告訴客戶端可以真正斷開連接了。所以這一步ACK報文和FIN報文需要分開發(fā)送,因此多了一個步驟。
TCP報文格式

- ACK : TCP協(xié)議規(guī)定,只有ACK=1時有效,也規(guī)定連接建立后所有發(fā)送的報文的ACK必須為1。
- SYN(SYNchronization) : 在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文。對方若同意建立連接,則應在響應報文中使SYN=1和ACK=1. 因此, SYN置1就表示這是一個連接請求或連接接受報文。
- FIN (finis)即完,終結的意思, 用來釋放一個連接。當 FIN = 1 時,表明此報文段的發(fā)送方的數據已經發(fā)送完畢,并要求釋放連接。