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