网络编程(摘要)

来源:互联网 发布:算法第四版pdf 图灵 编辑:程序博客网 时间:2024/04/29 06:29
网络体系结构:
指网络的层次结构和每层所使用协议的集合
分为:OSI与TCP/IP


OSI模型七层结构
物理层            链路层  |                           网络层                  |                        传输层                    |  会话层    表示层                应用层
Ethernet  ARP RARP I                          P、ICMP                              TCP UDP同下                       无协议              FTPTelnet HTTP
令牌环网 MTU PPP                  IGMP    DNS   SMTP
FDDI
对应的TCP/IP协议
TCP/IP协议
网络接口与物理层  |  网络层  |   传输层  |             应用层


UDP和TCP
相同点:同为传输协议
不同点:TCP:有链接,可靠     UDP:无连接,不可靠
TCP:
面向连接的传输层协议,他能提供高可靠性通信(即数据无误,无丢失,无失序,无重复到达的通信)
使用情况:
适合于对传输要求较高,以及传输大量数据的通信;在需要可靠数据传输的场合,通常使用TCP;MSN QQ登录
UDP:
用户数据报协议,是不可靠的无连接协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的传输。全双工、无连接的不保证可靠的数据报通信
使用情况:发送小尺寸数据(对DNS服务器进行ip地址查询时)
 在接收到数据,给出应答较困难的网络中使用UDP,(如无线网络)
 适合于广播/组播式通信中
 MSN、qq、Skype 点对点文本通信及音视频通信
 流媒体、VOD、IPTV等网络多媒体服务中
TCP服务端
socket-》bind-》listen-》accept-》send/revc-》close(返回accept)
TCP客户端
socket-》bind(可选)-》connect-》send/revc-》close
UDP服务端
socket-》bind-》revcfrom-》sendto(返回recvfrom)
UDP客户端
socket-》bind-》sendto-》recvfrom(返回sendto)


I/O模型
阻塞I/O  非阻塞I/O   I/O多路复用  信号驱动I/O
阻塞I/O模式:
大部分程序使用的都是阻塞I/O模式
缺省情况下,套接字建立后所处于的模式就是阻塞I/O模式
发生阻塞的操作:
读操作:read  recv  recvfrom
写操作:write send
其他操作:accept
非阻塞I/O模式:
当我们将一个套接字设置为非阻塞模式,我们相当于告诉操作系统内核:当我请求的
I/O操作不能马上完成,你想让我的进程进行休眠等待的时候,不要这么做,请立马返回一个错误给我
当一个应用程序使用了非阻塞模式的套接字,他需要使用一个循环来不停地测试是否一个文件描述符有数据可读(polling)
应用程序不停的polling内核来检查是否I/O操作已经就绪。这将是一个及浪费CPU资源的操作
多路复用I/O:
应用程序同时处理多路输入输出流,若采用阻塞模式,将得不到预期的目的
若采用非阻塞模式,对多个输入进行轮询,又太浪费CPU时间
若设置多个进程,分别处理一个数据通路,将新产生进程间的同步与通信问题,是程序变得更加复杂
比较好的是使用I/O多路复用:
1.先构造一张有关描述符的表,然后调用一个函数。当这些文件描述符中的一个或多个已准备好进行I/O时函数才返回
2.函数返回时告诉进程那个文件描述符一就绪,可以进行I/O操作
并发服务器模型:服务器接收客户端的链接请求后创建子进程为客户端来服务
缺点:如果有多个客户端的话,服务端需要创建多个子进程。影响服务端的运行效率
0 0
原创粉丝点击