TCP/IP與OSI模型是一種相對應的關系。
應用層:大致對應于O S I模型的應用層和表示層,應用程序通過該層利用網絡。
傳輸層:大致對應于O S I模型的會話層和傳輸層,包括T C P(傳輸控制協議)以及U D P(用戶數據報協議),這些協議負責提供流控制、錯誤校驗和排序服務。所有的服務請求都使用這些協議。
互連網層:對應于O S I模型的網絡層,包括I P(網際協議)、I C M P(網際控制報文協議)、I G M P(網際組報文協議)以及A R P(地址解析協議)。這些協議處理信息的路由以及主機地址解析。
網絡接口層:大致對應于O S I模型的數據鏈路層和物理層。該層處理數據的格式化以及將 數據傳輸到網絡電纜
HTTP在OSI模型中位于第七層,應用層,讓客戶端的用戶通過這一層向下層傳輸,然后發送請求,使服務器接受到之后可以恢復客戶端,達到互聯網絡的功能。
http在TCP/IP位于第四層的應用層,通過第四層利用網絡。
Paste_Image.png
客戶端和服務器端是怎么連接的呢?(三次握手)
Paste_Image.png
首先Client端發送連接請求報文,Server段接受連接后回復ACK報文,并為這次連接分配資源。Client端接收到ACK報文后也向Server段發生ACK報文,并分配資源,這樣TCP連接就建立了。
那么, 那如何斷開連接呢?(四次揮手)簡單的過程如下:
Paste_Image.png
【注意】中斷連接端可以是Client端,也可以是Server端。
假設Client端發起中斷連接請求,也就是發送FIN報文。Server端接到FIN報文后,意思是說"我Client端沒有數據要發給你了",但是如果你還有數據沒有發送完成,則不必急著關閉Socket,可以繼續發送數據。所以你先發送ACK,"告訴Client端,你的請求我收到了,但是我還沒準備好,請繼續你等我的消息"。這個時候Client端就進入FIN_WAIT狀態,繼續等待Server端的FIN報文。當Server端確定數據已發送完成,則向Client端發送FIN報文,"告訴Client端,好了,我這邊數據發完了,準備好關閉連接了"。Client端收到FIN報文后,"就知道可以關閉連接了,但是他還是不相信網絡,怕Server端不知道要關閉,所以發送ACK后進入TIME_WAIT狀態,如果Server端沒有收到ACK則可以重傳。“,Server端收到ACK后,"就知道可以斷開連接了"。Client端等待了2MSL后依然沒有收到回復,則證明Server端已正常關閉,那好,我Client端也可以關閉連接了。Ok,TCP連接就這樣關閉了!
【注意】 在TIME_WAIT狀態中,如果TCP client端最后一次發送的ACK丟失了,它將重新發送。TIME_WAIT狀態中所需要的時間是依賴于實現方法的。典型的值為30秒、1分鐘和2分鐘。等待之后連接正式關閉,并且所有的資源(包括端口號)都被釋放。
整體流程是這樣的:
Paste_Image.png