面試經典問題 TCP 詳解

2021-10-10 06:51:34 字數 2000 閱讀 9615

源埠號:表示傳送端埠號,字段長為16位。

目標埠號:表示接收埠號,字段長為16位。

序列號(seq):為當前端成功傳送的資料位數(由計算機生成的乙個隨機數作為其初始值,以後再將每次成功**過去的位元組數累加到初始值上表示資料的位置 )。

確認號:為當前端成功接收的資料位數+1。(表示下一次應該收到的資料位置,傳送端收到這個確認應答以後可以認為在這個序號以前的資料都已經被正常接收)

首部長度:該字段長度為4位,單位為4位元組(32位)。tcp首部長度不包括選項的話,是20個位元組,20/4=5,5的二進位制序列:0101,報頭長度也叫資料偏移,所以該欄位可以設定為5,選項字段最大的是40位元組,所以,tcp首部長度為最大為20+40=60位元組,該欄位可以設定的最大長度為60/4=15。

保留位:該欄位主要是為了以後擴充套件時使用,其長度為6位。一般設定為0,即使收到的包在該字段不為0,此包也不會丟棄。

標誌位:字段長為6,每一位從左到右分別為:urg、ack、psh、rst、syn、fin。當對應的值為1,表示有具體含義:

urg:緊急指標是否有效。為1,表示某一位需要被優先處理。

ack:確認號是否有效,一般置為1。

psh:提示接收端應用程式立即從tcp緩衝區把資料讀走。

rst :對方要求重新建立連線,復位。

syn:為1表示請求建立連線,並在其序列號的字段進行序列號的初始值設定。

fin:希望斷開連線。

視窗大小:接收緩衝區的大小,tcp不允許傳送超過此處所示大小的資料。

校驗和:傳送端填充,crc校驗,接收校驗不通過,則認為資料有問題。和udp的區別是,udp校驗的是資料本身,tcp校驗的不僅包含tcp首部,而且包含tcp資料部分。

緊急指標:只有在urg為1時有效,該字段為1表示本報文的段中的緊急資料的指標。

選項:用於提高tcp的傳輸效能。需要根據首部長度進行控制,其最大長度為40位元組。

資料:真實有效資料

那麼問題又來了:

這是因為雖然雙方都同意關閉連線了,而且握手的4個報文也都協調和傳送完畢,按理可以直接回到closed狀態(就好比從syn_send狀態到establish狀態那樣);但是因為我們必須要假想網路是不可靠的,你無法保證你最後傳送的ack報文會一定被對方收到,因此對方處於last_ack狀態下的socket可能會因為超時未收到ack報文,而重發fin報文,所以這個time_wait狀態的作用就是用來重發可能丟失的ack報文。

這是因為服務端的listen狀態下的socket當收到syn報文的建連請求後,它可以把ack和syn(ack起應答作用,而syn起同步作用)放在乙個報文裡來傳送。但關閉連線時,當收到對方的fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可能不會馬上關閉socket,也即你可能還需要傳送一些資料給對方之後,再傳送fin報文給對方來表示你同意現在可以關閉連線了,所以它這裡的ack報文和fin報文多數情況下都是分開傳送的。

可靠,穩定 。tcp的可靠體現在tcp在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。

慢,效率低,占用系統資源高,易被攻擊, tcp在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台裝置上維護所有的傳輸連線,事實上,每個連線都會占用系統的cpu、記憶體等硬體資源。

面試經典問題 TCP連線經典問題

1.為什麼建立連線是三次握手,而關閉連線卻是四次握手呢?因為服務端的listen狀態下的socket當收到syn報文的連線請求後,它可以把ack和syn ack起應答作用,syn同步作用 放在乙個報文中傳送。但關閉連線時,當收到對方的fin報文時,僅僅表示對方想要斷開連線,但未必你想,因為不會馬上關...

資料對齊詳解 面試經典問題

一 什麼是位元組對齊,為什麼對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用...

TCP經典面試題

1.什麼是三次握手,四次揮手?所謂三次握手是確定連線,四次揮手是關閉連線。三次握手 第一次客戶不知道伺服器是否可以接收資料,所以傳送第一次,當伺服器接收到以後,告訴客戶,我可以接收資料,這是第二次,當客戶接收到後,知道情況後,會再傳送一條確認報文,告訴伺服器,我收到了,就可以進行資料傳輸。四次揮手 ...