面向報文的傳輸方式是應用層交給udp多長的報文,udp就照樣傳送,即一次傳送乙個報文。因此,應用程式必須選擇合適大小的報文。若報文太長,則ip層需要分片,降低效率。若太短,會是ip太小。udp對應用層交下來的報文,既不合併,也不拆分,而是保留這些報文的邊界。這也就是說,應用層交給udp多長的報文,udp就照樣傳送,即一次傳送乙個報文。
面向位元組流的話,雖然應用程式和tcp的互動是一次乙個資料塊(大小不等),但tcp把應用程式看成是一連串的無結構的位元組流。tcp有乙個緩衝,當應用程式傳送的資料塊太長,tcp就可以把它劃分短一些再傳送。如果應用程式一次只傳送乙個位元組,tcp也可以等待積累有足夠多的位元組後再構成報文段傳送出去。
面向連線舉例:兩個人之間通過**進行通訊;
面向無連線舉例:郵政服務,使用者把信函放在郵件中期待郵政處理流程來傳遞郵政包裹。
顯然,不可達代表不可靠。
從程式實現的角度來看,可以用下圖來進行描述。
從上圖也能清晰的看出,tcp通訊需要伺服器端偵聽listen、接收客戶端連線請求accept,等待客戶端connect建立連線後才能進行資料報的收發(recv/send)工作。而udp則伺服器和客戶端的概念不明顯,伺服器端即接收端需要繫結埠,等待客戶端的資料的到來。後續便可以進行資料的收發(recvfrom/sendto)工作。
在前面講解udp時,提到了udp保留了報文的邊界,下面我們來談談tcp和udp中報文的邊界問題。在預設的阻塞模式下,tcp無邊界,udp有邊界。
對於tcp協議,客戶端連續傳送資料,只要服務端的這個函式的緩衝區足夠大,會一次性接收過來,即客戶端是分好幾次發過來,是有邊界的,而服務端卻一次性接收過來,所以證明是無邊界的;
而對於udp協議,客戶端連續傳送資料,即使服務端的這個函式的緩衝區足夠大,也只會一次一次的接收,傳送多少次接收多少次,即客戶端分幾次傳送過來,服務端就必須按幾次接收,從而證明,這種udp的通訊模式是有邊界的。
可靠,穩定
tcp的可靠體現在tcp在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。
慢,效率低,占用系統資源高,易被攻擊
tcp在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台裝置上維護所有的傳輸連線,事實上,每個連線都會占用系統的cpu、記憶體等硬體資源。
而且,因為tcp有確認機制、三次握手機制,這些也導致tcp容易被人利用,實現dos、ddos、cc等攻擊。
快,比tcp稍安全
udp沒有tcp的握手、確認、視窗、重傳、擁塞控制等機制,udp是乙個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有tcp的這些機制,udp較tcp被攻擊者利用的漏洞就要少一些。但udp也是無法避免攻擊的,比如:udp flood攻擊……
不可靠,不穩定
因為udp沒有tcp那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。
基於上面的優缺點,那麼:
瀏覽器,用的http
flashfxp,用的ftp
outlook,用的pop、smtp
putty,用的telnet、ssh
qq檔案傳輸
…………
qq語音
tftp
……
傳輸層的TCP和UDP
tcp transmission control protocol 傳輸控制協議 udp user datagram protocol 使用者資料報協議 tcp協議 tcp是面向連線的,可靠的程序到程序通訊的協議 tcp提供全雙工服務,即資料可在同一時間雙向傳輸 tcp是面向連線的,可靠的程序到程序...
傳輸層協議TCP和UDP
tcp tcp允許乙個主機同時執行多個應用程序。每台主機可以擁有多個應用 埠,每對埠號 源和目標ip位址的組合唯一地標識了乙個會話。端 口分為知名埠和動態埠。有些網路服務會使用固定的埠,這類端 口稱為知名埠,埠號範圍為0 1023。如ftp http telnet snmp服務均使用知名埠。動態埠號...
傳輸層協議UDP和TCP
udp tcpudp是無連線的 udp提供不可靠服務 udp同時支援點到點和多點通訊 udp是面向報文的 udp首部8個位元組 tcp是面向連線的 tcp提供可靠服務 tcp只能進行點到點通訊 tcp是面向位元組流的 tcp首部20個位元組 連線建立 三次握手 注意 tcp報文首部syn和fin置位...