python面試基礎知識(四) 網絡部分

一、簡述TCP/UDP的區別?

TCP和UDP是OSI模型中的運輸層中的協議。

回答這個問題主要從一下幾點來說:
1、是否面向連接
TCP面向連接,UDP面向非連接即發送數據前不需要建立鏈接
2、可靠性
TCP提供可靠的服務(數據傳輸),UDP無法保證
3、有序性
TCP有序,UDP無序
4、速度
TCP數據傳輸慢,UDP數據傳輸快
5、量級

二、能說一下你瞭解的端口及對應的服務?

21           FTP
22           SSH
80           HTTP
443          HTTPS
3306         MySQL
6379         Redis

三、能說幾個常見HTTP狀態碼及其含義嗎?

2xx 正常

3xx 重定向

4xx 客戶端出現錯誤
403 權限被拒絕
404 請求資源不存在

5xx 服務器異常
503 服務器暫時處於超負載或正在進行停機維護,無法處理請求

四、簡單說說TCP的三次握手和四次揮手

1、三次握手示意圖
在這裏插入圖片描述

第一次握手:客戶端發送SYN包(seq=x)到服務器,並進入SYN_SEND狀態,等待服務器確認
第二次握手:服務器受到SYN包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(seq=y),即SYN+ACK包。此時服務器進入SYN_RECV狀態
第三次握手:客戶端受到SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器端進入ESTABLISHED狀態,完成三次握手

2、四次揮手示意圖
8

第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態
第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1,Server進入CLOSE_WAIT狀態
第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態
第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手

五、爲什麼需要三次握手才能建立連接?

爲了初始化Sequence Number的初始值

六、爲什麼需要四次揮手才能斷開連接?

因爲服務器與客戶端是全雙工,即發送方和接收方都需要FIN報文和ACK報文

七、爲什麼會有TIME_WAIT狀態(2MSL)?

1、確保有足夠的時間讓對方收到ACK包
2、避免新舊連接混淆

八、TCP如何保證可靠性傳輸的?

校驗和
序列號
確認應答
超時重傳
連接管理
流量控制
擁塞控制

九、POST和GET請求的區別

1.GET請求的數據會附在URL之後,以?分割URL和傳輸數據,參數之間以&相連,POST把提交的數據則放置在是HTTP包的包體中。
2.GET的長度受限於url的長度,而url的長度限制是特定的瀏覽器和服務器設置的,理論上GET的長度可以無限長。
3.POST是沒有大小限制的,HTTP協議規範也沒有進行大小限制,起限制作用的是服務器的處理程序的處理能力
4.在ASP中,服務端獲取GET請求參數用Request.QueryString,獲取POST請求參數用Request.Form。
5.POST的安全性要比GET的安全性高

十、HTTP和HTTPS的區別

http的中文叫做超文本傳輸協議,它負責完成客戶端到服務端的一系列操作,是專門用來傳輸注入HTML的超媒體文檔等web內容的協議,
它是基於傳輸層的TCP協議的應用層協議

https:https是基於安全套接字的http協議,也可以理解爲是http+ssl/tls(數字證書)的組合

http和https的區別:

1、HTTP 的 URL 以 http:// 開頭,而 HTTPS 的 URL 以 https:// 開頭
2、HTTP 是不安全的,而 HTTPS 是安全的
3、HTTP 標準端口是 80 ,而 HTTPS 的標準端口是 443
4、在 OSI 網絡模型中,HTTPS的加密是在傳輸層完成的,因爲SSL是位於傳輸層的,TLS的前身是SSL,所以同理
5、HTTP無需認證證書,而https需要認證證書 

十一、 爲什麼HTTPS安全

HTTPS是HTTP和SSL組合而成的,在傳輸層使用了SSL進行加密,保證了只有擁有私鑰的才能看到信息

十二、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什麼?

1.在瀏覽器端輸入網站的url地址
只有知道了一個網站的url地址才能訪問到這個網站

2.瀏覽器查找緩存
瀏覽器會查找瀏覽器緩存,系統緩存,路由緩存,如果沒有的話 繼續下一步,如果有的話,直接顯示

注意:瀏覽器會把訪問過得web網站資源(html 圖片)緩存起來,而判斷是否使用緩存的條件有以下幾種:

是否有這個網站的緩存
這個網站的緩存是否過期,具體看Cache-Control 中緩存的有效時間
跟服務器進行協商是否使用緩存,如果上次緩存的時候有Last-modified 和 Etag 字段,本次請求就會加上If-Modified-Since(上次請求資源的時間)和If-None-Match(上次資源的修改時間)
3.通過DNS獲取url對應的ip地址
現在本機的host文件中查找是否有這個url對應的ip,如果沒有的話,就請求DNS進行ip地址的獲取

4.建立TCP鏈接
http在工作之前,需要客戶端和服務端建立鏈接,這個鏈接的建立是通過tcp(三次握手)來完成的,因爲http是比tcp更高層的協議,在網絡協議的建立中,不談底層談高層都是在耍流氓,所以想要讓http進行工作,需要tcp首先建立鏈接

 

5.瀏覽器向web服務器發送請求
一旦鏈接已經建立,瀏覽器就可以給web服務器發送請求命令,比如 : GET/deom/hello.jsp HTTP/1.1

 

6.瀏覽器給web服務器發送請求頭信息
瀏覽器在發送了請求後,還要給web服務器請求頭信息,比如accept-charset(瀏覽器端指定的字符集),最後發送一個空的請求頭代表請求發送完畢,注意:如果是post提交,則會繼續提交請求體

 

7.web服務器進行應答
應答的第一部分是http版本號,第二部分是協議的狀態碼,比如:HTTP/1.1 200 OK

 

8.web服務器發送應答頭消息
web服務器給瀏覽器發送應答頭消息,也就是關於web服務器自己的信息,最後發送一個空白行代表應答結束

 

9.web服務器發送數據
以應答頭裏面的content-type所描述的格式發送數據

 

10.web服務器關閉鏈接
web服務器向瀏覽器發送了應答數據之後,就要關閉tcp鏈接(tcp四次握手關閉鏈接),如果添加了connection:keep-alive,那麼就還會保持鏈接狀態

python面試基礎知識(三) Django部分

發佈了89 篇原創文章 · 獲贊 253 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章