網(wǎng)絡(luò)
1、OSI模型(Open System Interconnection)
國(guó)際標(biāo)準(zhǔn)組織定義了網(wǎng)絡(luò)通信協(xié)議的基本框架,被稱(chēng)為開(kāi)放系統(tǒng)互聯(lián)模型,即OSI模型
由下至上:
①物理層
②數(shù)據(jù)鏈路層
③網(wǎng)絡(luò)層
④傳輸層
⑤會(huì)話層
⑥表示層
⑦應(yīng)用層
2、TCP/IP模型
由下至上:
①網(wǎng)絡(luò)接口層:用于定義物理傳輸通道,通常是對(duì)某些網(wǎng)絡(luò)連接設(shè)備的驅(qū)動(dòng)協(xié)議,例如針對(duì)光纖、網(wǎng)線提供的驅(qū)動(dòng)
②網(wǎng)絡(luò)層:網(wǎng)絡(luò)層是TCP/IP協(xié)議的核心,它主要用于將傳輸?shù)臄?shù)據(jù)進(jìn)行分組,將分組數(shù)據(jù)發(fā)送到目標(biāo)計(jì)算機(jī)或者網(wǎng)絡(luò)
③傳輸層:主要使網(wǎng)絡(luò)程序進(jìn)行通信,在進(jìn)行網(wǎng)絡(luò)通信時(shí),可以采用TCP協(xié)議,也可以采用UDP協(xié)議
④應(yīng)用層:主要負(fù)責(zé)應(yīng)用程序的協(xié)議,如HTTP協(xié)議、FTP協(xié)議
3、TCP協(xié)議三次握手(建立連接)
①第一次握手:客戶(hù)端向服務(wù)器端發(fā)出連接請(qǐng)求,等待服務(wù)器確認(rèn);客戶(hù)端發(fā)送一個(gè)SYN同步標(biāo)志的TCP報(bào)文,SYN同步報(bào)文會(huì)指明客戶(hù)端使用的端口以及TCP連接的初始序號(hào)。
②第二次握手:服務(wù)器端向客戶(hù)端會(huì)送一個(gè)響應(yīng),通知客戶(hù)端收到連接請(qǐng)求;服務(wù)器在收到客戶(hù)端的SYN報(bào)文后,將返回一個(gè)SYN+ACK報(bào)文,表示客戶(hù)端的請(qǐng)求被接收,同時(shí)TCP序號(hào)被加1。
③第三次握手:客戶(hù)端再次向服務(wù)器端發(fā)送確認(rèn)信息,確認(rèn)連接;客戶(hù)端返回一個(gè)確認(rèn)報(bào)文ACK給服務(wù)器端,同樣TCP序號(hào)被加1,至此一個(gè)TCP連接完成;然后才開(kāi)始通信的第二步,數(shù)據(jù)處理。
4、為什么是三次握手?不是兩次或四次?
①三次握手才可以阻止重復(fù)歷史連接的初始化(主要原因)
②三次握手才可以同步雙方的初始序列號(hào)
③三次握手才可以避免資源浪費(fèi)
5、TCP協(xié)議四次揮手(斷開(kāi)連接)
①第一次揮手:客戶(hù)端打算關(guān)閉連接,此時(shí)會(huì)發(fā)送一個(gè)首部FIN標(biāo)志位被置為1的報(bào)文,即FIN報(bào)文,之后客戶(hù)端進(jìn)入FIN_WAIT_1狀態(tài);
②第二次揮手:服務(wù)端收到該報(bào)文,就向客戶(hù)端發(fā)送ACK應(yīng)答報(bào)文,接著服務(wù)端進(jìn)入CLOSED_WAIT狀態(tài);
客戶(hù)端收到服務(wù)端的ACK應(yīng)答報(bào)文后,之后進(jìn)入FIN_WAIT_2狀態(tài);
③第三次揮手:等待服務(wù)端處理完數(shù)據(jù)后,也向客戶(hù)端發(fā)送FIN報(bào)文,之后服務(wù)端進(jìn)入LAST_ACK狀態(tài);
④第四次揮手:客戶(hù)端收到服務(wù)端的FIN報(bào)文后,回一個(gè)ACK應(yīng)答報(bào)文,之后進(jìn)入TIME_WAIT狀態(tài);
服務(wù)器收到ACK應(yīng)答報(bào)文后,就進(jìn)入了CLOSE狀態(tài),至此服務(wù)端已經(jīng)完成了連接的關(guān)閉;
客戶(hù)端在經(jīng)過(guò)2MSL 一段時(shí)間后,自動(dòng)進(jìn)入CLOSE狀態(tài),至此客戶(hù)端也完成了連接的關(guān)閉。
6、TCP可靠性如何保證
①數(shù)據(jù)包校驗(yàn):目的是監(jiān)測(cè)數(shù)據(jù)在傳輸過(guò)程中的任何變化,若校驗(yàn)出包有錯(cuò),則丟棄報(bào)文段并且不給出響應(yīng),這是TCP發(fā)送數(shù)據(jù)段超時(shí)后會(huì)重發(fā)數(shù)據(jù);
②對(duì)失序數(shù)據(jù)包重排序:既然TCP報(bào)文段作為IP數(shù)據(jù)報(bào)來(lái)傳輸,而IP數(shù)據(jù)報(bào)的到達(dá)可能會(huì)失序,因此TCP報(bào)文段的到達(dá)也可能會(huì)失序。TCP將對(duì)失序數(shù)據(jù)進(jìn)行重新排序,然后才交給應(yīng)用層;
③丟棄重復(fù)數(shù)據(jù):對(duì)于重復(fù)數(shù)據(jù),能夠丟棄重復(fù)數(shù)據(jù);
④ 應(yīng)答機(jī)制:當(dāng)TCP收到發(fā)自TCP連接另一端的數(shù)據(jù),它將發(fā)送一個(gè)確認(rèn)。這個(gè)確認(rèn)不是立即發(fā)送,通常將推遲幾分之一秒;
⑤超時(shí)重發(fā):當(dāng)TCP發(fā)出一個(gè)段后,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認(rèn)收到這個(gè)報(bào)文段。如果不能及時(shí)收到一個(gè)確認(rèn),將重發(fā)這個(gè)報(bào)文段;
⑥流量控制:TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù),這可以防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出,這就是流量控制。TCP使用的流量控制協(xié)議是可變大小的滑動(dòng)窗口協(xié)議。
7、TCP與UDP的區(qū)別
TCP和UDP協(xié)議都屬于傳輸層協(xié)議,它們之間的區(qū)別為:
①是否連接:TCP面向連接;UDP無(wú)連接
②是否可靠:TCP可靠傳輸,使用流量控制和擁塞控制;UDP不可靠,不使用流量控制和擁塞控制
③連接對(duì)象個(gè)數(shù):TCP只能是一對(duì)一通信;UDP支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多交互通信
④傳輸方式:TCP面向字節(jié)流;UDP面向報(bào)文
⑤首部開(kāi)銷(xiāo):TCP首部最小20字節(jié),最大60字節(jié);UDP首部開(kāi)銷(xiāo)小,僅8字節(jié)
⑥使用場(chǎng)景:TCP適用于要求可靠性傳輸?shù)膽?yīng)用,如文件傳輸;UDP適用于實(shí)時(shí)應(yīng)用(IP電話、視頻會(huì)議、直播等)
⑦常見(jiàn)應(yīng)用層協(xié)議:TCP使用 FTP/Telent/SMTP/POP3/HTTP;UDP使用 DNS/SNMP/TFTP
總結(jié):
TCP向上層提供面向連接的可靠服務(wù) ,UDP向上層提供無(wú)連接不可靠服務(wù);
雖然 UDP 并沒(méi)有 TCP 傳輸來(lái)的準(zhǔn)確,但是也能在很多實(shí)時(shí)性要求高的地方有所作為;
對(duì)數(shù)據(jù)準(zhǔn)確性要求高,速度可以相對(duì)較慢的,可以選用TCP
8、常見(jiàn)的狀態(tài)碼
HTTP請(qǐng)求結(jié)構(gòu):請(qǐng)求方式 + 請(qǐng)求URL + 協(xié)議及其版本
HTTP響應(yīng)結(jié)構(gòu):狀態(tài)碼 + 原因短語(yǔ) + 協(xié)議及其版本
①1XX
請(qǐng)求處理中,請(qǐng)求已接受,正在處理
②2XX
請(qǐng)求成功,請(qǐng)求被成功處理,200 OK
③3XX
重定向,要完成請(qǐng)求必須進(jìn)一步處理
301:永久性轉(zhuǎn)移
302:暫時(shí)性轉(zhuǎn)移
303:已緩存
④4XX
客戶(hù)端錯(cuò)誤,請(qǐng)求不合法
400:Bad Request,請(qǐng)求有語(yǔ)法錯(cuò)誤
403:拒絕請(qǐng)求
404:客戶(hù)端訪問(wèn)的頁(yè)面不存在
⑤5XX
服務(wù)器錯(cuò)誤,服務(wù)器不能處理合法請(qǐng)求
500:服務(wù)器內(nèi)部錯(cuò)誤
503:服務(wù)不可用,稍等