1.什麼是三次握手,四次揮手?
所謂三次握手是確定連線,四次揮手是關閉連線。
三次握手:第一次客戶不知道伺服器是否可以接收資料,所以傳送第一次,當伺服器接收到以後,告訴客戶,我可以接收資料,這是第二次,當客戶接收到後,知道情況後,會再傳送一條確認報文,告訴伺服器,我收到了,就可以進行資料傳輸。
四次揮手:就是乙個關閉連線的過程。第一次揮手,當客戶端不需要資料傳輸時,便告訴伺服器,可以關閉連線了,此時只是客戶端不需要了,而伺服器端還存在資料傳輸,第二次揮手,首先會傳送乙個確認報文,告訴客戶,收到了,然後等徹底關閉資料連線之後,第三次揮手,再次傳送乙個fin報文,表示已經關閉完成,當客戶端接收到後,會傳送乙個確認報文,之後等待2msl,關閉客戶端。而服務端一旦收到客戶端發出的確認報文就會立馬釋放tcp連線,所以服務端結束tcp連線的時間要比客戶端早一些。
2.為什麼是三次握手而不是二次?
因為要考慮丟包問題,假如只有倆次,當第二次伺服器傳給客戶端的確認報文丟失時,此時,客戶端已經準備好收發數,而收不到伺服器傳過來的確認報文,所以客戶端不知道伺服器端是否已經準備好,所以就不會建立連線。
而使用三次握手時,即時產生丟包問題,假如第三次丟失了,服務端沒收到確認報文之後,過段時間還會再次傳送第二次握手,這樣,客戶端又會重新傳送第三次,當伺服器收到後,就會建立連線。
3.為什麼tcp連線時是三次,關閉時是四次?
因為只有客戶端和伺服器端都沒有了資料傳送時,才能完全關閉連線。客戶端傳送時,只是客戶端沒有了資料連線,而服務端還不確定,所以服務端首先會傳送乙個確認報文,多出來的一次就在這,之後等沒有了資料連線時,再次傳送乙個fin報文,客戶端收到此報文後,再傳送乙個確認報文。
經典面試題
1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...
經典面試題
我的老同學現在富得流油。他開創了乙個軟體公司,開發了一系列軟體,生意越做越大。今天他來到這個城市後馬上打 給我。是我啊!聽出來了嗎?是這樣的,我到這兒的大學招畢業生,要在這兒呆上五天,咱哥們趁這個時間好好聚一聚。我做東!既然他要做東,我理所當然順水推舟。人家是老闆,不吃白不吃!我來到他下榻的賓館,看...
經典面試題
分兩個情況 perfork模式 worker模式 前者程序模式 後者執行緒模式 故檢視方法也有區別 oldboy.log 參考 分析 此類問題是運維工作中最常見的問題。可以演變成分析日誌,檢視tcp各個狀態連線數,檢視單ip連線數排名等等 第一類 過濾網域名稱方法 方法很多 這裡給出六種為例。還可以...