tcp是面向連線的可靠的傳輸協議
udp是非連線的不可靠的傳輸協議
可以看到雖然tcp是面向位元組流的,但是其傳輸的基本單位還是報文(tcp首部和資料,ip報文和udp報文也是由首部和資料組成)
1.面向連線,應用程式在使用tcp之前,必須建立tcp連線,在傳輸完成之後再釋放連線
2.點對點連線(udp可以一對多,一對一)
3.tcp連線傳輸的資料是可靠的交付服務
4.全雙工,雙方可以再任意時刻傳送資料
5.面向位元組流,雖然應用程式和tcp互動的是大小不等的資料塊,但是tcp只保證,傳送方和接收方接到的位元組流相同。
每條tcp連線有兩個端點,連線的兩個端點稱為套接字(socket)
套接字是由ip和埠號組成的。例如 127.0.0.1:8080
tcp通過校驗和,重傳控制,序號標識,滑動視窗,確認應答實現可靠傳輸。如丟包時的重發機制,還可以對次序亂掉的分包進行順序控制。
1.停止等待協議
每發完乙個分組,就等對方確認,在收到對方確認後再傳送下乙個分組
2.滑動視窗
3.超時重傳
4.基於滑動視窗的流量控制
5.擁塞控制(tcp擁塞控制的方法 慢開始,擁塞避免,快重傳,快恢復)
伺服器是處於監聽狀態的,以便及時發現客戶端建立連線的需求。為什麼要三次握手呢?客戶端tcp程序主動發出flag段syn=1,報文序列號seq=x的報文段(a),請求建立連線。狀態變為syn-sent(同步已傳送)。
伺服器收到對應報文段(a)後,會發出確認報文段(b)。
該報文(b)的flag段的syn和ack都是1,確認號ack=x+1(意為對a的確認),同時設定自己的初始序列號seq=y。狀態由listen(監聽)變為syn-rcvd(同步收到)。
客戶端收到伺服器的確認後,還需向伺服器傳送確認。報文段(c)的flag的ack=1,確認號ack=y+1(意為對b的確認),序列號seq=x+1
。狀態變為established(已建立連線)。
伺服器在收到報文段後狀態也變為established。
客戶端的最後確認是必要的,可以防止以失效的請求建立連線報文突然到達伺服器而產生錯誤。
若建立連線只需兩次握手,客戶端並沒有太大的變化,仍然需要獲得服務端的應答後才進入established狀態,而服務端在收到連線請求後就進入established狀態。參考:此時如果網路擁塞,客戶端傳送的連線請求遲遲到不了服務端,客戶端便超時重發請求,如果服務端正確接收並確認應答,雙方便開始通訊,通訊結束後釋放連線。
此時,如果那個失效的連線請求抵達了服務端,由於只有兩次握手,服務端收到請求就會進入established狀態,等待傳送資料或主動傳送資料。
但此時的客戶端早已進入closed狀態,服務端將會一直等待下去,這樣浪費服務端連線資源
運輸層TCP IP體系協議(TCP UDP) 一
tcp和udp是tcp ip體系中,運輸層最終要的兩種協議。在介紹這兩種協議之前,先介紹一下埠的概念。從ip層面來說,通訊的兩端是主機。ip資料報的首部明確表明了傳送放和接受放的ip位址,但是,真正通訊的實體是兩個主機之間的程序,是乙個主機中的程序跟另外乙個主機中的程序在交換資料,端到端的通訊是應用...
運輸層TCP IP體系協議(TCP UDP) 二
使用者資料報協議udp概述 udp資料報的主要特點 1 udp是無連線的,即傳送資料前不需要建立連線。2 udp使用盡最大努力交付,即不保證可靠交付 3 udp是面向報文的,傳送方的udp最應用程式叫下來的報文,在新增首部後節向下交付給ip層,既不合併也不拆分。而是保留這些報文的邊界,應用層交給ud...
運輸層詳解(二)(TCP)
tcp的特點 tcp連線 可靠傳輸的工作原理 傳輸通道不產生差錯 不管傳送方以多快的速度傳送分組,接收方總是可以及時處理得到的資料。然而實際的網路並不具備以上兩個條件,因此,我們可以使用一些可靠的傳輸協議,當出現差錯時讓傳送方重傳出現差錯的資料,同時,在接收方來不及處理收到的資料時,及時告知對方適當...