回覆列表
-
1 # 喲喲吼說科技
-
2 # 網路圈
首先需要明確一點的是,TCP協議是可靠的,但並不代表TCP就是絕對安全的。
TCP協議的可靠性指的是什麼?TCP協議(傳輸控制協議)是TCP/IP協議中的傳輸層協議,它能保證接收方能完整的接受傳送方的資料包,通俗的說就是能保證不丟包。
而IP協議是不可靠的,IP資料包在傳輸過程中可能會發生錯誤或丟失。
TCP通訊是如何保證可靠性的?TCP為了解決丟包問題,做了幾點措施:
1、ACK確認機制
當接收方收到了資料片斷後,會主動告知傳送方說,訊息我已收到,請傳送下一個片段。
2、重試機制
當傳送方傳送了資料片段後一段時間內沒有收到接收方的ACK確認訊息,就會認為此片斷丟失了,然後會重新發送這個片段,直到接收到ACK確認為止。
TCP協議並不安全TCP協議在設計之初就沒有考慮到安全。TCP協議並沒有對傳輸的資料包進行驗證,當我們知道一個TCP連線中的seq和ack資訊後就能偽造傳輸包,這樣就會出現劫持。也正是因為這個問題,在傳輸層我們一般都是採用SSL或TLS協議來確保資料傳輸的安全性。
在之前的回答中已經多次說過TCP協議的概念,搞網路的都清楚TCP是面向連線的、可靠的傳輸層協議,那究竟TCP是建立怎樣的一種可靠的連線呢?
TCP建立的可靠連線是相比UDP協議而定義的,TCP有自己的校驗和認證,透過三次握手的機制去建立連線,但TCP協議只保證端到端建立可靠連線,沒有針對中間攻擊的預防措施,因此TCP建立的連線可能也會被劫持。
那麼何為流量劫持呢?
流量劫持是指利用協議的漏洞對目標地址更換為其它地址的方式,簡單來說,使用者想要訪問A網站,B透過一定手段讓使用者訪問到了B網站,這種方式就叫做流量劫持,最常見的就是DNS劫持。下面喲喲透過一個具體的資料包來說明在TCP建立連線時發生的流量劫持現象:
某使用者網路環境下抓包資料如下:
可以清楚的看到,使用者私有地址192.168.2.101透過網路與182.92.212.34建立TCP連線,8316、8317和8318是TCP建立連線時的三次握手機制。建立完成後,就從該伺服器上下載所需檔案。之後網路就有未知的裝置偽裝成伺服器強行插入此次的TCP會話,對使用者迴應HTTP 302跳轉,劫持了此次請求。
通過了解,這個劫持應該是快取裝置進行了302重定向,完成了此次的流量劫持。喲喲所在的公司網路也同樣採用了此種方式,加入快取裝置劫持使用者來本地進行訪問,一是提升了使用者的訪問速度;二是節省了網路出口流量,是一種很實用的方式。透過這個例項是不是對流量劫持有了一個清晰的認識呢。不過還有DNS劫持等等,道理一樣。