TCP (Transmission Control Protocol 傳輸控制通訊協定):連線導向的,不可靠的,資料流服務。
UDP (User Datagram Protocl 使用者資料包通訊協定):面向不需連線的,不可靠的,資料報服務。
TCP傳輸和UDP不一樣,TCP傳輸是流式的,必須先建立串連,然後資料流沿已串連的線路(虛電路)傳輸。因此TCP的資料流不會像UDP資料報一樣,每個資料報都要包含目標地址和連接埠,因為每個資料報要單獨路由。TCP傳輸則只需要在建立串連時指定目標地址和連接埠就可以了。
如果我不是剛學過磚頭似的《電腦網路》(第四版 Andrew S.Tanenbaum著 潘愛民譯 清華大學出版社)以上說的我自己都看不懂。上面只是簡要提一下,如果要學習網路,這本書還是值得推薦的。英文版名字是Computer Networks。
形象的講,TCP就像打電話,UDP就像發電報。
就像發電報,宏觀上來看UDP是不分用戶端和服務端的。通訊雙方是平等的。
微觀上來講只相對一個報文,發送端是用戶端,監聽端是服務端。發送端把資料報發給路由器就像把電報發給了郵局,後面的事情就是寄件者無法控制,也無從知曉的了。所以說是不可靠的,可能會出現報文丟失而無從知曉。就像每張電報都要有收件者一樣,每個資料報都要有目的地址和連接埠。
就像打電話,TCP每次串連都是分用戶端和服務端的。串連的發起者(相當與撥號打電話的人)是用戶端,監聽者(相當於在電話邊等著接電話的人)是服務端。發起者指定要已連線的服務器地址和連接埠(相當於撥號),監聽者通過和發起者三向交握建立串連(相當於聽到電話響去接電話)。建立串連後雙方可以互相發送和接受資料(打電話)。
Java中TCP編程主要通過ServerSocket/Socket 類 實現的,其中Socket.getInputStream()/getOutputStream() 是獲得輸入/輸出 資料流的。ServerSocket.accept()是用來監聽建立串連的。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/nyzhl/archive/2007/07/24/1705039.aspx