第一次握手客戶端會動態生成isn作為seq num發出,目的是為了防止和其他連線的五元組衝突,發出去以後客戶端進入乙個syn_sent狀態;
第二次握手服務端會返回報文ack位和syn位都置為1,相當於兩個報文融合在一起,會進入乙個syn_recv狀態,他會把這個連線放入乙個半連線佇列中
第三次握手客戶端會返回乙個ack報文,同時會攜帶自己的資料,發出去後即進入established狀態,連線會被放入乙個全連線佇列中
(失敗rst?todo)
再說一下為什麼不用兩次握手,
syn洪範攻擊
第二次握手的時候連線會被放入半連線佇列中,會消耗資源,如果大量傳送syn報文而不響應則是syn洪範攻擊,判別洪範攻擊就像剛才說的第二次握手如果有大量的syn_recv狀態就是洪範攻擊了,可以用syn cookies來防範,(syn cookies是..todo)
(listen的引數是什麼佇列的大小todo)
第一次揮手,假如客戶端發起乙個fin報文,進入fin_wait,字面意思等待關閉
第二次揮手,服務端收到後會返回乙個ack報文,並進入close_wait,字面意思是等待自己呼叫close
,客戶端收到ack後會進入fin_wait2狀態
第三次揮手,服務端呼叫close傳送fin報文,指定乙個seq_num(隨機嗎),並進入last_ack狀態
第四次揮手,客戶端收到fin報文後,發回乙個ack應答,並進入time_wait的狀態
這個time_wait時間會維持2msl,而這個msl的含義是...,之所以用這2msl的時間是因為讓之前的消失,乙個是為了等待時間防止對方沒收到ack超時重傳
輸入url,需要轉換成ip位址,於是就向dns協議尋求幫助,首先會先查dns快取和本地host,沒有則向dns伺服器查詢,dns伺服器有兩種查詢方式,是遞迴和迭代,遞迴是當查不到下級網域名稱時則當前dns伺服器向下乙個dns伺服器請求,遞迴就是返回資料報讓dns客戶進行重新發包查詢,查不到則返回失敗報;當dns解析成功,,瀏覽器會發出乙個查詢報文,每過一層路由器需要填入下一跳位址,這個步驟用arp來實現,每過乙個路由器則向區域網廣播ip位址尋找目標主機的mac位址.填入後再繼續傳送,等到了dns伺服器,dns伺服器有兩種查詢方式迭代和遞迴兩種(todo)
接收到dns伺服器返回的以後,瀏覽器會封裝應用層協議,生成乙個http報文,請求頭+請求行,請求頭裝的是比如這裡是get ** 協議版本,請求行裝的是相關的資訊如目標主機,自己瀏覽器號碼,是否keep-alive;然後向下封裝是運輸層,使用的是tcp協議,會填入埠號,http是80而https是443,;然後繼續往下封裝是網路層的ip資料報,,填入目標ip位址,...(cdn什麼的todo)
好文///關於三次握手和四次揮手,面試官想聽到怎樣的回答? - 小林coding的回答 - 知乎
TCP握手與揮手
1.什麼是三次握手?在進行tcp資料傳輸時要確保資料傳送的穩定性,三次握手就是對資料與資料段進行協商跟蹤是資料的傳送與接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。2.三次握手過程 第一次握手 b的tcp服務區程序先建立傳輸控塊tcb,準備接受使用...
tcp握手與揮手
1.為什麼要三次握手 先簡單介紹一下三次握手的過程 1 客戶端向伺服器端傳送乙個syn置位的報文,並進入syn send狀態,等待伺服器確認 2 伺服器發出段2,也帶有syn位,同時ack置位表示確認,此時伺服器進入syn recv狀態 3 客戶端收到伺服器端的syn ack包,向伺服器傳送確認包a...
TCP的握手與揮手
在資料傳送前不需要建立連線,接受方收到udp報文後也不需要給出回應 不可靠的,但同時省去了很多開銷,獲得了速度的 提公升 在資料傳送之前必須建立連線,完成資料傳送之後斷開連線 socket每一條tcp連線都有兩個端點,稱之為socket 套接字 ip位址 埠號 碼農翻身中又將其比喻為乙個插座,負責將...