1.常用的编程模型由OSI和TCP/IP模型。
2.网络中主要的几个概念:协议,接口和服务。
协议是指在不同主机上相同层需要交互时的规则,常用的有TCP/IP,IPX/SPX,NetBEUI等。局域网中主要是IPX/SPX,基于互联网的则使用的是TCP/IP。
接口是指在同一主机上不同相邻层之间交互的约定(要要提供什么服务和需要指定什么操作)。
服务是指为上层提供一定的需求功能,可分为面向连接的服务和无连接的服务。连接服务(基于电话模型)需要经历建立连接使用连接和释放连接,整个过程在一条有序的网络路线上传递数据(提供稳定性)。无连接的服务(邮政模型)把需要发送的数据分割成若干份后再带上目标地址然后无序的发往目的地址,需要在目的地址更具收到的包号码按顺序进行重新组装。(减少通信代价)
3.TCP/IP协议是Internet基础协议,也是电脑数据打包和寻址的标准方法。主要由以下4层构成:网络接口层,互联网层(IP),传输层(TCP),应用层(SMTP,DNS,FTP,Telnet)。
网络接口层主要控制网络硬件该怎样传输上层的IP数据(它管理了各种网络硬件的诸多协议)
互联网层是联通整个网络的关键层,负责基本的封包和寻址(IP协议),IP协议根据具体的网络环境在把不符合该网络环境下的IP数据包重新分包成该环境下的格式再发送。在接收端的IP模块会把各个小的数据块按照顺序组合成数据包传送给TCP或UDP模块。
传输层实现对等实体(电脑对电脑)的数据传输服务,对接收到的IP数据拆分,确保数据是否收到,是否需要重新传递。主要有TCP(传输控制协议)和UDP(数据报协议)2种协议,一个是面向连接一个是无连接的协议。TCP和UDP在接收到IP数据包后安装之前定义的顺序检查是否有丢失,是否需要继续发丢失内容。
应用层是对应用程序的沟通协议,包含所有的高层协议。如虚拟终端协议(Telnet)文件传输协议(FTP)电子邮件协议(SMTP)DNS域名系统HTTP超文本传输协议。
4.计算机一般0~1023为固定分配断端口,1024~65535为动态端口可以根据客户自己定于给具体程序。
5.记忆知识点
IPAddress类:
IPAddress newaddress1 = IPAddress.Parse("192.168.1.1");
IPAddress newaddress2 = IPAddress.Loopback;//127.0.0.1
IPAddress newaddress3 = IPAddress.Broadcast;//255.255.255.255
IPAddress newaddress4 = IPAddress.Any;//0.0.0.0
IPAddress newaddress5 = IPAddress.None;//255.255.255.255
IPHostEntry here= Dns.GetHostEntry(Dns.GetHostName());//地址封装对象
DNS类(域名系统):
IPAddress[] address= Dns.GetHostAddresses("ZB");//获取指定地址或电脑名字的ip集合
IPHostEntry ipHostEntry= Dns.GetHostEntry("10.2.15.48");//根据Ip地址获取IPHostEntry,它包装了IP信息,可以是远程IP地址
string hostName= Dns.GetHostName();//获取本机名字
IPHostEntry 类:为主机地址信息提供容器类
IPHostEntry HostEntry = Dns.GetHostEntry("www.baidu.com");
IPAddress[] IPaddress = HostEntry.AddressList;
string hostName= HostEntry.HostName;
IPEndPoint类:
IPAddress newaddress = IPAddress.Parse("192.168.1.1");
IPEndPoint ep = new IPEndPoint(newaddress, 8000);
AddressFamily AddressFamily = ep.AddressFamily;
IPAddress epAddress = ep.Address;
string port = ep.Port.ToString();
SocketAddress sa = ep.Serialize();//序列化为网络地址
string SocketAddress = sa.ToString();
Socket类:
Socket派生出TcpClient,TcpListener,UdpClient它们提供了直接的方法对网络进行操作,如果需要异步操作需要使用NetworkStream;
6.套接字:其实就是一条数据通道句柄。它由ip+传输协议(TCP或UDP)+端口组成。
.NET提供3种类型的套接字:流式套接字(stream也就是TCP),数据报套接字(就是UDP),原始套接字(Raw)。
Socket socket ;
属性:
socket.Blocking = false;//是否需要阻塞程序
socket.Connected;//当前状态
EndPoint rmEndpoint= socket.RemoteEndPoint;//远程终结点
EndPoint lcEndpoint = socket.LocalEndPoint;//本地终结点
方法:
Socket socket = new Socket("协议族","传输类型(UDP/TCP)","端口类型");//创建套接字,并且返回句柄。
IPAddress address3 = IPAddress.Parse("192.168.1.1");
IPEndPoint ep2 = new IPEndPoint(address3, 8000);
socket.Bind(ep2);//把创建的套接字绑定到本机IP和端口上
socket.Listen(100);//表示程序准备开始监听请求,其中参数表示最大接收请求数。
socket.Accept();//当有客户端连接到服务端则返回一个新的套接字,程序运行到该方法会阻塞,知道有客户端连接,一般放在循环中
socket.Connect("终结点");//此方法主要是客户端使用,负责把创建的套接字与本地地址绑定,与bind()对应
socket.Send(); socket.Receive();//传输和接收数据
socket.Shutdown();//关闭通信释