前端小夥伴找工作的時候是不是常常被問到http的tcp三次握手策略是怎麼建立的啊。
看到篇文章以後在面試這塊就不用怕了?
其實TCP/IP按層分的話,分為4層,分別是
1 應用層
2 傳輸層
3 網路層
4 鏈路層
關於這4層分別是什麼,在這就不多說了,今天我們們只看 傳輸層(TCP協議層)。
tcp作為傳輸層它主要提供了一下功能,
- 提供了可靠的位元組流服務
- 確保資料能夠到達目標
1、TCP提供的可靠位元組流服務。
1.1 、所謂的位元組流服務,簡單的理解就是身為傳輸層的tcp協議,能夠把傳輸比較大的資料進行分塊處理,按序號分塊處理成網路傳輸的小單位。其實就是為了方便傳輸。
比較官方店的解釋為:”為了方便傳輸,將大的資料分割成以報文段為單位的資料包進行管理“
1.2 、可靠的傳輸服務,簡單的理解為tcp協議能夠把大資料包已經分割成報文為單位的資料包準確可靠傳給對方。
總結上面1.1、1.2得知tcp協議為了容易傳送資料才把資料分割,而且tcp協議能夠確認資料最終是否送達到對方。
2、確保資料能夠到達目標
tcp的三次?就是馬上就要浮出真面目。
為了確保資料能後無誤的送達目標處,tcp協議採用面試關常問的三次握手(three-way-handshaking)策略,用於tcp協議把資料包送出去後,tcp不會對傳送的後的情況置之不理,它一定會向對方確認是否成功送達。
先簡單的理解一下三次握手機制,簡單的例子比如我們們大家是不是都在支付寶或者微信上面進行過轉賬啊,比如我有一個好朋友趙鑫,趙鑫打電話給我借錢,我得知這個訊息後,要給他轉錢,我選擇在微信上面給他轉賬了。
我把錢轉給他以後,接著就給他發了一條資訊”我把2000元已經轉給你了,你注意查收一下“,
趙鑫看到資訊以後就會回覆:’錢收到了,下個月還你‘等這類的話
我看到資訊後回覆:’收到,好的‘
轉賬加資訊回覆就是簡單描述三次握手,接下來我們看看在tcp層怎麼實現的
在握手的過程中使用了tcp的標誌(flag)-SYN(synchronize,使.....同步)和ACK(acknowledgement,承認、確認)。
傳送端在資料包傳送以後,首先傳送一個帶SYC(synchronize)標誌的資料包給對方,接收端收到後,回傳一個帶有SYN(synchronize)/ACK(acknowledgement)標誌的資料包已傳達接收端的確認資訊。傳送端在回傳一個帶有ACK標誌的資料包,代表”握手結束“,
若在握手中某個階段莫名中斷,tcp協議會再次以相同的順序傳送相同的資料包
除了上述的三次握手,tcp協議還有其他各種手段來確保通訊的可靠性