【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( )函数读取网络缓冲区中的数据时,只有接收到数据后才会返回,套接字默认的会创建堵塞模式。

你可能感兴趣的:(C#,c#)