1.0 三次握手
即TCP連接同木,client 和server 通過發(fā)三次包建立連接的過程宵呛。<1>客戶端把標(biāo)志位SYN置為1唐瀑,產(chǎn)生一個(gè)隨機(jī)數(shù)seq = J,發(fā)送數(shù)據(jù)包給服務(wù)器隆夯,客戶端進(jìn)入SYN_SENDER狀態(tài)宗雇。
<2>服務(wù)器收到客戶端的數(shù)據(jù)包昂芜,通過SYN = 1,知道對(duì)方想建立連接,把ACK置為1赔蒲,ack = J+1泌神,SYN置為1,產(chǎn)生隨機(jī)數(shù)seq = K,將數(shù)據(jù)包回給client舞虱,服務(wù)器進(jìn)入SYN_RECEIVER狀態(tài)欢际。
<3>客戶端收到包后,首先檢查ack 是否是J+1,ACK= 1砾嫉,正確的話幼苛,就把ACK置為1,ack = K+1, 回給服務(wù)端焕刮,服務(wù)器判斷舶沿,ack是否是K+1,ACK = 1, 正確的話,就成功建立連接配并。進(jìn)入連接建立狀態(tài)括荡。Client和Server進(jìn)入ESTABLISHED狀態(tài),完成三次握手溉旋,隨后Client與Server之間可以開始傳輸數(shù)據(jù)了畸冲。
SYN攻擊:
在三次握手過程中,Server發(fā)送SYN-ACK之后,收到Client的ACK之前的TCP連接稱為半連接(half-open connect)邑闲,此時(shí)Server處于SYN_RCVD狀態(tài)算行,當(dāng)收到ACK后,Server轉(zhuǎn)入ESTABLISHED狀態(tài)苫耸。SYN攻擊就是Client在短時(shí)間內(nèi)偽造大量不存在的IP地址州邢,并向Server不斷地發(fā)送SYN包,Server回復(fù)確認(rèn)包褪子,并等待Client的確認(rèn)量淌,由于源地址是不存在的,因此嫌褪,Server需要不斷重發(fā)直至超時(shí)呀枢,這些偽造的SYN包將產(chǎn)時(shí)間占用未連接隊(duì)列,導(dǎo)致正常的SYN請(qǐng)求因?yàn)殛?duì)列滿而被丟棄笼痛,從而引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓裙秋。SYN攻擊時(shí)一種典型的DDOS攻擊,檢測SYN攻擊的方式非常簡單晃痴,即當(dāng)Server上有大量半連接狀態(tài)且源IP地址是隨機(jī)的残吩,則可以斷定遭到SYN攻擊了,使用如下命令可以讓之現(xiàn)行:
#netstat -nap | grep SYN_RECV
2.四次揮手
tcp是一個(gè)全雙工的連接倘核,需要server和client經(jīng)過發(fā)送四次數(shù)據(jù)包才能斷開連接泣侮。
<1>client發(fā)送一個(gè)FIN 給server,告訴server自己不會(huì)發(fā)送數(shù)據(jù)了紧唱,關(guān)閉client到server的數(shù)據(jù)傳輸活尊,但是還可以接收數(shù)據(jù)。
<2>server收到后漏益,會(huì)發(fā)送一個(gè)ACK的應(yīng)答蛹锰,是FIN 序號(hào)+1。
<3>server發(fā)送一個(gè)FIN的序號(hào)給client绰疤,告訴它自己要關(guān)閉了铜犬。
<4>client收到后,回一個(gè)ACK的應(yīng)答轻庆,server收到后癣猾,檢查無誤,這個(gè)就正式斷開連接余爆。
為什么建立連接時(shí)三次握手纷宇,而斷開連接需要四次揮手?
因?yàn)榻⑦B接時(shí)ACK 和SYN 是在一個(gè)數(shù)據(jù)包里發(fā)送蛾方,而FIN 和ACK 是分開發(fā)送的像捶。
為什么是三次握手不是兩次上陕?
client向服務(wù)器發(fā)送SYN后,server向client回復(fù)一個(gè)ack 假設(shè)由于網(wǎng)絡(luò)原因拓春,第一次的client發(fā)包延遲释簿,過了很久才到達(dá)服務(wù)器,但是其實(shí)已經(jīng)失效了硼莽,服務(wù)器收到后辕万,回復(fù)一下,如果此時(shí)不進(jìn)行第三次握手沉删,那么服務(wù)器會(huì)一直等待服務(wù)器的數(shù)據(jù),這樣會(huì)造成極大的資源浪費(fèi)醉途。
名詞解釋
SYN :(同步序列編號(hào)):seq和ack存在tcp報(bào)文的首部矾瑰,seq是序號(hào),ack是確認(rèn)號(hào)隘擎,都占用四個(gè)字節(jié)(32位)殴穴,范圍(0 ~ 2^32-1),tcp報(bào)文是字節(jié)流货葬,tcp報(bào)文中的每個(gè)字節(jié)都按照順序編號(hào)采幌,報(bào)文中的序號(hào)指的是報(bào)文數(shù)據(jù)中的第一個(gè)字節(jié)的序號(hào)。ack是期望收到對(duì)方下個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)震桶。
參照> https://blog.csdn.net/qq_34386891/article/details/80515912
https://baijiahao.baidu.com/s?id=1614404084382122793&wfr=spider&for=pc