TCP三次握手及四次揮手詳細(xì)圖解Andrew Huang[email protected]
相對于SOCKET開發(fā)者,TCP創(chuàng)建過程和鏈接折除過程是由TCP/IP協(xié)議棧自動(dòng)創(chuàng)建的.因此開發(fā)者并不需要控制這個(gè)過程.但是對于理解TCP底層運(yùn)作機(jī)制,相當(dāng)有幫助. 而且對于有網(wǎng)絡(luò)協(xié)議工程師之類筆試,幾乎是必考的內(nèi)容.企業(yè)對這個(gè)問題熱情之高,出乎我的意料:-),。有時(shí)上午面試前強(qiáng)調(diào)這個(gè)問題,并重復(fù)講一次,下午幾乎每一個(gè)人都被問到這個(gè)問題,。 因此在這里詳細(xì)解釋一下這兩個(gè)過程,。 TCP三次握手 所謂三次握手(Three-way Handshake),是指建立一個(gè)TCP連接時(shí),,需要客戶端和服務(wù)器總共發(fā)送3個(gè)包,。 三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號和確認(rèn)號并交換 TCP 窗口大小信息.在socket編程中,,客戶端執(zhí)行connect()時(shí),。將觸發(fā)三次握手。
SYN攻擊 在三次握手過程中,服務(wù)器發(fā)送SYN-ACK之后,,收到客戶端的ACK之前的TCP連接稱為半連接(half-open connect).此時(shí)服務(wù)器處于Syn_RECV狀態(tài).當(dāng)收到ACK后,,服務(wù)器轉(zhuǎn)入ESTABLISHED狀態(tài). Syn攻擊就是 攻擊客戶端 在短時(shí)間內(nèi)偽造大量不存在的IP地址,向服務(wù)器不斷地發(fā)送syn包,,服務(wù)器回復(fù)確認(rèn)包,,并等待客戶的確認(rèn),由于源地址是不存在的,,服務(wù)器需要不斷的重發(fā)直 至超時(shí),,這些偽造的SYN包將長時(shí)間占用未連接隊(duì)列,正常的SYN請求被丟棄,,目標(biāo)系統(tǒng)運(yùn)行緩慢,,嚴(yán)重者引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。 Syn攻擊是一個(gè)典型的DDOS攻擊,。檢測SYN攻擊非常的方便,,當(dāng)你在服務(wù)器上看到大量的半連接狀態(tài)時(shí),特別是源IP地址是隨機(jī)的,,基本上可以斷定這是一次SYN攻擊.在Linux下可以如下命令檢測是否被Syn攻擊 netstat -n -p TCP | grep SYN_RECV 一般較新的TCP/IP協(xié)議棧都對這一過程進(jìn)行修正來防范Syn攻擊,,修改tcp協(xié)議實(shí)現(xiàn)。主要方法有SynAttackProtect保護(hù)機(jī)制,、SYN cookies技術(shù),、增加最大半連接和縮短超時(shí)時(shí)間等. 但是不能完全防范syn攻擊。 TCP 四次揮手 TCP的連接的拆除需要發(fā)送四個(gè)包,,因此稱為四次揮手(four-way handshake),。客戶端或服務(wù)器均可主動(dòng)發(fā)起揮手動(dòng)作,在socket編程中,,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作,。
參見wireshark抓包,實(shí)測的抓包結(jié)果并沒有嚴(yán)格按揮手時(shí)序,。我估計(jì)是時(shí)間間隔太短造成,。 source url:http://bluedrum.
|
|