no.1 tcp/ip基礎
(這些知識點都可以參考:
no.2 常見面試題
tcp與udp的區別:
①tcp協議是有連線的,有連線的意思是開始傳輸實際資料之前tcp的客戶端和伺服器端必須通過三次握手建立連線,會話結束之後通過四次揮手結束連線。而udp是無連線的
②tcp協議保證資料按序傳送,按序到達,提供超時重傳來保證可靠性,但是udp不保證按序到達,甚至不保證到達,只是努力交付,即便是按序傳送的序列,也不保證按序送到。
③tcp有流量控制和擁塞控制,而udp沒有,所以udp及時網路擁堵客戶端的傳送速率也不會有影響
④tcp協議所需資源多,tcp首部需20個位元組(不算可選項),udp首部欄位只需8個位元組。
⑤tcp只支援一對一通訊,而udp支援一對一,一對多,多對多通訊
⑥tcp是面向位元組流,可靠的服務,udp是面向報文,不可靠的服務
⑦tcp注重資料安全性,udp資料傳輸快,因為不需要連線等待,少了許多操作,但是其安全性卻一般
請詳細介紹一下tcp協議建立連線和終止連線的過程?
建立乙個tcp連線時,會發生下述情形:
1、伺服器端必須做好準備接受外來的連線。這通常通過 socket(), bind(), listen() 三個函式來完成的。我們稱之為 被動開啟(passive open).
2、客戶端通過呼叫connect發起主動開啟(active open)。這導致客戶端tcp傳送syn同步分節。它告訴伺服器客戶端在(待建立的)連線中傳送的資料的初始化序列號。通用syn分節不攜帶資料,
3、伺服器必須確認(ack) 客戶端的syn,同時自己也得傳送乙個syn分節,它含有伺服器將在統一連線中傳送的資料的初始化序號。伺服器在單個分節中傳送syn和對客戶端syn的ack確認。
4、客戶端必須確認伺服器的syn。
建立連線:三次握手
tcp連線的終止:
1、某個應用程式首先呼叫close,主動關閉(active close) 該端的tcp於是傳送乙個fin分節,表示資料傳送完畢。
2、接收到這個fin的對端執行被動關閉(passive close)。這個fin是tcp確認。它的接收也作為乙個檔案結束符(end of file) 傳遞給接收端的應用程式(放在排隊等候應用程序接收的任何其他資料之後),因為fin的接收意味著接收端應用程式在相應連線上再無額外資料可以接收。
3、一段時間以後,接收到這個檔案結束符的應用程序將呼叫close關閉它的套接字。這導致它的tcp也傳送乙個fin。
4、接收這個最終fin的原傳送端tcp(即執行主動關閉的一端)確認這個fin
關閉連線:四次揮手
三次握手建立連線時,傳送方再次傳送確認的必要性?
採用三次握手是為了防止失效的連線請求報文段突然又傳送到b,而產生錯誤。失效的連線請求報文段:主機a發出的連線請求沒有得到主機b的確認,於是過了一段時間,主機a又向主機b傳送新的連線請求,且建立成功,完成資料傳輸。考慮到這一種情況,主機a第一次傳送的連線請求並沒有丟失,而是因為網路節點長時間滯留導致延遲到達主機b,主機b以為是主機a的新連線請求,於是主機b傳送了確認請求給a,而a並不會理會b的這個確認請求,主機b就會一直在等待主機a傳送資料,導致了主機b的資源浪費。
四次揮手釋放連線時,等待2msl的意義?
第一,為了保證a傳送的最有乙個ack報文段能夠到達b。這個ack報文段有可能丟失,因而使處在last-ack狀態的b收不到對已傳送的fin和ack報文段的確認。b會超時重傳這個fin和ack報文段,而a就能在2msl時間內收到這個重傳的ack+fin報文段,接著a重傳一次確認。
第二,就是防止上面提到的已失效的連線請求報文段出現在本連線中,a在傳送完最有乙個ack報文段後,再經過2msl,就可以使本連線持續的時間內所產生的所有報文段都從網路中消失。
幾個面試題 持續更新
1.簡單列舉了解的程式語言及語言間區別。python簡單,python開發效率快,python 簡潔,跨平台,學習成本比較低 2.列舉python2和3的區別 後期要找一些模組和專案的區別 py3 print 編碼方式 unicode 類 新式類 range 可迭代物件 input 獲取的內容全都是...
kafka面試題 持續更新
kafka 中的資料只能儲存七天,隨之而來的問題就是某個偏移量對應的資料被清除,我們通過偏移量去查詢資料而發生的報錯 資料已經被 kafka 給清除掉了 也就是說我們讀取的偏移量小於 kafka 中資料儲存的最早的偏移量,說明資料已經被 kafka 給乾掉了 解決方式 將拿到的偏移量和 kafka ...
HashMap面試題(持續更新)
1 hashmap的資料結構?底層使用的是雜湊表 陣列加鍊表 結合陣列和鍊錶的優點,為提高鍊錶的查詢效率,jdk8之後,當鍊表的長度超過8,鍊錶就轉換成紅黑樹 2 能說說hashmap的put 和get 方法的具體實現嘛?儲存物件時,將k v值傳給put 方法 獲取物件時,將k傳給get 方法 ha...