Socket、Tcp、Udp 概念区分
說明:(三路握手)
??????? 1.客戶端發送一個SYN段(同步序號)指明客戶打算連接的服務器端口,以及初始化序號(ISN) 。
??????? 2.服務器發回包含服務器的初始序號的SYN報文段作為應答。同時,將確認序號(ACK)設置為客戶的ISN加1以對客戶的SYN 報文段進行確認。一個SYN將占用一個序號。
??????? 3.客戶必須將確認序號設置為服務器的ISN加1以對服務器的SYN報文段進行確認。
2) 基本TCP客戶—服務器程序設計基本框架流程圖
? 3) UDP和TCP的對比: 從上面的流程圖比較我們可以很明顯的看出UDP沒有三次握手過程。 簡單點說。UDP處理的細節比TCP少。UDP不能保證消息被傳送到(它也報告消息沒有傳送到)目的地。UDP也不保證數據包的傳送順序。UDP把數據發出去后只能希望它能夠抵達目的地。 TCP優缺點: 優點:
??????? 1.TCP提供以認可的方式顯式地創建和終止連接。
??????? 2.TCP保證可靠的、順序的(數據包以發送的順序接收)以及不會重復的數據傳輸。
??????? 3.TCP處理流控制。
??????? 4.允許數據優先
??????? 5.如果數據沒有傳送到,則TCP套接口返回一個出錯狀態條件。
??????? 6.TCP通過保持連續并將數據塊分成更小的分片來處理大數據塊。—無需程序員知道 缺點: TCP在轉移數據時必須創建(并保持)一個連接。這個連接給通信進程增加了開銷,讓它比UDP速度要慢。 UDP優缺點:
??????? 1.UDP不要求保持一個連接
??????? 2.UDP沒有因接收方認可收到數據包(或者當數據包沒有正確抵達而自動重傳)而帶來的開銷。
??????? 3.設計UDP的目的是用于短應用和控制消息
??????? 4.在一個數據包連接一個數據包的基礎上,UDP要求的網絡帶寬比TDP更小。 三、Socket編程 Socket接口是TCP/IP網絡的API,Socket接口定義了許多函數或例程,程序員可以用它們來開發TCP/IP網絡上的應用程序。要學Internet上的TCP/IP網絡編程,必須理解Socket接口。 Socket接口設計者最先是將接口放在Unix操作系統里面的。如果了解Unix系統的輸入和輸出的話,就很容易了解Socket了。網絡的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似于打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨后的連接建立、數據傳輸等操作都是通過該Socket實現的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對于面向連接的TCP服務應用;數據報式Socket是一種無連接的Socket,對應于無連接的UDP服務應用。 1、socket調用庫函數主要有: 創建套接字?
??????? Socket(af,type,protocol) 建立地址和套接字的聯系?
??????? bind(sockid, local addr, addrlen) 服務器端偵聽客戶端的請求?
??????? listen( Sockid ,quenlen) 建立服務器/客戶端的連接 (面向連接TCP)?
??????? 客戶端請求連接?
??????? Connect(sockid, destaddr, addrlen)?
??????? 服務器端等待從編號為Sockid的Socket上接收客戶連接請求?
??????? newsockid=accept(Sockid,Clientaddr, paddrlen) 發送/接收數據?
??????? 面向連接:send(sockid, buff, bufflen)?
??????? recv( )?
??????? 面向無連接:sendto(sockid,buff,…,addrlen)?
??????? recvfrom( ) 釋放套接字?
??????? close(sockid) 2、TCP/IP應用編程接口(API) 服務器的工作流程:首先調用socket函數創建一個Socket,然后調用bind函數將其與本機地址以及一個本地端口號綁定,然后調用listen在相應的socket上監聽,當accpet接收到一個連接服務請求時,將生成一個新的socket。服務器顯示該客戶機的IP地址,并通過新的socket向客戶端發送字符串" hi,I am server!"。最后關閉該socket。
| main() |
客戶端的工作流程:首先調用socket函數創建一個Socket,然后調用bind函數將其與本機地址以及一個本地端口號綁定,請求連接服務器,通過新的socket向客戶端發送字符串" hi,I am client!"。最后關閉該socket。
| main() |
?
| int?main(int?argc,char?**argv) |
| int?GetServerAddr(char?*?addrname) |
?
| CC=gcc |
總結
以上是生活随笔為你收集整理的Socket、Tcp、Udp 概念区分的全部內容,希望文章能夠幫你解決所遇到的問題。