【參考原文】TCP/IP協議、UDP協議、 Http協議
【參考原文】TCP/IP協議詳解
【參考原文】C# Socket與TcpListener、TcpClient和UdpClient的區別及聯繫
【參考原文】C#中MemoryStream類的介紹
概述
使用Socket時遇到的一些問題,記錄一下,免得下次忘記又重新找答案。
OSI網絡模型
- 應用層
文件傳輸,電子郵件,文件服務,虛擬終端; TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet - 表示層
數據格式化,代碼轉換,數據加密; 沒有協議 - 會話層
解除或建立與別的接點的聯繫; 沒有協議 - 傳輸層
提供端對端的接口; TCP,UDP - 網絡層
爲數據包選擇路由; IP,ICMP,RIP,OSPF,BGP,IGMP - 數據鏈路層
傳輸有地址的幀以及錯誤檢測功能; SLIP,CSLIP,PPP,ARP,RARP,MTU - 物理層
以二進制數據形式在物理媒體上傳輸數據; ISO2110,IEEE802,IEEE802.2
簡單的理解
物理層:HUB,網線
鏈路層:MAC,ARP,交換機
網絡層:IP,ICMP,IGMP,路由器
傳輸層:TCP,UDP
會話層:HTTP,SMTP,FTP,POP3
表示層:SOAP,SSL
應用層:WebService的Method
問題
-
Socket是對網絡層操作,TcpClient是對傳輸層的操作。
- 用Socket訪問HTTP服務
網絡層 --> 傳輸層 --> 會話層 - 用TcpClient訪問HTTP服務
傳輸層 --> 會話層
網絡層層的協議是IP,傳輸層的協議是TCP。最本質的區別就是,網絡層把數據添加到IP地址,IP爲所有的系統端口服務,傳輸層只添加到端口,即操作系統的服務端口。網絡層/輸出層提供了面向連接和無連接的服務方式。
- 用Socket訪問HTTP服務
-
C#中TcpClient和Socket的應用選擇
- 只考慮:主機,端口,數據傳輸時,用TcpClient,或UdpClient;
- 要考慮:IP封包,路由,IP數據包時,用Socket;
-
Socket中阻塞和非阻塞的區別
- 非阻塞模式。執行此套接字的網絡調用時,不管是否執行成功,都會立即返回。如調用Receive( )函數讀取網絡緩衝區中的數據時,不管是否讀到數據都立即返回,而不會一直掛在此函數的調用上。
- 阻塞模式。調用Receive( )函數讀取網絡緩衝區中的數據時,只有接收到數據後纔會返回,套接字默認的會創建堵塞模式。