網絡和並發編程(面試題)


1,python的底層網絡交互模塊有哪些?

  答案:socket, urllib,urllib3 , requests, grab, pycurl

2,簡述OSI七層模型以及列舉各層協議

應用層:HTTP,FTP,NFS

表示層:Telnet,SNMP

會話層:SMTP,DNS

傳輸層:TCP,UDP

網絡層:IP,ICMP,ARP,

數據鏈路層:Ethernet,PPP,PDN,SLIP,FDDI

物理層:IEEE 802.1A,IEEE 802.11

3,C/S是什么,B/S是什么

軟件系統體系結構

C/S體系結構

指的是客戶端/服務端    例如;QQ

B(browser)/S體系結構

指的是瀏覽器/服務端      例如12306(網站);購物網站

兩者區別

C/S :優點:交互性好,對服務器壓力小,安全 ;缺點:服務器更新時需要同步更新客戶端

B/S:優點:不需要更新客戶端   缺點:交互性差,安全性低

4,簡述TCP三次握手和四次揮手過程

 連接建立階段:

第一次握手:客戶端的應用進程主動打開,並向客戶端發出請求報文段。其首部中:SYN=1,seq=x。

第二次握手:服務器應用進程被動打開。若同意客戶端的請求,則發回確認報文,其首部中:SYN=1,ACK=1,ack=x+1,seq=y。

第三次握手:客戶端收到確認報文之后,通知上層應用進程連接已建立,並向服務器發出確認報文,其首部:ACK=1,ack=y+1。當服務器收到客戶端的確認報文之后,也通知其上層應用進程連接已建立。

在這個過程中,通信雙方的狀態如下圖,其中CLOSED:關閉狀態、LISTEN:收聽狀態、SYN-SENT:同步已發送、SYN-RCVD:同步收到、ESTAB-LISHED:連接已建立

連接釋放階段:

 第一次揮手:數據傳輸結束以后,客戶端的應用進程發出連接釋放報文段,並停止發送數據,其首部:FIN=1,seq=u。

 第二次揮手:服務器端收到連接釋放報文段之后,發出確認報文,其首部:ack=u+1,seq=v。此時本次連接就進入了半關閉狀態,客戶端不再向服務器發送數據。而服務器端仍會繼續發送。

第三次揮手:若服務器已經沒有要向客戶端發送的數據,其應用進程就通知服務器釋放TCP連接。這個階段服務器所發出的最后一個報文的首部應為:FIN=1,ACK=1,seq=w,ack=u+1。

 第四次揮手:客戶端收到連接釋放報文段之后,必須發出確認:ACK=1,seq=u+1,ack=w+1。 再經過2MSL(最長報文端壽命)后,本次TCP連接真正結束,通信雙方完成了他們的告別。

 在這個過程中,通信雙方的狀態如下圖,其中:ESTAB-LISHED:連接建立狀態、FIN-WAIT-1:終止等待1狀態、FIN-WAIT-2:終止等待2狀態、CLOSE-WAIT:關閉等待狀態、LAST-ACK:最后確認狀態、TIME-WAIT:時間等待狀態、CLOSED:關閉狀態

5,什么是arp協議?

ARP協議,全稱“Address Resolution Protocol”,中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的物理地址(MAC地址)。

6,TCP與UDP區別總結:

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的
UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節

6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

6,為何基於tcp協議的通信比基於udp協議的通信更可靠?

tcp:可靠 對方給了確認收到信息,才發下一個,如果沒收到確認信息就重發
udp:不可靠 一直發數據,不需要對方回應

‍5.流式協議指的是什么協議,數據報協議指的是什么協議?

流式協議: TCP協議,可靠傳輸
數據報協議: UDP協議,不可傳輸

6.什么是socket?簡述基於tcp協議的套接字通信流程

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部。

服務端:創建socket對象,綁定ip端口bind(),  設置最大鏈接數listen(),  accept()與客戶端的connect()創建雙向管道, send(), recv(),close()

客戶端:創建socket對象,connect()與服務端accept()創建雙向管道 ,  send(), recv(),close()

7.什么是粘包? socket 中造成粘包的原因是什么? 哪些情況會發生粘包現象? 

粘包:數據粘在一起,主要因為:接收方不知道消息之間的界限,不知道一次性提取多少字節的數據造成的
數據量比較小,時間間隔比較短,就合並成了一個包,這是底層的一個優化算法(Nagle算法)

8,IO多路復用的作用?並列舉實現機制以及區別?

I/O多路復用是用於提升效率,單個進程可以同時監聽多個網絡連接IO。

舉例:通過一種機制,可以監視多個文件描述符,一旦描述符就緒(讀就緒和寫就緒),能通知程序進行相應的讀寫操作,I/O多路復用避免阻塞在io上,
原本為多進程或多線程來接收多個連接的消息變為單進程或單線程保存多個socket的狀態后輪詢處理

 

9,select/poll/epoll的區別

I/O多路復用的本質就是用select/poll/epoll,去監聽多個socket對象,如果其中的socket對象有變化,只要有變化,用戶進程就知道了。

  select是不斷輪詢去監聽的socket,socket個數有限制,一般為1024個;

  poll還是采用輪詢方式監聽,只不過沒有個數限制;

  epoll並不是采用輪詢方式去監聽了,而是當socket有變化時通過回調的方式主動告知用戶進程。

 

10,什么是防火牆?防火牆的作用?

在互聯網上防火牆是一種非常有效的網絡安全模型,通過它可以隔離風險區域(即Internet或有一定風險的網絡)與安全區域(局域網)的連接,

同時不會妨礙人們對風險區域的訪問。所以它一般連接在核心交換機與外網之間。

1.過濾進出網絡的數據 2.管理進出訪問網絡的行為 3.封堵某些禁止業務 4.記錄通過防火牆信息內容和活動 5.對網絡攻擊檢測和告警

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM