抓了個(gè)包,發(fā)現(xiàn)日本也有···
大家好,我是軒轅。
前幾天,有位國外的粉絲遇到了一個(gè)網(wǎng)絡(luò)問題,發(fā)現(xiàn)訪問不了國內(nèi)的某個(gè)網(wǎng)站。這讓我想起三年前的一個(gè)事情,跟他的情況類似。
當(dāng)時(shí)這篇文章有點(diǎn)敏感,發(fā)了不到半個(gè)小時(shí)就刪掉了,估計(jì)有很多人都沒看到過。今天我做了修改,大家可以看下。
當(dāng)時(shí)的情況是這樣的:
總結(jié):人在日本,開著WIFI訪問不了極客時(shí)間,為啥?
隨后她還給我轉(zhuǎn)發(fā)了一張瀏覽器的截圖:
我一下發(fā)現(xiàn)了不對(duì)勁,請(qǐng)注意這幾個(gè)字:
如果是我們的請(qǐng)求到不了服務(wù)器造成的無法訪問,一般是這樣提示的:
或者請(qǐng)求能夠到達(dá)服務(wù)器,但服務(wù)器拒絕訪問,一般是這樣提示的:
而連接被重置,事情就不簡單了。
接下來,我讓這位在日本的朋友裝上了抓包神器wireshark,想抓一下網(wǎng)絡(luò)通信,看看到底發(fā)生了什么。
先看一下這位朋友的機(jī)器上,ping一下極客時(shí)間官網(wǎng)的域名,得到的IP地址:
這是一個(gè)阿里云的服務(wù)器,在抓到的網(wǎng)絡(luò)通信中,我看到了瀏覽器發(fā)起了多次的請(qǐng)求嘗試連接,下面每一行都是一個(gè)會(huì)話:
點(diǎn)開一個(gè)來看看,TCP的三次握手是正常的,服務(wù)器能夠正常返回握手包,說明服務(wù)器是能夠訪問的,443端口也是能觸達(dá)的:
因?yàn)槭?43端口,HTTPS,按照協(xié)議規(guī)定,三次握手之后,接下來,客戶端該發(fā)起SSL握手了,但詭異的事情就發(fā)生了,客戶端剛剛發(fā)出了SSL的握手包,服務(wù)器就返回了一個(gè)RST報(bào)文:
好家伙,這下知道為什么顯示連接被重置了吧。
什么是RST包?
RST,就是ReSet,重置的意思,在《TCP/IP詳解·卷一》中有提到:
一般來說,當(dāng)發(fā)現(xiàn)一個(gè)到達(dá)的報(bào)文段對(duì)于相關(guān)連接而言是不正確的時(shí), TCP就會(huì)發(fā)送一個(gè)重置報(bào)文。
并且列舉了在這幾種情況下,會(huì)發(fā)送RST包:
1.端口不存在
當(dāng)向一臺(tái)計(jì)算機(jī)未開放的端口發(fā)起連接請(qǐng)求,對(duì)方就會(huì)返回一個(gè)RST包。
很明顯,這位朋友的電腦不屬于這種情況,否則在第一次握手時(shí),服務(wù)器也不會(huì)返回正常的握手包了。
2.終止一條連接
終止一條連接的方式,正常情況下,就是咱們熟知的四次揮手,通過發(fā)送FIN包關(guān)閉連接。
但有正常,就有不正常,RST同樣可以用來終止一條連接。而與FIN不同的是,F(xiàn)IN是會(huì)等排隊(duì)等待發(fā)送的數(shù)據(jù)全部發(fā)出去后,才會(huì)被發(fā)送,以保證數(shù)據(jù)不會(huì)丟失。而RST是不用等待排隊(duì)數(shù)據(jù)發(fā)送,立即發(fā)給對(duì)方,等待發(fā)送的數(shù)據(jù)將被全部丟棄。
3.時(shí)間等待錯(cuò)誤
TCP有一系列的計(jì)時(shí)器用來完成超時(shí)重傳以及連接狀態(tài)的維護(hù)等工作,但如果超過定時(shí)器的時(shí)間,服務(wù)器已經(jīng)清除了一條連接的信息,在這之后,客戶端新的數(shù)據(jù)才姍姍來遲,那這時(shí)候,也會(huì)收到一個(gè)RST報(bào)文。
很顯然,這位朋友的電腦也不是這種情況,三次握手完成之后,便立即發(fā)起了SSL握手,沒有理由超時(shí)。
那問題就來了,服務(wù)器為什么要返回一個(gè)RST包呢?
直到我看到了接下來的通信,我悟了:
發(fā)現(xiàn)了嗎,就在返回了RST包之后,服務(wù)器后續(xù)竟然還在與客戶端進(jìn)行SSL握手(就是圖中黃色的那根箭頭,服務(wù)器返回的Hello證書)!??!
不僅如此,在客戶端這邊因?yàn)槭盏絉ST已經(jīng)關(guān)閉連接沒有反應(yīng)之后,服務(wù)器還在一直嘗試重傳:Hello,證書來了,聽到請(qǐng)回答,聽到請(qǐng)回答!
順便可以注意下TCP重傳時(shí)間的變化,符合2倍增長的規(guī)律:
到底是誰發(fā)出的這個(gè)RST呢?
后面的不能再寫了,就這樣吧···
軒轅的《從零開始學(xué)逆向》系列視頻課程正在火熱進(jìn)行中,如果你也想學(xué)習(xí)網(wǎng)絡(luò)安全,學(xué)習(xí)逆向分析,卻不知道從哪里下手,或者學(xué)不進(jìn)去,那就趕緊加入我們吧,與幾百位小伙伴一起學(xué)習(xí),互相交流,少走彎路!
你好啊,我是軒轅之風(fēng),普通雙非自學(xué)逆襲,前百度、奇安信、360高級(jí)安全研發(fā)工程師,電子工業(yè)出版社《趣話計(jì)算機(jī)底層技術(shù)》作者,專注網(wǎng)絡(luò)安全、后端開發(fā)技術(shù)、計(jì)算機(jī)底層技術(shù)領(lǐng)域的知識(shí)創(chuàng)作,歡迎大家關(guān)注。
