linux c網路網路程式設計面試題收集

shuilaner_發表於2018-11-29



網路/網路程式設計部份:

1、connect方法會阻塞,請問有什麼方法可以避免其長時間阻塞?
答:最通常的方法最有效的是加定時器;也可以採用非阻塞模式。

2、網路中,如果客戶端突然掉線或者重啟,伺服器端怎麼樣才能立刻知道?
答:若客戶端掉線或者重新啟動,伺服器端會收到復位訊號,每一種tcp/ip得實現不一樣,控制機制也不一樣。

3.在子網210.27.48.21/30種有多少個可用地址?分別是什麼?
答:

簡:
30表示的是網路號(network number)是30位,剩下2位中11是廣播(broadcast)地址,00是multicast地址,只有01和10可以作為host address。

詳:
210.27.48.21/30代表的子網的網路號是30位,即網路號是210.27.48.21 & 255.255.255.251=210.27.48.20,此子網的地址空間是2位,即可以有4個地址:210.27.48.20,210.27.48.21, 210.27.48.22, 210.27.48.23。第一個地址的主機號(host number/id)是0,而主機號0代表的是multicast地址。最後一個地址的最後兩位是11,主機號每一位都為1代表的是廣播(broadcast)地址。所以只有中間兩個地址可以給host使用。其實那個問題本身不準確,廣播或multicast地止也是可以使用的地址,所以回答4也應該正確,當然問的人也可能是想要你回答2。我個人覺得最好的回答是一個廣播地址,一個multicast地址,2個unicast地址。

4.TTL是什麼?有什麼用處,通常那些工具會用到它?(ping? traceroute? ifconfig?netstat?)
答:
簡:TTL是Time To Live,一般是hupcount,每經過一個路由就會被減去一,如果它變成0,包會被丟掉。它的主要目的是防止包在有迴路的網路上死轉,浪費網路資源。ping和traceroute用到它。

詳:TTL是Time To Live,目前是hupcount,當包每經過一個路由器它就會被減去一,如果它變成0,路由器就會把包丟掉。IP網路往往帶有環(loop),比如子網A和子網B有兩個路由器相連,它就是一個loop。TTL的主要目的是防止包在有迴路的網路上死轉,因為包的TTL最終後變成0而使得此包從網上消失(此時往往路由器會送一個ICMP包回來,traceroute就是根據這個做的)。ping會送包出去,所以裡面有它,但是ping不一定非要不可它。traceroute則是完全因為有它才能成的。ifconfig是用來配置網路卡的,netstat -rn 是用來列路由表的,所以都用不著它

5.路由表示做什麼用的?在linux環境中怎麼來配置一條預設路由?
答:
簡:路由表是用來決定如何將包從一個子網傳送到另一個子網的,換局話說就是用來決定從一個網路卡接收到的包應該送的哪一張網路卡上的。在Linux上可以用“route add default gw <預設路由器IP>”來配置一條預設路由。

詳:路由表是用來決定如何將包從一個子網傳送到另一個子網的,換局話說就是用來決定從一個網路卡接收到的包應該送的哪一張網路卡上的。路由表的每一行至少有目標網路號、netmask、到這個子網應該使用的網路卡。當路由器從一個網路卡接收到一個包時,它掃描路由表的每一行,用裡面的netmask和包裡的目標IP地址做並邏輯運算(&)找出目標網路號,如果此網路號和這一行裡的網路號相同就將這條路由保留下來做為備用路由,如果已經有備用路由了就在這兩條路由裡將網路號最長的留下來,另一條丟掉,如此接著掃描下一行直到結束。如果掃描結束任沒有找到任何路由,就用預設路由。確定路由後,直接將包送到對應的網路卡上去。在具體的實現中,路由表可能包含更多的資訊為選路由演算法的細節所用。題外話:路由演算法其實效率很差,而且不scalable,解決辦法是使用IP交換機,比如MPLS。
在Linux上可以用“route add default gw <預設路由器IP>”來配置一條預設路由。

6.在網路中有兩臺主機A和B,並通過路由器和其他交換裝置連線起來,已經確認物理連線正確無誤,怎麼來測試這兩臺機器是否連通?如果不通,怎麼來判斷故障點?怎麼排除故障?
答:測試這兩臺機器是否連通:從一臺機器ping另一臺機器
如果ping不通,用traceroute可以確定是哪個路由器不能連通,然後再找問題是在交換裝置/hup/cable等。

7.網路程式設計中設計併發伺服器,使用多程式 與多執行緒 ,請問有什麼區別?
答案一:
1,程式:子程式是父程式的複製品。子程式獲得父程式資料空間、堆和棧的複製品。
2,執行緒:相對與程式而言,執行緒是一個更加接近與執行體的概念,它可以與同程式的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的執行序列。
兩者都可以提高程式的併發度,提高程式執行效率和響應時間。
執行緒和程式在使用上各有優缺點:執行緒執行開銷小,但不利於資源管理和保護;而程式正相反。同時,執行緒適合於在SMP機器上執行,而程式則可以跨機器遷移。

答案二:
根本區別就一點:用多程式每個程式有自己的地址空間(address space),執行緒則共享地址空間。所有其它區別都是由此而來的:
1。速度:執行緒產生的速度快,執行緒間的通訊快、切換快等,因為他們在同一個地址空間內。
2。資源利用率:執行緒的資源利用率比較好也是因為他們在同一個地址空間內。
3。同步問題:執行緒使用公共變數/記憶體時需要使用同步機制還是因為他們在同一個地址空間內。
等等

相關文章