【C#】Socket

【參考原文】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

問題

  1. Socket是對網絡層操作,TcpClient是對傳輸層的操作。

    • 用Socket訪問HTTP服務
      網絡層 --> 傳輸層 --> 會話層
    • 用TcpClient訪問HTTP服務
      傳輸層 --> 會話層

    網絡層層的協議是IP,傳輸層的協議是TCP。最本質的區別就是,網絡層把數據添加到IP地址,IP爲所有的系統端口服務,傳輸層只添加到端口,即操作系統的服務端口。網絡層/輸出層提供了面向連接和無連接的服務方式。

  2. C#中TcpClient和Socket的應用選擇

    • 只考慮:主機,端口,數據傳輸時,用TcpClient,或UdpClient;
    • 要考慮:IP封包,路由,IP數據包時,用Socket;
  3. Socket中阻塞和非阻塞的區別

    • 非阻塞模式。執行此套接字的網絡調用時,不管是否執行成功,都會立即返回。如調用Receive( )函數讀取網絡緩衝區中的數據時,不管是否讀到數據都立即返回,而不會一直掛在此函數的調用上。
    • 阻塞模式。調用Receive( )函數讀取網絡緩衝區中的數據時,只有接收到數據後纔會返回,套接字默認的會創建堵塞模式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章