三次握手
客戶端發起乙個我要建立的連線資料報的請求傳送到服務端,這裡面有個標誌位syn=1(建立請求的資料報),seq=x
服務端接收到資料報之後知道了我有乙個客戶要跟我建立連線了,建立連線之後呢,開啟tcp socket的埠,埠開啟之後呢,返回給客戶端,返回給客戶端資料裡也是乙個syn的標誌位,返回ack=x+1,seq=y再傳送乙個seq,服務端的seq
客戶端拿到了之後說服務端允許我建立這個tcp連線了,它再去傳送它的ack=y+1,seq=z(seq又等於乙個新的數字)這就是建立乙個tcp連線的過程
為什麼要進行三次握手
為了防止服務端開啟一些無用的連線,因為我們知道網路傳輸是有延時的,因為我們中間可能隔著非常遠的距離,要通過光纖,然後還有各種中間的**伺服器,來進行乙個傳輸,傳輸的過程當中,比如說客戶端這邊發起了乙個syn=1建立連線的請求,如果服務端這邊就直接建立了這個連線,返回的這個內容給客戶端,這個資料報因為網路傳輸的原因丟失了,丟失了之後,客戶端就一直沒有接收到伺服器返回的這個東西,它這邊有設定了乙個超時時間說我關閉了,超過了這個時間之後連線建立就關閉了,我可能再發起乙個新的建立連線的請求,這個時候服務端,如果我們沒有第三次握手在這裡的話服務端是根本不知道客戶端它到底有沒有接收到我返回的資訊,並且它沒有給我乙個確認要建立還是要關閉這個請求,那麼它這邊的埠就一直開著等著,客戶端來傳送實際的請求資料了,那這個時候服務端開銷就浪費了,因為它不知道連線已經建立失敗了,客戶端可能去建立別的新的連線了,所以我們需要三次握手來確認這個過程,讓客戶端和服務端能夠及時的察覺到說我們因為一些網路原因的問題導致資料端沒有查到,這個埠連線就已經關閉了,我們不需要一直等在那邊,所以這種情況。三次握手主要是為了規避網路傳輸當中延時而導致的一些伺服器開銷的問題。
http請求建立tcp連線的過程當中三次握手資料報的乙個詳細內容
mysql用大白話解釋 大白話說說mysql索引
前面其實寫了好幾篇關於 mysql 索引的文章了,文章中有具體的例項和 sql 語句,這篇文章我想再用純大白話講講 mysql 索引,文中不涉及具體 sql 我之前甚至想過為啥要用資料庫來儲存資料,用普通的 txt 或者 word 這類檔案不行麼,這個問題其實可以從幾個方面來看,乙個是併發訪問資料加...
快速排序(大白話)
假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方便,就讓第乙個數6作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數...
大白話系列 zookeeper
zookeeper主要服務於分布式系統,可以看做乙個分布式協調系統,主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。上面的解釋有點抽象,簡單來說zookeeper 檔案系統 監聽通知機制。zookeeper的資料結構,跟uni...