- TCP的三次握手:
- 一定由
客戶端主動(dòng)發(fā)起
的,發(fā)生在建立連接的過(guò)程中。 - 此過(guò)程發(fā)生在
客戶端的connect()函數(shù)
和服務(wù)器的accept()函數(shù)
之間。 - 第一次握手:
- 客戶端向服務(wù)器發(fā)送一個(gè)
帶有SYN標(biāo)志的數(shù)據(jù)包
,表示客戶端請(qǐng)求建立連接。 - 并且客戶端會(huì)
選擇一個(gè)隨機(jī)的序列號(hào)a
放在SYN標(biāo)志的數(shù)據(jù)包
中,然后向服務(wù)器發(fā)送這個(gè)數(shù)據(jù)包。 - 第二次握手:
- 服務(wù)器收到客戶端的請(qǐng)求后,會(huì)
回復(fù)一個(gè)帶有SYN/ACK標(biāo)志的數(shù)據(jù)包
,表示服務(wù)器已經(jīng)收到客戶端的請(qǐng)求,并同意建立連接。 - 服務(wù)器會(huì)
選擇一個(gè)隨機(jī)的序列號(hào)b
放在SYN標(biāo)志的字段
中,并且序列號(hào)a+1放在ACK標(biāo)志的字段
中,然后將數(shù)據(jù)包發(fā)送給客戶端。 - 第三次握手:
- 客戶端收到服務(wù)器的回復(fù)后,
會(huì)發(fā)送一個(gè)帶有ACK標(biāo)志的數(shù)據(jù)包
,表示客戶端確認(rèn)已經(jīng)收到了服務(wù)器的響應(yīng),并同意建立連接。 - 客戶端
將服務(wù)器的序列號(hào)b+1放在ACK標(biāo)志的字段中
,然后將數(shù)據(jù)包發(fā)送給服務(wù)器。 - TCP的四次揮手:
- 由
主動(dòng)關(guān)閉方
(客戶端或者服務(wù)器都可以扮演這個(gè)角色)發(fā)起的,發(fā)生在斷開(kāi)連接的過(guò)程中。 - 以
客戶端主動(dòng)發(fā)起斷開(kāi)連接
為例: - 第一次揮手:
- 客戶端向服務(wù)器發(fā)送一個(gè)
帶有FIN/ACK標(biāo)志的數(shù)據(jù)包
,表示客戶端請(qǐng)求與服務(wù)器斷開(kāi)連接。 - 并且客戶端會(huì)
選擇一個(gè)隨機(jī)的序列號(hào)a
放在FIN/ACK標(biāo)志的數(shù)據(jù)包
中,然后向服務(wù)器發(fā)送這個(gè)數(shù)據(jù)包。 - 第二次揮手:
- 服務(wù)器收到客戶端的請(qǐng)求斷開(kāi)連接后,會(huì)
回復(fù)一個(gè)帶有ACK標(biāo)志的數(shù)據(jù)包
,表示服務(wù)器已經(jīng)收到客戶端的請(qǐng)求,并且序列號(hào)a+1放在ACK標(biāo)志的字段
中,然后將數(shù)據(jù)包發(fā)送給客戶端。 - 第三次揮手:
- 服務(wù)器向客戶端發(fā)送一個(gè)
帶有FIN/ACK標(biāo)志的數(shù)據(jù)包
,通知客戶端,服務(wù)器要關(guān)閉了。 - 并且服務(wù)器會(huì)
選擇一個(gè)隨機(jī)的序列號(hào)b
放在FIN/ACK標(biāo)志的數(shù)據(jù)包
中,然后向客戶端發(fā)送這個(gè)數(shù)據(jù)包。 - 第四次揮手:
- 客戶端收到服務(wù)器的斷開(kāi)連接信號(hào)后,會(huì)
回復(fù)一個(gè)帶有ACK標(biāo)志的數(shù)據(jù)包
,表示客戶端已經(jīng)收到服務(wù)器的請(qǐng)求,并且序列號(hào)b+1放在ACK標(biāo)志的字段
中,然后將數(shù)據(jù)包發(fā)送給服務(wù)器。 -
TCP的三次握手和四次揮手,抓包如下圖所示:
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-724641.html
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-724641.html
到了這里,關(guān)于面試題之TCP的三次握手和四次揮手的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!