序列號、確認應答、超時重傳
資料到達接收方,接收方需要發出乙個確認應答,表示已經收到該資料段,並且確認序號會說明了它下一次需要接收的資料序列號。如果傳送發遲遲未收到確認應答,那麼可能是傳送的資料丟失,也可能是確認應答丟失,這時傳送方在等待一定時間後會進行重傳。這個時間一般是2*rtt(報文段往返時間)+乙個偏差值。
視窗(流量)控制與高速重發控制/快速重傳(重複確認應答)
tcp會利用視窗控制來提高傳輸速度,意思是在乙個視窗大小內,不用一定要等到應答才能傳送下一段資料,視窗大小就是無需等待確認而可以繼續傳送資料的最大值。如果不使用視窗控制,每乙個沒收到確認應答的資料都要重發。
使用視窗控制,如果資料段1001-2000丟失,後面資料每次傳輸,確認應答都會不停地傳送序號為1001的應答,表示我要接收1001開始的資料,傳送端如果收到3次相同應答,就會立刻進行重發;但還有種情況有可能是資料都收到了,但是有的應答丟失了,這種情況不會進行重發,因為傳送端知道,如果是資料段丟失,接收端不會放過它的,會瘋狂向它提醒…
擁塞控制
如果把視窗定的很大,傳送端連續傳送大量的資料,可能會造成網路的擁堵,甚至造成網路的癱瘓。所以tcp在為了防止這種情況而進行了擁塞控制。
慢啟動:定義擁塞視窗,一開始將該視窗大小設為1,之後每次收到確認應答(經過乙個rtt),將擁塞視窗大小*2。
擁塞避免:設定慢啟動閾值,一般開始都設為65536。擁塞避免是指當擁塞視窗大小達到這個閾值,擁塞視窗的值不再指數上公升,而是加法增加(每次確認應答/每個rtt,擁塞視窗大小+1),以此來避免擁塞。將報文段的超時重傳看做擁塞,則一旦發生超時重傳,我們需要先將閾值設為當前視窗大小的一半,並且將視窗大小設為初值1,然後重新進入慢啟動過程。
快速重傳:快重傳演算法首先要求接收方每收到乙個失序的報文段後就立即發出重複確認(為的是使傳送方及早知道有報文段沒有到達對方)而不要等到自己傳送資料時才進行捎帶確認。(如果當傳送端接收到三個重複的確認ack時,則斷定分組丟失,立即重傳丟失的報文段,而不必等待重傳計時器超時)。採用快重傳後可以使整個網路吞吐量提高約20%。
快速恢復1.當傳送方連續收到三個重複確認,就執行「乘法減小」演算法,把慢開始門限ssthresh減半。這是為了預防網路發生擁塞。請注意:接下去不執行慢開始演算法。
2.由於傳送方現在認為網路很可能沒有發生擁塞,因此與慢開始不同之處是現在不執行慢開始演算法(即擁塞視窗cwnd現在不設定為1),而是把cwnd值設定為慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免演算法(「加法增大」),使擁塞視窗緩慢地線性增大。
三次握手
客戶端主動開啟,傳送連線請求報文段,將syn標識位置為1,sequence number置為x(tcp規定syn=1時不能攜帶資料,x為隨機產生的乙個值),然後進入syn_send狀態
伺服器收到syn報文段進行確認,將syn標識位置為1,ack置為1,sequence number置為y,acknowledgment number置為x+1,然後進入syn_recv狀態,這個狀態被稱為半連線狀態
客戶端再進行一次確認,將ack置為1(此時不用syn),sequence number置為x+1,acknowledgment number置為y+1發向伺服器,最後客戶端與伺服器都進入established狀態
四次揮手
客戶端傳送乙個報文給服務端(沒有資料),其中fin設定為1,sequence number置為u,客戶端進入fin_wait_1狀態
服務端收到來自客戶端的請求,傳送乙個ack給客戶端,acknowledge置為u+1,同時傳送sequence number為v,服務端年進入close_wait狀態
服務端傳送乙個fin給客戶端,ack置為1,sequence置為w,acknowledge置為u+1,用來關閉服務端到客戶端的資料傳送,服務端進入last_ack狀態
客戶端收到fin後,進入time_wait狀態,接著傳送乙個ack給服務端,acknowledge置為w+1,sequence number置為u+1,最後客戶端和服務端都進入closed狀態
tcp是面向連線的傳輸層協議,即傳輸資料之前必須先建立好連線。udp無連線。
tcp是點對點的兩點間服務,即一條tcp連線只能有兩個端點;udp支援一對一,一對多,多對一,多對多的互動通訊。
tcp是可靠交付:無差錯,不丟失,不重複,按序到達。udp是盡最大努力交付,不保證可靠交付。
tcp有擁塞控制和流量控制保證資料傳輸的安全性。udp沒有擁塞控制,網路擁塞不會影響源主機的傳送效率。
tcp是動態報文長度,即tcp報文長度是根據接收方的視窗大小和當前網路擁塞情況決定的。udp面向報文,不合併,不拆分,保留上面傳下來報文的邊界。
tcp首部開銷大,首部20個位元組。udp首部開銷小,8位元組。(源埠,目的埠,資料長度,校驗和)
1、get引數通過url傳遞,post放在request body中。
2、get請求在url中傳遞的引數是有長度限制的,而post沒有。
3、get比post更不安全,因為引數直接暴露在url中,所以不能用來傳遞敏感資訊。
4、get請求只能進行url編碼,而post支援多種編碼方式。
5、get請求會瀏覽器主動cache,而post支援多種編碼方式。
6、get請求引數會被完整保留在瀏覽歷史記錄裡,而post中的引數不會被保留。
7、get和post本質上就是tcp鏈結,並無差別。但是由於http的規定和瀏覽器/伺服器的限制,導致他們在應用過程中體現出一些不同。
8、get產生乙個tcp資料報;post產生兩個tcp資料報。
計算機網路常見面試題
200 success 301 permanently shifted 資源被永久轉移到了其他url 403 forbidden 404 not found 500 internal error 伺服器內部錯誤 應用層表達層 會話層傳輸層 網路層資料鏈路層 物理層tcp 在傳輸之前會進行三次溝通,一...
常見面試題 計算機網路
tcp和udp是osi模型中的運輸層中的協議。tcp提供可靠的通訊傳輸,而udp則常被用於讓廣播和細節控制交給應用的通訊傳輸。兩者的區別大致如下 埠服務21ftp 檔案傳輸協議 22ssh 23telnet遠端登入 25smtp簡單郵件傳輸協議 53dns網域名稱伺服器 80http超文字傳輸協議 ...
計算機網路常見面試題
tcp和udp是osi模型中的運輸層中的協議。tcp提供可靠的通訊傳輸,而udp則常被用於讓廣播和細節控制交給應用的通訊傳輸。兩者的區別大致如下 tcp對應的協議 udp對應的協議 snmp 簡單網路管理協議,使用161號埠,是用來管理網路裝置的。由於網路裝置很多,無連線的服務就體現出其優勢。tft...