1 什么是三次握手丰刊?
TCP作為一種可靠傳輸控制協(xié)議泽裳,其核心思想:既要保證數(shù)據(jù)可靠傳輸瞒斩,又要提高傳輸?shù)男剩挝帐志褪鞘墙CP連接的機(jī)制涮总,它主要完成以下目標(biāo):
????1 確定連接雙方的起始序列號胸囱,以支持可靠傳輸;
????2 解決已失效的連接請求再次到達(dá)了服務(wù)端而導(dǎo)致的服務(wù)端資源浪費(fèi)問題瀑梗,提高效率烹笔;
2 三次握手的過程
TCP 的可靠連接是靠 seq( sequence numbers 序列號)來達(dá)成的,通過TCP 連接發(fā)送的每一個(gè)包都有一個(gè)序列號抛丽。而因?yàn)槊總€(gè)包都是有序列號的谤职,所以都能被確認(rèn)收到這些包。確認(rèn)機(jī)制是累計(jì)的亿鲜,所以一個(gè)對sequence number X 的確認(rèn)允蜈,意味著 X 序列號之前(不包括 X) 包都是被確認(rèn)接收到的。
3 為什么需要三次握手蒿柳?
實(shí)現(xiàn)第一個(gè)目標(biāo)只需要前面兩次握手即可饶套。
要實(shí)現(xiàn)第二個(gè)目標(biāo),就需要區(qū)分失效的首次握手和正常的首次握手垒探。首次握手是客戶端發(fā)出的凤跑,只有客戶端才知道其是否有效,所以解決該問題的方式就是叛复,在原有的兩次握手基礎(chǔ)上再增加一個(gè)從客戶端到服務(wù)器的第三次握手仔引,來確認(rèn)首次握手是有效的扔仓。所以若服務(wù)器無法收到首次握手的第三次握手,就可以判定該首次握手是失效的咖耘。
所以翘簇,最終TCP的鏈接機(jī)制就變成了三次握手。
概括來說儿倒,就是TCP需要 seq 序列號來做可靠重傳或接收版保,而避免連接復(fù)用時(shí)無法分辨出 seq 是延遲或者是舊鏈接的 seq,因此需要三次握手來約定確定雙方的 ISN(初始 seq 序列號)
4 例外情況的處理
消息丟失會(huì)導(dǎo)致無法收到ACK夫否,處理策略就是
1 發(fā)送方超時(shí)會(huì)進(jìn)行重發(fā)彻犁;
2 接收方對重復(fù)包會(huì)進(jìn)行丟棄;