01:OSI參考模型與TCP/IP參考模型的區(qū)別?
OSI參考模型與TCP/IP參考模型
如上圖所示,OSI參考模型為7層模型,依次為應(yīng)用層、表示層、會(huì)話(huà)層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層及物理層,TCP/IP模型是在OSI參考模型的基礎(chǔ)上做了一定的精簡(jiǎn),形成一個(gè)4層模型。在層次關(guān)系上,兩者都采用了分層體系結(jié)構(gòu),都是對(duì)等的層間通信,不同之處在于TCP/IP參考模型比OSI參考模型層次更清晰簡(jiǎn)練,在功能上,兩者差別不大,都是為了實(shí)現(xiàn)兩個(gè)或多個(gè)終端之間的通信。
02:TCP通信位于網(wǎng)絡(luò)模型的哪一層?
TCP(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,無(wú)論是OSI參考模型,還是TCP/IP參考模型,TCP都位于傳輸層,TCP是為了在不可靠的互聯(lián)網(wǎng)絡(luò)上提供可靠的端到端字節(jié)流而專(zhuān)門(mén)設(shè)計(jì)的一個(gè)傳輸協(xié)議。
03:如何理解面向連接、可靠、字節(jié)流?
面向連接:意味著TCP是點(diǎn)對(duì)點(diǎn)之間的通信,不能像UDP那樣可以一個(gè)主機(jī)同時(shí)向多個(gè)主機(jī)發(fā)送消息,也就是無(wú)法實(shí)現(xiàn)一對(duì)多的情形。
可靠的:無(wú)論網(wǎng)絡(luò)鏈路如何變化,TCP都可以保障報(bào)文能夠到達(dá)接收端。
字節(jié)流:基于字節(jié)流,意味著無(wú)論我們消息有多大都可以進(jìn)行傳輸。并且消息是有序的,當(dāng)前一個(gè)消息沒(méi)有收到的時(shí)候,即使它先收到了后面的字節(jié)已經(jīng)收到,那么也不能扔給應(yīng)用層去處理,同時(shí)對(duì)重復(fù)的報(bào)文會(huì)自動(dòng)丟棄。
04:為什么需要TCP協(xié)議?
因?yàn)镮P層是不可靠的,它不保證網(wǎng)絡(luò)包的一定交付、不保證按序交付、也不保證完整交付。因此如果需要保證網(wǎng)絡(luò)數(shù)據(jù)包的可靠性,就必須要通過(guò)上層即傳輸層的TCP協(xié)議來(lái)保證。
05:TCP與UDP之間區(qū)別及聯(lián)系?
TCP與UDP都屬于傳輸層協(xié)議,區(qū)別如下:
連接機(jī)制
TCP 是面向連接的傳輸層協(xié)議
UDP 是不需要連接
服務(wù)對(duì)象
TCP 是一對(duì)一的兩點(diǎn)服務(wù)
UDP 支持一對(duì)一、一對(duì)多、多對(duì)多
可靠性
TCP 保證數(shù)據(jù)不丟失、不重復(fù)、按需到達(dá)
UDP 是盡最大努力交付,不保證交付數(shù)據(jù)
擁塞控制、流量控制
TCP 有擁塞控制和流量控制機(jī)制
UDP 則沒(méi)有擁塞控制和流量控制機(jī)制
06:TCP首部報(bào)文分析
TCP的首部至少占用20個(gè)字節(jié),包含的內(nèi)容有源端口號(hào)、目標(biāo)端口號(hào)、序列號(hào)、應(yīng)答號(hào)、控制位、校驗(yàn)和等,具體如下所示:
07:簡(jiǎn)要說(shuō)明TCP三次握手
服務(wù)器與客戶(hù)端均處于CLOSE狀態(tài)
服務(wù)器先主動(dòng)監(jiān)聽(tīng)某端口,處理LISTEN狀態(tài)
客戶(hù)端發(fā)送SYN報(bào)文,seq=x,SYN=1
服務(wù)器回復(fù)SYN+ACK報(bào)文,seq=y,ack=x+1,SYN=1,ACK=1
客戶(hù)端回復(fù)ACK報(bào)文,ack=y+1,ACK=1
08:簡(jiǎn)要說(shuō)明TCP四次揮手
服務(wù)器與客戶(hù)端均處于ESTABLISHED狀態(tài)
客戶(hù)端打算關(guān)閉連接,發(fā)送一個(gè) FIN 報(bào)文,進(jìn)入 FIN_WAIT_1 狀態(tài)。
服務(wù)端回復(fù) ACK報(bào)文,進(jìn)入 CLOSED_WAIT 狀態(tài)。
客戶(hù)端收到 ACK 應(yīng)答報(bào)文后,進(jìn)入 FIN_WAIT_2 狀態(tài)。
服務(wù)端處理完數(shù)據(jù)后,向客戶(hù)端發(fā)送 FIN 報(bào)文,進(jìn)入 LAST_ACK 狀態(tài)。
客戶(hù)端回復(fù)一個(gè) ACK 應(yīng)答報(bào)文,之后進(jìn)入 TIME_WAIT 狀態(tài)
服務(wù)器收到 ACK 應(yīng)答報(bào)文后,進(jìn)入了 CLOSE 狀態(tài),服務(wù)端完成連接的關(guān)閉。
客戶(hù)端在經(jīng)過(guò) 2MSL 一段時(shí)間后,自動(dòng)進(jìn)入 CLOSE 狀態(tài),客戶(hù)端也完成連接的關(guān)閉。
09:TCP握手為什么剛好是三次?
TCP 建立連接時(shí),通過(guò)三次握手能防止歷史連接的建立,能減少雙方不必要的資源開(kāi)銷(xiāo),能幫助雙方同步初始化序列號(hào)。序列號(hào)能夠保證數(shù)據(jù)包不重復(fù)、不丟棄和按序傳輸。
不使用「兩次握手」和「四次握手」的原因:
兩次握手:無(wú)法防止歷史連接的建立,會(huì)造成雙方資源的浪費(fèi),也無(wú)法可靠的同步雙方序列號(hào);
四次握手:三次握手就已經(jīng)理論上最少可靠連接建立,所以不需要使用更多的通信次數(shù)。
10:TCP揮手為什么需要四次?
回顧下四次揮手雙方發(fā) FIN 包的過(guò)程,就能理解為什么揮手需要四次:
關(guān)閉連接時(shí),客戶(hù)端向服務(wù)端發(fā)送 FIN 時(shí),僅僅表示客戶(hù)端不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù)。
服務(wù)器收到客戶(hù)端的 FIN 報(bào)文時(shí),先回一個(gè) ACK 應(yīng)答報(bào)文,而服務(wù)端可能還有數(shù)據(jù)需要處理和發(fā)送,等服務(wù)端不再發(fā)送數(shù)據(jù)時(shí),才發(fā)送 FIN 報(bào)文給客戶(hù)端來(lái)表示同意現(xiàn)在關(guān)閉連接。
由于服務(wù)端通常需要等待完成數(shù)據(jù)的發(fā)送和處理,所以服務(wù)端的 ACK 和 FIN 一般都會(huì)分開(kāi)發(fā)送,從而比三次握手導(dǎo)致多了一次。