tcp (transmission control protocol)和udp(user datagram protocol)協議屬於傳輸層協議。其中tcp提供ip環境下的資料可靠傳輸,它提供的服務包括資料流傳送、可靠性、有效流控、全雙工操作和多路復用。通過面向連線、端到端和可靠的資料報傳送。通俗說,它是事先為所傳送的資料開闢出連線好的通道,然後再進行資料傳送;而udp則不為ip提供可靠性、流控或差錯恢復功能。一般來說,tcp對應的是可靠性要求高的應用,而udp對應的則是可靠性要求低、傳輸經濟的應用。tcp支援的應用協議主要有:telnet、ftp、smtp等;udp支援的應用層協議主要有:nfs(網路檔案系統)、snmp(簡單網路管理協議)、dns(主網域名稱稱系統)、tftp(通用檔案傳輸協議)等。
tcp(transmission control protocol,傳輸控制協議)是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。乙個tcp連線必須要經過三次「對話」才能建立起來,其中的過程非常複雜,我們這裡只做簡單、形象的介紹,你只要做到能夠理解這個過程即可。我們來看看這三次對話(三次握手)的簡單過程:
主機a向主機b發出連線請求資料報:「我想給你發資料,可以嗎?」,這是第一次對話;主機b向主機a傳送同意連線和要求同步(同步就是兩台主機乙個在傳送,乙個在接收,協調工作)的資料報:「可以,你什麼時候發?」,這是第二次對話;主機a再發出乙個資料報確認主機b的要求同步:「我現在就發,你接著吧!」,這是第三次對話。三次「對話」的目的是使資料報的傳送和接收同步,經過三次「對話」之後,主機a才向主機b正式傳送資料。
udp(user data protocol,使用者資料報協議)是與tcp相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料報傳送過去!udp適用於一次只傳送少量資料、對可靠性要求不高的應用環境。比如,我們經常使用「ping」命令來測試兩台主機之間tcp/ip通訊是否正常,其實「ping」命令的原理就是向對方主機傳送icmp資料報,然後對方主機確認收到資料報,如果資料報是否到達的訊息及時反饋回來,那麼網路就是通的。例如,在預設狀態下,一次「ping」操作傳送4個資料報(如圖所示)。大家可以看到,傳送的資料報數量是4包,收到的也是4包(因為對方主機收到後會發回乙個確認收到的資料報)。這充分說明了udp協議是面向非連線的協議,沒有建立連線的過程。正因為udp協議沒有連線的過程,所以它的通訊效率高;但也正因為如此,它的可靠性不如tcp協議高。qq就使用udp發訊息,因此有時會出現收不到訊息的情況。
四次揮手
根本原因是,一方傳送fin只表示自己發完了所有要發的資料,但還允許對方繼續把沒發完的資料發過來。
舉個例子:a和b打**,通話即將結束後,a說「我沒啥要說的了」,b回答「我知道了」,但是b可能還會有要說的話,a不能要求b跟著自己的節奏結束通話,於是b可能又巴拉巴拉說了一通,最後b說「我說完了」,a回答「知道了」,這樣通話才算結束。
1.a與b交談結束之後,a要結束此次會話,對b說:我要關閉連線了(seq=u,fin=1)。(第一次揮手,a進入fin-wait-1)
2.b收到a的訊息後說:確認,你要關閉連線了。(seq=v,ack=u+1,ack=1)(第二次揮手,b進入close-wait)
3.a收到b的確認後,等了一段時間,因為b可能還有話要對他說。(此時a進入fin-wait-2)
4.b說完了他要說的話(只是可能還有話說)之後,對a說,我要關閉連線了。(seq=w, ack=u+1,fin=1,ack=1)(第三次揮手)
5.a收到b要結束連線的訊息後說:已收到你要關閉連線的訊息。(seq=u+1,ack=w+1,ack=1)(第四次揮手,然後a進入closed)
6.b收到a的確認後,也進入closed。
三次握手 四次揮手
1.tcp連線的建立 1 首先是伺服器初始化的過程,從 closed 關閉 狀態開始通過順序呼叫 socket bind listen 和accept 原語建立 socket 套接字,進入 listen 監聽 狀態,等待客戶端的 tcp傳輸連線請求。2 客戶端最開始也是從 closed 狀態開始呼叫...
三次握手,四次揮手
三次握手 three times handshake three way handshake 所謂的 三次握手 即對每次傳送的 資料量是怎樣跟蹤進行協商使 資料段的傳送和接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。為了提供可靠的傳送,tcp在傳送...
三次握手 四次揮手
在tcp ip 協議中,tcp 協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖1所示。1 第一次握手 建立連線時,客戶端a 傳送syn 包 syn j 到伺服器b 並進入syn send 狀態,等待伺服器b 確認。2 第二次握手 伺服器b 收到syn 包,必須確認客戶a 的syn ack j...