Linux C/C++服務器後臺開發面試題總結(網絡編程篇)

Linux C/C++服務器後臺開發面試題總結(網絡編程篇)

1. TCP頭大小,包含字段?三次握手,四次斷開描述過程,都有些什麼狀態。狀態變遷圖。TCP/IP收發緩衝區(2次)
頭部大小是20字節,包含數據如下:

  • 三次握手:
  • 四次釋放:
  • 狀態變遷圖:
  • 收發緩衝區:

2. 使用udp和tcp進程網絡傳輸,爲什麼tcp能保證包是發送順序,而 udp無法保證?

因爲TCP發送的數據包是按序號發送,有確認機制和丟失重傳機制,而udp是不可靠的發送機制,發送的對應端口的數據包不是按順序發送的。

3. epoll哪些觸發模式,有啥區別?(必須非常詳盡的解釋水平觸發和邊緣觸發的區別,以及邊緣觸發在編程中要做哪些更多的確認)

epoll有EPOLLLT和EPOLLET兩種觸發模式,LT是默認的模式,ET是“高速”模式。LT模式下,只要這個fd還有數據可讀,每次 epoll_wait都會返回它的事件,提醒用戶程序去操作,而在ET(邊緣觸發)模式中,它只會提示一次,直到下次再有數據流入之前都不會再提示了,無論fd中是否還有數據可讀。所以在ET模式下,read一個fd的時候一定要把它的buffer讀光,也就是說一直讀到read的返回值小於請求值。

也就是說在LT模式的情況下一定要確認收發的數據包的buffer是不是足夠大如果收發數據包大小大於buffer的大小的時候就可能會出現數據丟失的情況。

4. tcp與udp的區別(必問)爲什麼TCP要叫做數據流?

1).基於連接與無連接
2).對系統資源的要求(TCP較多,UDP少)
3).UDP程序結構較簡單
4).流模式與數據報模式
5).TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證
6).TCP有擁塞控制和流量控制,UDP沒有

TCP提供的是面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之後才能傳輸數據。TCP提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。

是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快

5. 流量控制和擁塞控制的實現機制

網絡擁塞現象是指到達通信子網中某一部分的分組數量過多,使得該部分網絡來不及處理,以致引起這部分乃至整個網絡性能下降的現象,嚴重時甚至會導致網絡通信業務陷入停頓,即出現死鎖現象。擁塞控制是處理網絡擁塞現象的一種機制。數據的傳送與接收過程當中很可能出現收方來不及接收的情況,這時就需要對發方進行控制,以免數據丟失。

6. 滑動窗口的實現機制

滑動窗口機制,窗口的大小並不是固定的而是根據我們之間的鏈路的帶寬的大小,這個時候鏈路是否擁護塞。接受方是否能處理這麼多數據了。 滑動窗口協議,是TCP使用的一種流量控制方法。該協議允許發送方在停止並等待確認前可以連續發送多個分組。由於發送方不必每發一個分組就停下來等待確認,因此該協議可以加速數據的傳輸。

7. epoll和select的區別?

1)select在一個進程中打開的最大fd是有限制的,由FD_SETSIZE設置,默認值是2048。不過 epoll則沒有這個限制,內存越大,fd上限越大,1G內存都能達到大約10w左右。

2)select的輪詢機制是系統會去查找每個fd是否數據已準備好,當fd很多的時候,效率當然就直線下降了,epoll採用基於事件的通知方式,一旦某個fd數據就緒時,內核會採用類似callback的回調機制,迅速激活這個文件描述符,高效。

3)select還是epoll都需要內核把FD消息通知給用戶空間,epoll是通過內核於用戶空間mmap同一塊內存實現的,而select則做了不必要的拷貝

8. 網絡中,如果客戶端突然掉線或者重啓,服務器端怎麼樣才能立刻知道?

若客戶端掉線或者重新啓動,服務器端會收到復位信號,每一種tcp/ip得實現不一樣,控制機制也不一樣。

9. TTL是什麼?有什麼用處,通常那些工具會用到它?ping? traceroute? ifconfig? netstat?

TTL是Time To Live,每經過一個路由就會被減去一,如果它變成0,包會被丟掉。它的主要目的是防止包在有迴路的網絡上死轉,浪費網絡資源。ping和traceroute用到它。

10. linux的五種IO模式/異步模式.

1)同步阻塞I/O
2)同步非阻塞I/O
3)同步I/O複用模型
4) 同步信號驅動I/O
5) 異步I/O模型

11. 請說出http協議的優缺點.

1.支持客戶/服務器模式。2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑,通信速度很快。3.靈活:HTTP允許傳輸任意類型的數據對象。4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,導致每次連接傳送的數據量增大。缺點就是不夠安全,可以使用https完成使用

12. NAT類型,UDP穿透原理。

1)Full cone NAT (全克隆nat):一對一NAT一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2)。
2)Address-Restricted cone NAT(地址受限克隆nat):任意外部主機(hostAddr:any)都能通過給eAddr:port2發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:any. "any"也就是說端口不受限制
3). Port-Restricted cone NAT:內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經eAddr:port2向外發送。一個外部主機(hostAddr:port3)能夠發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:port3.
4). Symmetric NAT(對稱NAT):同內部IP與port的請求到一個特定目的地的IP地址和端口,映射到一個獨特的外部來源的IP地址和端口。同一個內部主機發出一個信息包到不同的目的端,不同的映射使用外部主機收到了一封包從一個內部主機可以送一封包回來

13. 大規模連接上來,併發模型怎麼設計

Epoll+線程池(epoll可以採用libevent處理)

14. tcp三次握手的,accept發生在三次握手哪個階段?

三次握手:C----->SYN K
S------>ACK K+1 SYN J
C------->ACK J+1
DONE!
client 的 connect 引起3次握手
server 在socket, bind, listen後,阻塞在accept,三次握手完成後,accept返回一個fd,

15. 流量控制與擁塞控制的區別,節點計算機怎樣感知網絡擁塞了?

擁塞控制是把整體看成一個處理對象的,流量控制是對單個的節點。

感知的手段應該不少,比如在TCP協議裏,TCP報文的重傳本身就可以作爲擁塞的依據。依據這樣的原理, 應該可以設計出很多手段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章