TCP/IP與OSI模型是一種相對應(yīng)的關(guān)系。
應(yīng)用層:大致對應(yīng)于O S I模型的應(yīng)用層和表示層懊纳,應(yīng)用程序通過該層利用網(wǎng)絡(luò)漠趁。
傳輸層:大致對應(yīng)于O S I模型的會話層和傳輸層慕淡,包括T C P(傳輸控制協(xié)議)以及U D P(用戶數(shù)據(jù)報協(xié)議)离唐,這些協(xié)議負責提供流控制病附、錯誤校驗和排序服務(wù)。所有的服務(wù)請求都使用這些協(xié)議亥鬓。
互連網(wǎng)層:對應(yīng)于O S I模型的網(wǎng)絡(luò)層完沪,包括I P(網(wǎng)際協(xié)議)、I C M P(網(wǎng)際控制報文協(xié)議)嵌戈、I G M P(網(wǎng)際組報文協(xié)議)以及A R P(地址解析協(xié)議)丽焊。這些協(xié)議處理信息的路由以及主機地址解析。
網(wǎng)絡(luò)接口層:大致對應(yīng)于O S I模型的數(shù)據(jù)鏈路層和物理層咕别。該層處理數(shù)據(jù)的格式化以及將 數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)電纜
HTTP在OSI模型中位于第七層技健,應(yīng)用層,讓客戶端的用戶通過這一層向下層傳輸惰拱,然后發(fā)送請求雌贱,使服務(wù)器接受到之后可以恢復(fù)客戶端,達到互聯(lián)網(wǎng)絡(luò)的功能偿短。
http在TCP/IP位于第四層的應(yīng)用層欣孤,通過第四層利用網(wǎng)絡(luò)。
客戶端和服務(wù)器端是怎么連接的呢昔逗?(三次握手)
首先Client端發(fā)送連接請求報文降传,Server段接受連接后回復(fù)ACK報文,并為這次連接分配資源勾怒。Client端接收到ACK報文后也向Server段發(fā)生ACK報文婆排,并分配資源,這樣TCP連接就建立了笔链。
那么段只, 那如何斷開連接呢?(四次揮手)簡單的過程如下:
【注意】中斷連接端可以是Client端鉴扫,也可以是Server端赞枕。
假設(shè)Client端發(fā)起中斷連接請求,也就是發(fā)送FIN報文坪创。Server端接到FIN報文后炕婶,意思是說"我Client端沒有數(shù)據(jù)要發(fā)給你了",但是如果你還有數(shù)據(jù)沒有發(fā)送完成莱预,則不必急著關(guān)閉Socket柠掂,可以繼續(xù)發(fā)送數(shù)據(jù)。所以你先發(fā)送ACK锁施,"告訴Client端陪踩,你的請求我收到了杖们,但是我還沒準備好,請繼續(xù)你等我的消息"肩狂。這個時候Client端就進入FIN_WAIT狀態(tài)摘完,繼續(xù)等待Server端的FIN報文。當Server端確定數(shù)據(jù)已發(fā)送完成傻谁,則向Client端發(fā)送FIN報文孝治,"告訴Client端,好了审磁,我這邊數(shù)據(jù)發(fā)完了谈飒,準備好關(guān)閉連接了"。Client端收到FIN報文后态蒂,"就知道可以關(guān)閉連接了杭措,但是他還是不相信網(wǎng)絡(luò),怕Server端不知道要關(guān)閉钾恢,所以發(fā)送ACK后進入TIME_WAIT狀態(tài)手素,如果Server端沒有收到ACK則可以重傳〈耱剑“泉懦,Server端收到ACK后,"就知道可以斷開連接了"疹瘦。Client端等待了2MSL后依然沒有收到回復(fù)崩哩,則證明Server端已正常關(guān)閉,那好言沐,我Client端也可以關(guān)閉連接了邓嘹。Ok,TCP連接就這樣關(guān)閉了呢灶!
【注意】 在TIME_WAIT狀態(tài)中吴超,如果TCP client端最后一次發(fā)送的ACK丟失了钉嘹,它將重新發(fā)送鸯乃。TIME_WAIT狀態(tài)中所需要的時間是依賴于實現(xiàn)方法的。典型的值為30秒跋涣、1分鐘和2分鐘缨睡。等待之后連接正式關(guān)閉,并且所有的資源(包括端口號)都被釋放陈辱。
整體流程是這樣的: