《逆襲進(jìn)大廠》系列之《計(jì)算機(jī)網(wǎng)絡(luò)》篇No.91-102
本文源自于個(gè)人github倉(cāng)庫(kù):https://github.com/forthespada/InterviewGuide
github倉(cāng)庫(kù)內(nèi)有PDF版本下載方式,歡迎各位star、fork~
立志收錄計(jì)算機(jī)校招、社招面試最全面試八股文,無(wú)內(nèi)鬼來(lái)點(diǎn)八股文~
91、Ping命令基于哪一層協(xié)議的原理是什么?
ping命令基于網(wǎng)絡(luò)層的命令,是基于ICMP協(xié)議工作的。
92、在進(jìn)行UDP編程的時(shí)候,一次發(fā)送多少bytes好?
當(dāng)然,這個(gè)沒(méi)有唯一答案,相對(duì)于不同的系統(tǒng),不同的要求,其得到的答案是不一樣的。
我這里僅對(duì)像ICQ一類的發(fā)送聊天消息的情況作分析,對(duì)于其他情況,你或許也能得到一點(diǎn)幫助:首先,我們知道,TCP/IP通常被認(rèn)為是一個(gè)四層協(xié)議系統(tǒng),包括鏈路層,網(wǎng)絡(luò)層,運(yùn)輸層,應(yīng)用層.UDP屬于運(yùn)輸層,
下面我們由下至上一步一步來(lái)看:以太網(wǎng)(Ethernet)數(shù)據(jù)幀的長(zhǎng)度必須在46-1500字節(jié)之間,這是由以太網(wǎng)的物理特性決定的.這個(gè)1500字節(jié)被稱為鏈路層的MTU(最大傳輸單元).但這并不是指鏈路層的長(zhǎng)度被限制在1500字節(jié),其實(shí)這這個(gè)MTU指的是鏈路層的數(shù)據(jù)區(qū).并不包括鏈路層的首部和尾部的18個(gè)字節(jié).
所以,事實(shí)上,這個(gè)1500字節(jié)就是網(wǎng)絡(luò)層IP數(shù)據(jù)報(bào)的長(zhǎng)度限制。因?yàn)镮P數(shù)據(jù)報(bào)的首部為20字節(jié),所以IP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)長(zhǎng)度最大為1480字節(jié).而這個(gè)1480字節(jié)就是用來(lái)放TCP傳來(lái)的TCP報(bào)文段或UDP傳來(lái)的UDP數(shù)據(jù)報(bào)的.又因?yàn)閁DP數(shù)據(jù)報(bào)的首部8字節(jié),所以UDP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)最大長(zhǎng)度為1472字節(jié).這個(gè)1472字節(jié)就是我們可以使用的字節(jié)數(shù)。
當(dāng)我們發(fā)送的UDP數(shù)據(jù)大于1472的時(shí)候會(huì)怎樣呢?
這也就是說(shuō)IP數(shù)據(jù)報(bào)大于1500字節(jié),大于MTU.這個(gè)時(shí)候發(fā)送方IP層就需要分片(fragmentation).
把數(shù)據(jù)報(bào)分成若干片,使每一片都小于MTU.而接收方IP層則需要進(jìn)行數(shù)據(jù)報(bào)的重組.
這樣就會(huì)多做許多事情,而更嚴(yán)重的是,由于UDP的特性,當(dāng)某一片數(shù)據(jù)傳送中丟失時(shí),接收方便
無(wú)法重組數(shù)據(jù)報(bào).將導(dǎo)致丟棄整個(gè)UDP數(shù)據(jù)報(bào)。
因此,在普通的局域網(wǎng)環(huán)境下,我建議將UDP的數(shù)據(jù)控制在1472字節(jié)以下為好.
進(jìn)行Internet編程時(shí)則不同,因?yàn)镮nternet上的路由器可能會(huì)將MTU設(shè)為不同的值.
如果我們假定MTU為1500來(lái)發(fā)送數(shù)據(jù)的,而途經(jīng)的某個(gè)網(wǎng)絡(luò)的MTU值小于1500字節(jié),那么系統(tǒng)將會(huì)使用一系列的機(jī)
制來(lái)調(diào)整MTU值,使數(shù)據(jù)報(bào)能夠順利到達(dá)目的地,這樣就會(huì)做許多不必要的操作.
鑒于Internet上的標(biāo)準(zhǔn)MTU值為576字節(jié),所以我建議在進(jìn)行Internet的UDP編程時(shí).
最好將UDP的數(shù)據(jù)長(zhǎng)度控件在548字節(jié)(576-8-20)以內(nèi)
《TCP協(xié)議中的窗口機(jī)制------滑動(dòng)窗口詳解》:https://blog.csdn.net/m0_37962600/article/details/79951780
93、TCP 利用滑動(dòng)窗口實(shí)現(xiàn)流量控制的機(jī)制?
流量控制是為了控制發(fā)送方發(fā)送速率,保證接收方來(lái)得及接收。TCP 利用滑動(dòng)窗口實(shí)現(xiàn)流量控制。
TCP 中采用滑動(dòng)窗口來(lái)進(jìn)行傳輸控制,滑動(dòng)窗口的大小意味著接收方還有多大的緩沖區(qū)可以用于接收數(shù)據(jù)。發(fā)送方可以通過(guò)滑動(dòng)窗口的大小來(lái)確定應(yīng)該發(fā)送多少字節(jié)的數(shù)據(jù)。當(dāng)滑動(dòng)窗口為 0 時(shí),發(fā)送方一般不能再發(fā)送數(shù)據(jù)報(bào),但有兩種情況除外,一種情況是可以發(fā)送緊急數(shù)據(jù)。
例如,允許用戶終止在遠(yuǎn)端機(jī)上的運(yùn)行進(jìn)程。另一種情況是發(fā)送方可以發(fā)送一個(gè) 1 字節(jié)的數(shù)據(jù)報(bào)來(lái)通知接收方重新聲明它希望接收的下一字節(jié)及發(fā)送方的滑動(dòng)窗口大小。
94、可以解釋一下RTO,RTT和超時(shí)重傳分別是什么嗎?
超時(shí)重傳:發(fā)送端發(fā)送報(bào)文后若長(zhǎng)時(shí)間未收到確認(rèn)的報(bào)文則需要重發(fā)該報(bào)文??赡苡幸韵聨追N情況:
發(fā)送的數(shù)據(jù)沒(méi)能到達(dá)接收端,所以對(duì)方?jīng)]有響應(yīng)。
接收端接收到數(shù)據(jù),但是ACK報(bào)文在返回過(guò)程中丟失。
接收端拒絕或丟棄數(shù)據(jù)。
RTO:從上一次發(fā)送數(shù)據(jù),因?yàn)殚L(zhǎng)期沒(méi)有收到ACK響應(yīng),到下一次重發(fā)之間的時(shí)間。就是重傳間隔。
通常每次重傳RTO是前一次重傳間隔的兩倍,計(jì)量單位通常是RTT。例:1RTT,2RTT,4RTT,8RTT......
重傳次數(shù)到達(dá)上限之后停止重傳。
RTT:數(shù)據(jù)從發(fā)送到接收到對(duì)方響應(yīng)之間的時(shí)間間隔,即數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中一個(gè)往返用時(shí)。大小不穩(wěn)定。
95、XSS攻擊是什么?(低頻)
跨站點(diǎn)腳本攻擊,指攻擊者通過(guò)篡改網(wǎng)頁(yè),嵌入惡意腳本程
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購(gòu)買
- 本專欄成功幫助阿秀拿到字節(jié)跳動(dòng)SP的offer,脫胎于個(gè)人秋招時(shí)期的筆記總結(jié)。其中收納C++(217道)、操作系統(tǒng)(62道)、計(jì)算機(jī)網(wǎng)絡(luò)(100道)、數(shù)據(jù)結(jié)構(gòu)與算法、數(shù)據(jù)庫(kù)(MySQL、Redis)等高頻問(wèn)答知識(shí)點(diǎn)。 - 本專欄適合于校招、社招等找工作黨,后來(lái)逐漸收錄一些學(xué)弟學(xué)妹的上岸經(jīng)驗(yàn)和方法,歡迎訂閱,持續(xù)更新ing。