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