1 三次握手,四次揮手
三次握手
爲什麼需要握手
TCP需要數據安全性,不同連接之間不能混淆,所以序列號不一樣,每次握手雙方得提供序列號同步
(另外還同步報文,滑動窗口等等)
爲什麼是三次握手,不能是四次
因爲四次揮手多了一步被動關閉狀態,揮手時候允許半關閉狀態繼續傳送數據,無超時設定
三次握手建立連接時候不允許存在半打開狀態下傳輸消息,則有超時設定
SYN超時
server收到client的SYN,回覆SYN-ACK但未收到client的ACK,server會不斷重試直至超時。
linux默認63s斷開連接
SYN Flood問題
SYN隊列滿後,通過tcp_syncookies參數回發SYN Cookie,如正常連接則client回發SYN Cookie,建立連接
已連接,Client出現故障
保活機制
向對方發送保活探測報文,未收到相應繼續發送
嘗試次數到達保活探測數仍未收到相應則中斷連接
四次揮手
爲什麼有Time-wait
有足夠時間讓對方收到ACK包,避免新舊連接混淆
四次揮手下ClOSE_WAIT狀態產生原因
三次握手建立連接後,不分server和client,雙方都可以主動關閉
被關閉一方,可以隨時close_wait被動關閉,不設置超時時間,半關閉狀態任可以接受數據
可能原因--對方socket關閉連接,我方忙於讀寫未及時關閉
1 檢查代碼,特別是釋放資源代碼
2 檢查配置,特別是處理請求線程配置
2 HTTP協議問題
過期緩存用途
比如爲了用戶更好體驗,使用過期緩存數據等
請求相應頭部有什麼
Cache-Control,Expires, Last-Modified, if-Modified-Since, Etag, if-None-Match
頭部Cache-Control下的內部常用值
max-age :過期時間
no-cache:使用緩存
public 客戶端和代理服務器(CDN,Nginx等)都可緩存
private 只有客戶端可以緩存
等
緩存過期時間Expires如何設定
1 自己設定
2 默認設定 (DownloadTime - LastModified) * 10%
如何使用HTTP緩存
通過頭部下Last-Modified(資源最新修改時間,由服務器告訴瀏覽器)和 if-Modified-Since(資源最新修改時間,
由瀏覽器告訴服務器),來判斷數據是否發生修改。另外再判斷Expires是否過期,如果未過期也沒有修改返回,
304 Not Modified,否則發送新數據 200 OK。
地址欄輸入URL後流程
DNS解析找IP地址
通過IP和Port建立TCP連接
發送HTTP請求
(如果額外配置,會經過正向代理,反向代理網關拿緩存。(CDN,Nginx等等,之間可能還會再次經歷DNS),緩存沒有命中,CDN,Nginx等代理和服務器拿數據或者更新緩存,然後交付數據)
服務器處理請求並返回HTTP報文
瀏覽器渲染頁面並且四次揮手
HTTP長連接
優勢:減少握手次數,減少慢啓動影響(TCP傳輸的慢啓動)
缺點:產生TCP傳輸阻塞問題,丟包後(未正確順序拿到ACK),應用層不會繼續接受傳過來的數據,超時後重傳丟包數據才能繼續接受
原理:HTTP下header的connection爲close時爲短連接,keepalived長連接
多播如何實現
單播1對1(TCP/UDP)
多播是一對多,TCP是點對點,所以不支持
所以在局域網內通過廣播,和組播發送。是通過交換機路由器來複制數據,減少網絡消耗帶寬
IP地址全1則爲廣播等
服務器併發最大連接數是多少
不是由65535個端口數量決定,操作系統是通過一個四元組來標識一個TCP鏈接
TCP四源組(IP源地址,IP目標地址,源端口,目的端口), 端口和進程聯繫,
每一個TCP鏈接都要佔用一個文件句柄,系統允許創建的鏈接數取決於句柄數的上限
Linux中這個值默認是1024,我們也可以自己修改配置的更大
TCP和UDP選擇區別
UDP--一對多,效率高,簡單,實時性好
TCP--傳遞任意長度,可靠,流量控制,擁塞控制
等比較基礎略
HTTP2有什麼優點
之前版本header太長,cookie太長等,http2壓縮了header
多路複用,一個連接可以複用多次
消息推送,可以直接傳遞緩存no-cache數據
stream權重優先級區分
TCP滑動窗口,慢開始等
Get和Post區別
Cookie和Session區別
Http和Https區別
SSL
Https數據傳輸流程等
略