TCP/IP相關(guān)面試題

1.TCP的三次握手與四次揮手過(guò)程,各個(gè)狀態(tài)名稱與含義,TIMEWAIT的作用

2.TCP和UDP的區(qū)別

TCP是有連接的,兩臺(tái)主機(jī)在進(jìn)行數(shù)據(jù)交互之前必須先通過(guò)三次握手建立連接;而UDP是無(wú)連接的,沒(méi)有建立連接這個(gè)過(guò)程

TCP是可靠的傳輸,TCP協(xié)議通過(guò)確認(rèn)和重傳機(jī)制來(lái)保證數(shù)據(jù)傳輸?shù)目煽啃?;而UDP是不可靠的傳輸

TCP還提供了擁塞控制、滑動(dòng)窗口等機(jī)制來(lái)保證傳輸?shù)馁|(zhì)量,而UDP都沒(méi)有

TCP是基于字節(jié)流的,將數(shù)據(jù)看做無(wú)結(jié)構(gòu)的字節(jié)流進(jìn)行傳輸,當(dāng)應(yīng)用程序交給TCP的數(shù)據(jù)長(zhǎng)度太長(zhǎng),超過(guò)MSS時(shí),TCP就會(huì)對(duì)數(shù)據(jù)進(jìn)行分段,因此TCP的數(shù)據(jù)是無(wú)邊界的;而UDP是面向報(bào)文的,無(wú)論應(yīng)用程序交給UDP層多長(zhǎng)的報(bào)文,UDP都不會(huì)對(duì)數(shù)據(jù)報(bào)進(jìn)行任何拆分等處理,因此UDP保留了應(yīng)用層數(shù)據(jù)的邊界


3.三次握手過(guò)程中有哪些不安全性

  1)偽裝的IP向服務(wù)器發(fā)送一個(gè)SYN請(qǐng)求建立連接,然后服務(wù)器向該IP回復(fù)SYN和ACK,但是找不到該IP對(duì)應(yīng)的主機(jī),當(dāng)超時(shí)時(shí)服務(wù)器收不到ACK會(huì)重復(fù)發(fā)送。當(dāng)大量的攻擊者請(qǐng)求建立連接時(shí),服務(wù)器就會(huì)存在大量未完成三次握手的連接,服務(wù)器主機(jī)backlog被耗盡而不能響應(yīng)其它連接。即SYN泛洪攻擊

  防范措施:

  1、降低SYN timeout時(shí)間,使得主機(jī)盡快釋放半連接的占用

  2、采用SYN cookie設(shè)置,如果短時(shí)間內(nèi)連續(xù)收到某個(gè)IP的重復(fù)SYN請(qǐng)求,則認(rèn)為受到了該IP的攻擊,丟棄來(lái)自該IP的后續(xù)請(qǐng)求報(bào)文

  3、在網(wǎng)關(guān)處設(shè)置過(guò)濾,拒絕將一個(gè)源IP地址不屬于其來(lái)源子網(wǎng)的包進(jìn)行更遠(yuǎn)的路由

  2)當(dāng)一個(gè)主機(jī)向服務(wù)器發(fā)送SYN請(qǐng)求連接,服務(wù)器回復(fù)ACK和SYN后,攻擊者截獲ACK和SYN。然后偽裝成原始主機(jī)繼續(xù)與服務(wù)器進(jìn)行通信。


4.accept發(fā)生在三次握手的哪一步

????????accept會(huì)監(jiān)聽(tīng)已完成隊(duì)列是否非空,當(dāng)隊(duì)列為空時(shí),accept就會(huì)阻塞。當(dāng)隊(duì)列非空時(shí),就從已完成隊(duì)列中取出一項(xiàng)并返回。?

而已完成隊(duì)列中的都是三次握手過(guò)程已經(jīng)完成的,因此accept發(fā)生在三次握手之后。?


5.TCP在listen時(shí)的參數(shù)backlog的意義

  linux內(nèi)核中會(huì)維護(hù)兩個(gè)隊(duì)列:

  1)未完成隊(duì)列:接收到一個(gè)SYN建立連接請(qǐng)求,處于SYN_RCVD狀態(tài)

  2)已完成隊(duì)列:已完成TCP三次握手過(guò)程,處于ESTABLISHED狀態(tài)

  當(dāng)有一個(gè)SYN到來(lái)請(qǐng)求建立連接時(shí),就在未完成隊(duì)列中新建一項(xiàng)。當(dāng)三次握手過(guò)程完成后,就將套接口從未完成隊(duì)列移動(dòng)到已完成隊(duì)列。

  backlog曾被定義為兩個(gè)隊(duì)列的總和的最大值,也曾將backlog的1.5倍作為未完成隊(duì)列的最大長(zhǎng)度

一般將backlog指定為5

6.TCP選項(xiàng)有哪些

  TCP首部選項(xiàng)字段多達(dá)40B,一些常用的字段有:

  1)選項(xiàng)結(jié)束字段(EOP,0x00),占1B,一個(gè)報(bào)文段僅用一次。放在末尾用于填充,用途是說(shuō)明:首部已經(jīng)沒(méi)有更多的消息,應(yīng)用數(shù)據(jù)在下一個(gè)32位字開(kāi)始處

  2)無(wú)操作字段(NOP, 0x01),占1B,也用于填充,放在選項(xiàng)的開(kāi)頭

  3)MSS(最大報(bào)文段長(zhǎng)度),格式如下:種類(1B,值為2),長(zhǎng)度(1B,值為4),數(shù)值(2B)

  用于在連接開(kāi)始時(shí)確定MSS的大小,如果沒(méi)有確定,就用默認(rèn)的(一般實(shí)現(xiàn)是536B)

  4)窗口擴(kuò)大因子,格式如下:種類(1B,值為3),長(zhǎng)度(1B,值為3),數(shù)值(1B)

  新窗口值 = 首部窗口值 * 2的(擴(kuò)大因子)次方

  當(dāng)通信雙方認(rèn)為首部的窗口值還不夠大的時(shí)候,在連接開(kāi)始時(shí)用這個(gè)來(lái)定義更大的窗口。僅在連接開(kāi)始時(shí)有效。一經(jīng)定義,通信過(guò)程中無(wú)法更改。

  5)時(shí)間戳(應(yīng)用測(cè)試RTT和防止序號(hào)繞回)

  6)允許SACK和SACK選項(xiàng)


7.為什么建立連接需要三次握手,而斷開(kāi)連接需要四次握手

  因?yàn)槊總€(gè)方向都需要一個(gè)FIN和ACK,當(dāng)一端發(fā)送了FIN包之后,處于半關(guān)閉狀態(tài),此時(shí)仍然可以接收數(shù)據(jù)包。

  在建立連接時(shí),服務(wù)器可以把SYN和ACK放在一個(gè)包中發(fā)送。

  但是在斷開(kāi)連接時(shí),如果一端收到FIN包,但此時(shí)仍有數(shù)據(jù)未發(fā)送完,此時(shí)就需要先向?qū)Χ嘶貜?fù)FIN包的ACK。等到將剩下的數(shù)據(jù)都發(fā)送完之后,再向?qū)Χ税l(fā)送FIN,斷開(kāi)這個(gè)方向的連接。

  因此很多時(shí)候FIN和ACK需要在兩個(gè)數(shù)據(jù)包中發(fā)送,因此需要四次握手


8.超時(shí)重傳和快速重傳   

超時(shí)重傳:當(dāng)超時(shí)時(shí)間到達(dá)時(shí),發(fā)送方還未收到對(duì)端的ACK確認(rèn),就重傳該數(shù)據(jù)包

快速重傳:當(dāng)后面的序號(hào)先到達(dá),如接收方接收到了1、 3、 4,而2沒(méi)有收到,就會(huì)立即向發(fā)送方重復(fù)發(fā)送三次ACK=2的確認(rèn)請(qǐng)求重傳。如果發(fā)送方連續(xù)收到3個(gè)相同序號(hào)的ACK,就重傳該數(shù)據(jù)包。而不用等待超時(shí)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容