1.為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢?
這是因為服務端的listen狀態下的socket當收到syn報文的建連請求後,它可以把ack和syn(ack起應答作用,而syn起同步作用)放在乙個報文裡來傳送。但關閉連線時,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可以未必會馬上會關閉socket,也即你可能還需要傳送一些資料給對方之後,再傳送fin報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ack報文和fin報文多數情況下都是分開傳送的。
2.為什麼time_wait狀態還需要等2msl後才能返回到closed狀態?
這是因為雖然雙方都同意關閉連線了,而且握手的4個報文也都協調和傳送完畢,按理可以直接回到closed狀態(就好比從syn_send狀態到establish狀態那樣);但是因為我們必須要假想網路是不可靠的,你無法保證你最後傳送的ack報文會一定被對方收到,因此對方處於last_ack狀態下的socket可能會因為超時未收到ack報文,而重發fin報文,所以這個time_wait狀態的作用就是用來重發可能丟失的ack報文。
TCP經典面試題
1.什麼是三次握手,四次揮手?所謂三次握手是確定連線,四次揮手是關閉連線。三次握手 第一次客戶不知道伺服器是否可以接收資料,所以傳送第一次,當伺服器接收到以後,告訴客戶,我可以接收資料,這是第二次,當客戶接收到後,知道情況後,會再傳送一條確認報文,告訴伺服器,我收到了,就可以進行資料傳輸。四次揮手 ...
面試題 關於指標
面試題 下列c 程式會在哪一行崩潰?struct s main 分析 int p s.i時,一直到p 0 4,p 1 3的時候,p始終等於 s.i。s.p p 建立了如下的關係 s.p存了p的值,也即 s.i,s.p 1 相當於 s.i 1 即s.i的位址加1.也就是s.p.s.p 1 和s.p其實...
關於promise面試題
今天面試被問到了兩個關於promise的面試題,不外乎就是執行順序相關的問題,話不多說,先上 這道題相信大家都明白了,一道爛大街的題,輸出結果不外乎就是promise1,1,promise2,settimeout 大致說一下原理,首先先了解一句話 同步優先,非同步靠邊,settimeout是常用來模...