1.tcp和udp區別
-
TCP 是面向連接的、可靠的、有序的、速度慢的協議;
UDP 是無連接的、不可靠的、無序的、速度快的協議。
-
TCP 開銷比 UDP 大,TCP 頭部需要 20 字節,
UDP 頭部只要 8 個字節。 -
TCP 無界有擁塞控制
UDP 有界無擁塞控制。
2.get和post的區別
GET參數通過URL傳遞,POST放在Request body中。
GET請求在URL中傳送的參數是有長度限制的,而POST麼有。
對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
GET在瀏覽器回退時是無害的,而POST會再次提交請求。
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
GET請求只能進行url編碼,而POST支持多種編碼方式。
GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
GET比POST更不安全,因爲參數直接暴露在URL上,所以不能用來傳遞敏感信息。
3.在瀏覽器中輸入url地址 ->> 顯示主頁的過程
通過域名查找IP(DNS), 給服務器發http請求, 服務器處理請求, 返回一個響應, 然後瀏覽器加載這些響應;
- DNS解析
- TCP連接
- 發送HTTP請求
- 服務器處理請求並返回HTTP報文
- 瀏覽器解析渲染頁面
- 連接結束
4.三次握手四次揮手
三次握手
- 客戶端–發送帶有 SYN 標誌的數據包–一次握手–服務端
- 服務端–發送帶有 SYN/ACK 標誌的數據包–二次握手–客戶端
- 客戶端–發送帶有帶有 ACK 標誌的數據包–三次握手–服務端
四次揮手(一般是客戶端主動關閉, 否則服務器端會有大量socket處於time_wait狀態)
- 客戶端-發送一個 FIN,用來關閉客戶端到服務器的數據傳送
- 服務器-收到這個 FIN,它發回一 個 ACK,確認序號爲收到的序號加1 。和 SYN 一樣,一個 FIN 將佔用一個序號
- 服務器-關閉與客戶端的連接,發送一個FIN給客戶端
- 客戶端-發回 ACK 報文確認,並將確認序號設置爲收到序號加1
Time_wait和Close_wait
根據TCP協議定義的3次握手斷開連接規定,發起socket主動關閉的一方 socket將進入TIME_WAIT狀態。TIME_WAIT狀態將持續2個MSL(Max Segment Lifetime),在Windows下默認爲4分鐘,即240秒。TIME_WAIT狀態下的socket不能被回收使用. 具體現象是對於一個處理大量短連接的服務器,如果是由服務器主動關閉客戶端的連接,將導致服務器端存在大量的處於TIME_WAIT狀態的socket, 甚至比處於Established狀態下的socket多的多,嚴重影響服務器的處理能力,甚至耗盡可用的socket,停止服務。
5.流量控制, 擁塞控制
滑動窗口法 => [流量控制+可靠性]
-
#1已收到ack確認的數據。
-
#2發還沒收到ack的。
-
#3在窗口中還沒有發出的(接收方還有空間)。
-
#4窗口以外的數據(接收方沒空間)
(使用Nagle算法, 不用每次只發一個數據, 每次發一個小分塊)
擁塞控制主要是四個算法:
- 1)慢啓動,(cwnd從1開始, 每次x2, 指數增長, 直到慢開始門限爲止->轉入擁塞避免)
- 2)擁塞避免算法,(每經過一次發包確認的往返時間, 擁塞窗口+1, 線性增長)
- 3)擁塞發生,(cwnd置1, 慢開始門限減半, 重新開始慢啓動)
- 4)快速恢復(丟包之後, 慢開始門限減半, cwnd/=2, 進入擁塞避免)
6.http和https的區別
1、https協議需要到ca申請證書,免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http是80端口, https是443端口;
4、HTTPS是由SSL+HTTP構建, 可加密傳輸、身份認證,更安全。