TCP(Transmission Control Protocol,傳輸控制協議)
#是面向連接的協議,也就是說,在收發資料前,必須和對方建立可靠的連結。一個TCP連線必須經過三次「對話」才能建立起來
TCP三次握手過程:
1 主機A透過向主機B 發送一個含有同步序號的標誌位的資料段給主機B ,向主機B 請求建立連線,透過這個資料段, 主機A告訴主機B 兩件事:我想要和你通訊;你可以用哪個序號作為起始資料段來回應我.
2 主機B 收到主機A的請求後,用一個帶有確認應答( ACK)和同步序號(SYN)標誌位的資料段回應主機A,也告訴主機A兩件事: 我已經收到你的請求了,你可以傳輸資料了;你要用哪佧序號作為起始資料段來回應我
3 主機A收到這個資料段後,再發送一個確認應答,確認已收到主機B 的資料段:"我已收到回复,我現在要開始傳輸實際資料了
這樣3次握手就完成了,主機A和主機B 就可以傳輸資料了.
3次握手的特點:
1)沒有應用層的資料
2)SYN這個標誌位元只有在TCP建產連接時才會被置1
3)握手完成後SYN標誌位元被置0
#TCP建立連線要進行3次握手,而斷開連線要進行4次
1 當主機A完成資料傳輸後,將控制位FIN置1,提出停止TCP連線的請求
2 主機B收到FIN後對其作出回應,確認這一方向上的TCP連線將關閉,將ACK置1
3 由B 端再提出反方向的關閉請求,將FIN置1
4 主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束.
#由TCP的三次握手和四次斷開可以看出,TCP使用面向連接的通信方式,大大提高了數據通信的可靠性,使發送數據端和接收端在數據正式傳輸前就有了交互,為數據正式傳輸打下了可靠的基礎
名詞解釋
ACK-TCP標頭的控制位元之一,對資料進行確認.確認由目的端發出,用它來告訴發送端這個序號之前的資料段都收到了.比如,確認號為X,則表示前X-1個資料段都收到了,只有當ACK=1時,確認號才有效,當ACK=0時,確認號無效,這時會要求重傳資料,保證資料的完整性.
#SYN-同步序號,TCP建立連線時將這個位置1
#FIN-傳送端完成傳送任務位元,當TCP完成資料傳輸需要斷開時,提出斷線的一方將此位置1
TCP的包頭結構:
來源埠16位元
目標埠16位元
#序號32位元
回應序號32位元
TCP頭長4位元
#reserved 6位元
控制碼6位元
視窗大小16位元
# #偏移量16位元
校驗與16位元
選項 32位元(可選)
#這樣我們就得到了TCP包頭的最小長度,為20位元組。
UDP(User Data Protocol,使用者資料報協定)
######(1) UDP是一個非連接的協議,傳輸資料之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程式的數據,並儘可能快地把它丟到網路上。在發送端,UDP傳送資料的速度只是受應用程式產生資料的速度、電腦的能力和傳輸頻寬的限制;在接收端,UDP把每個訊息段放在佇列中,應用程式每次從佇列中讀一個訊息段。
(2) 由於傳輸資料不建立連接,因此也不需要維護連接狀態,包括收發狀態等,因此一台服務機可同時傳送相同的消息。
(3) UDP訊息包的標題很短,只有8個位元組,相對於TCP的20個位元組資訊包的額外開銷很小。
(4) 吞吐量不受擁擠控制演算法的調節,只受應用軟體產生資料的速率、傳輸頻寬、來源端和終端主機效能的限制。
(5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連結狀態表(這裡面有許多參數)。
(6)UDP是面對封包的。發送方的UDP對應用程式交下來的封包,在新增首部後就向下交付給IP層。既不拆分,也不合併,而是保留這些封包的邊界,因此,應用程式需要選擇合適的封包大小。 我們常使用「ping」指令來測試兩台主機之間TCP/IP通訊是否正常,其實「ping」指令的原理就是向對方主機發送UDP封包,然後對方主機確認收到封包,如果封包是否到達的訊息及時回饋回來,那麼網路就是通的。
UDP的封包結構:
來源埠16位元
#目的連接埠16位元
長度16位元
校驗和16位元
##小結TCP與UDP的差異:
##1.基於連結與無連結;
##2.對系統資源的要求(TCP較多,UDP少);
#####3.UDP程式結構較簡單; ############4. 流模式與資料封包模式; ############5.TCP保證資料正確性,UDP可能丟包,TCP保證資料順序,UDP不保證。 ######以上是TCP/IP與UDP究竟有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!