計算機網絡問題

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數據傳輸流程等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章