理解TCP與UDP
TCP—傳輸控制協議,提供的是面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立一個TCP連線,之後才能傳輸資料。TCP提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。
UDP—使用者資料報協議,是一個簡單的面向資料報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的資料報傳送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸資料報前不用在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,故而傳輸速度很快
現在Internet上流行的協議是TCP/IP協議,該協議中對低於1024的埠都有確切的定義,他們對應著Internet上一些常見的服務。這些常見的服務可以分為使用TCP埠(面向連線)和使用UDP埠(面向無連線)兩種。
說到TCP和UDP,首先要明白“連線”和“無連線”的含義,他們的關係可以用一個形象地比喻來說明,就是打電話和寫信。兩個人如果要通話,首先要建立連線——即打電話時的撥號,等待響應後——即接聽電話後,才能相互傳遞資訊,最後還要斷開連線——即掛電話。寫信就比較簡單了,填寫好收信人的地址後將信投入郵筒,收信人就可以收到了。從這個分析可以看出,建立連線可以在需要痛心地雙方建立一個傳遞資訊的通道,在傳送方傳送請求連線資訊接收方響應後,由於是在接受方響應後才開始傳遞資訊,而且是在一個通道中傳送,因此接受方能比較完整地收到傳送方發出的資訊,即資訊傳遞的可靠性比較高。但也正因為需要建立連線,使資源開銷加大(在建立連線前必須等待接受方響應,傳輸資訊過程中必須確認資訊是否傳到及斷開連線時發出相應的訊號等),獨佔一個通道,在斷開連線錢不能建立另一個連線,即兩人在通話過程中第三方不能打入電話。而無連線是一開始就傳送資訊(嚴格說來,這是沒有開始、結束的),只是一次性的傳遞,是先不需要接受方的響應,因而在一定程度上也無法保證資訊傳遞的可靠性了,就像寫信一樣,我們只是將信寄出去,卻不能保證收信人一定可以收到。
TCP是面向連線的,有比較高的可靠性,
一些要求比較高的服務一般使用這個協議,如FTP、Telnet、SMTP、HTTP、POP3等,而UDP是面向無連線的,使用這個協議的常見服務有DNS、SNMP、QQ等。對於QQ必須另外說明一下,QQ2003以前是隻使用UDP協議的,其伺服器使用8000埠,偵聽是否有資訊傳來,客戶端使用4000埠,向外傳送資訊(這也就不難理解在一般的顯IP的QQ版本中顯示好友的IP地址資訊中埠常為4000或其後續埠的原因了),即QQ程式既接受服務又提供服務,在以後的QQ版本中也支援使用TCP協議了。
參考資料: