最近校招季,特把自己面試中遇到的問題整理整理十偶,以鞏固自己的知識(shí)热某。
對(duì)于網(wǎng)絡(luò)這塊腻菇,面試官一般喜歡問的是ISO/OSI參考模型和TCP/IP協(xié)議族方面的知識(shí),下面我們就來看看吧昔馋。
首先筹吐,我們先給出它們的結(jié)構(gòu)圖
注意:圖中有一個(gè)Hardware層,圖中顯示它和OSI模型中的物理層(Physical)相對(duì)應(yīng)秘遏,其實(shí)嚴(yán)格意義上說丘薛,它是不屬于TCP/IP協(xié)議族中的一員的,這個(gè)層次包括網(wǎng)線的制式邦危,網(wǎng)卡的定義洋侨,負(fù)責(zé)網(wǎng)絡(luò)的傳輸舍扰。
OSI
Open System Interconnection,即開放式系統(tǒng)互聯(lián)希坚。OSI先有模型边苹,后有協(xié)議,先有標(biāo)準(zhǔn)裁僧,后進(jìn)行實(shí)踐个束。且OSI只是一種理想的模型,并沒有真正使用聊疲。
TCP/IP
TCP/IP則是先有協(xié)議和應(yīng)用再提出了模型茬底,且是參照的OSI模型。TCP/IP現(xiàn)已被廣泛使用获洲,已成為網(wǎng)絡(luò)互聯(lián)實(shí)際上的標(biāo)準(zhǔn)阱表。
TCP:Transmission Control Protocol,傳輸控制協(xié)議
IP:Internet Protocol Address昌妹,網(wǎng)際協(xié)議地址
UDP:User Datagram Protocol捶枢,用戶數(shù)據(jù)報(bào)協(xié)議
TCP/IP協(xié)議中各個(gè)層次的功能
- 應(yīng)用層:為用戶提供各種需要的服務(wù)握截,例如FTP飞崖,Telnet,DNS谨胞,SMTP固歪。
- 傳輸層:為應(yīng)用層實(shí)體提供端到端的通信功能。該層定義了兩種主要的協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)胯努。TCP提供的是一種可靠的牢裳、面向連接的數(shù)據(jù)傳輸服務(wù),UDP提供的是不可靠的叶沛、無連接的數(shù)據(jù)傳輸服務(wù)蒲讯。
- 網(wǎng)際互聯(lián)層:主要解決主機(jī)到主機(jī)的通信問題。其中最重要的一個(gè)協(xié)議是IP協(xié)議(網(wǎng)際協(xié)議)灰署,它提供的是一種不可靠判帮、無連接的數(shù)據(jù)報(bào)傳輸服務(wù)。
- 網(wǎng)絡(luò)接口層:與OSI模型中的數(shù)據(jù)鏈路層和物理層相對(duì)應(yīng)溉箕。
TCP和UDP的區(qū)別
TCP提供了一種可靠的數(shù)據(jù)傳輸服務(wù)晦墙,TCP是面向連接的。利用TCP通信的兩臺(tái)主機(jī)首先要經(jīng)歷一個(gè)“撥打電話”的過程肴茄,等到通信準(zhǔn)備結(jié)束后才開始傳輸數(shù)據(jù)晌畅,最后結(jié)束通話。UDP是直接把數(shù)據(jù)發(fā)出去寡痰,而不管對(duì)方是不是在收信抗楔,就算是UDP無法送達(dá)棋凳,也不會(huì)產(chǎn)生ICMP差錯(cuò)報(bào)文。
一個(gè)TCP數(shù)據(jù)的發(fā)送過程
- 雙方建立連接连躏。
- 發(fā)送方給給接收方TCP數(shù)據(jù)報(bào)贫橙,然后等待對(duì)方的確認(rèn)TCP數(shù)據(jù)報(bào)。如果在一定的時(shí)間內(nèi)沒有收到確認(rèn)數(shù)據(jù)報(bào)反粥,就重新發(fā)送剛才發(fā)送的數(shù)據(jù)報(bào)卢肃;如果收到了,就發(fā)送下一個(gè)數(shù)據(jù)報(bào)才顿。
- 接收方等待發(fā)送方的數(shù)據(jù)報(bào)莫湘,如果得到數(shù)據(jù)報(bào)并檢驗(yàn)無誤,就發(fā)送ACK(確認(rèn))數(shù)據(jù)報(bào)郑气,并等待下一個(gè)TCP數(shù)據(jù)報(bào)的到來幅垮,直到接收到FIN數(shù)據(jù)報(bào)(發(fā)送完成數(shù)據(jù)報(bào))。
- 終止連接尾组。
TCP連接的建立和終止
- 連接的建立
在建立連接的時(shí)候忙芒,客戶端首先向服務(wù)器申請(qǐng)打開某一端口,然后服務(wù)端發(fā)回一個(gè)ACK報(bào)文通知客戶端請(qǐng)求報(bào)文收到讳侨,客戶端收到確認(rèn)報(bào)文后再次發(fā)出確認(rèn)報(bào)文確認(rèn)剛才服務(wù)端發(fā)出的確認(rèn)報(bào)文自己收到呵萨。至此,連接的建立完成跨跨,這也叫做“三次握手”潮峦。
- 結(jié)束連接
TCP有一個(gè)特別的概念叫做half-close,這個(gè)意思是說TCP的連接是全雙工連接(可以同時(shí)發(fā)送和接收)勇婴。因此在關(guān)閉連接的時(shí)候忱嘹,必須關(guān)閉傳和送兩個(gè)方向上的連接。當(dāng)要結(jié)束連接的時(shí)候耕渴,客戶端給服務(wù)器一個(gè)FIN為1的TCP報(bào)文拘悦,然后服務(wù)器返回給客戶端一個(gè)確認(rèn)ACK報(bào)文,并且發(fā)送一個(gè)FIN報(bào)文橱脸,當(dāng)客戶端回復(fù)ACK報(bào)文后础米,連接就結(jié)束了。這就是“四次握手”慰技。
TCP協(xié)議是如何保證傳輸?shù)目煽啃缘?/h2>
- 將數(shù)據(jù)截取為合理的長(zhǎng)度
應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊椭盏,應(yīng)用數(shù)據(jù)產(chǎn)生的數(shù)據(jù)報(bào)長(zhǎng)度將保持不變。
- 超時(shí)重發(fā)
當(dāng)TCP發(fā)出一個(gè)報(bào)文后吻商,它會(huì)啟動(dòng)一個(gè)定時(shí)器掏颊,等待目的端的確認(rèn)報(bào)文發(fā)回。如果在定時(shí)器時(shí)間內(nèi)沒有收到確認(rèn)報(bào)文,那它就會(huì)重新發(fā)送這個(gè)報(bào)文乌叶。
- 目的端對(duì)于收到的報(bào)文盆偿,做出確認(rèn)響應(yīng)
當(dāng)目的端收到報(bào)文后,它將發(fā)送一個(gè)確認(rèn)報(bào)文准浴。這個(gè)確認(rèn)不是立即發(fā)送事扭,一般會(huì)延遲幾分之一秒(要對(duì)包作完整校驗(yàn))。
- 目的端檢驗(yàn)出包有錯(cuò)乐横,丟棄報(bào)文段求橄,不給出確認(rèn)響應(yīng),等待重傳葡公。
目的端收到報(bào)文后罐农,會(huì)對(duì)報(bào)文的完整性作校驗(yàn)(主要是防止傳輸過程中數(shù)據(jù)的丟失或更改),如果檢驗(yàn)有差錯(cuò)催什,TCP就會(huì)舍棄此報(bào)文段涵亏,并且不會(huì)做出確認(rèn)響應(yīng),等待另一端的重傳蒲凶。
- 對(duì)失序數(shù)據(jù)進(jìn)行重排交給應(yīng)用層气筋。
因?yàn)門CP報(bào)文是作為IP數(shù)據(jù)報(bào)(IP提供的是不可靠傳輸)來傳送的,而IP報(bào)的的到達(dá)順序可能會(huì)失序旋圆。因此TCP將對(duì)收到的數(shù)據(jù)進(jìn)行重新排序然后才交給應(yīng)用層宠默。
- 對(duì)于重復(fù)數(shù)據(jù),丟棄重復(fù)數(shù)據(jù)
由于IP數(shù)據(jù)報(bào)可能會(huì)重復(fù)臂聋,TCP必須丟棄重復(fù)的數(shù)據(jù)光稼。
- TCP可以進(jìn)行流量控制或南,防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出
TCP連接的每一方都有固定大小的緩沖區(qū)孩等,TCP接收端只允許另一端發(fā)送接收端緩沖區(qū)能接納的數(shù)據(jù)。(流量控制協(xié)議:可變大小的滑動(dòng)窗口協(xié)議)
應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊椭盏,應(yīng)用數(shù)據(jù)產(chǎn)生的數(shù)據(jù)報(bào)長(zhǎng)度將保持不變。
當(dāng)TCP發(fā)出一個(gè)報(bào)文后吻商,它會(huì)啟動(dòng)一個(gè)定時(shí)器掏颊,等待目的端的確認(rèn)報(bào)文發(fā)回。如果在定時(shí)器時(shí)間內(nèi)沒有收到確認(rèn)報(bào)文,那它就會(huì)重新發(fā)送這個(gè)報(bào)文乌叶。
當(dāng)目的端收到報(bào)文后,它將發(fā)送一個(gè)確認(rèn)報(bào)文准浴。這個(gè)確認(rèn)不是立即發(fā)送事扭,一般會(huì)延遲幾分之一秒(要對(duì)包作完整校驗(yàn))。
目的端收到報(bào)文后罐农,會(huì)對(duì)報(bào)文的完整性作校驗(yàn)(主要是防止傳輸過程中數(shù)據(jù)的丟失或更改),如果檢驗(yàn)有差錯(cuò)催什,TCP就會(huì)舍棄此報(bào)文段涵亏,并且不會(huì)做出確認(rèn)響應(yīng),等待另一端的重傳蒲凶。
因?yàn)門CP報(bào)文是作為IP數(shù)據(jù)報(bào)(IP提供的是不可靠傳輸)來傳送的,而IP報(bào)的的到達(dá)順序可能會(huì)失序旋圆。因此TCP將對(duì)收到的數(shù)據(jù)進(jìn)行重新排序然后才交給應(yīng)用層宠默。
由于IP數(shù)據(jù)報(bào)可能會(huì)重復(fù)臂聋,TCP必須丟棄重復(fù)的數(shù)據(jù)光稼。
TCP連接的每一方都有固定大小的緩沖區(qū)孩等,TCP接收端只允許另一端發(fā)送接收端緩沖區(qū)能接納的數(shù)據(jù)。(流量控制協(xié)議:可變大小的滑動(dòng)窗口協(xié)議)