ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:71.25KB ,
文档编号:5932391      下载积分:19 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-5932391.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(2023DOC)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(XX大学网络程序设计考点完美版.docx)为本站会员(2023DOC)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

XX大学网络程序设计考点完美版.docx

1、For personal use only in study and research; not for commercial use 第一章 网络编程概述1.3 网络协议1、 套接口编程接口(API)位置套接口编程接口(API)位置上三层(应用层)到传输层的接口使用套接口编写使用TCP/UDP协议的网络应用程序理由应用层处理具体应用(FTP、Telnet、HTTP)的细节;对通信细节一无所知下四层,处理通信细节:收发数据、等待确认、排序、计算和验证校验和;对应用一无所知应用层构成用户的进程;下四层为OS内核的一部分提供2、 internet协议(IP)、图Internet协议(IP)网际协议

2、IP是TCP/IP的核心协议,也是网络层中最重要的协议。接收由更低层(网络接口层,例如以太网设备驱动程序)发来的数据包,并把该数据包发送到TCP层或UDP层;把从TCP或UDP层接收来的数据包传送到更低层。IP协议提供面向无连接的、不可靠的数据报传输服务没有确认数据包顺序和是否被破坏IP数据包含 源地址和目的地址。高层的TCP和UDP服务以IP地址为认证基础。提供了递送分组的服务3、 internet消息控制协议(ICMP)、图 1)ping2)差错报告,测试报告Internet消息控制协议(Internet Control Message Protocol)ICMP与IP位于同一层,用来传送

3、IP的控制信息ICMP数据包被封装在IP数据包的数据部分中进行传输发送IP数据包时发生错误,路由器使用ICMP协议来报告错误消息和控制消息PING是最常用的基于ICMP的服务(回显应答与回显请求,两种报文)差错报告和测试查询两类一般由TCP/IP网络软件自身处理,而非用户进程4、internet组管理协议(IGMP)Internet组管理协议(IGMP)IGMP数据包也是嵌入在IP数据包内进行传输多播路由器使用IGMP协议来查询多播组内有哪些主机,主机则在加入和退出多播组时使用IGMP协议向路由器发出通告,或者使用IGMP协议响应多播路由器的查询IPv4中可选,IPv6中没有6.用户数据报协议

4、(UDP)端口号概念用户数据报协议(UDP)UDP与TCP位于同一层(传输层),都建立在IP协议的基础上提供非面向连接的和不可靠的简单的数据报服务不可用于使用虚电路的面向连接的服务主要用于面向查询/应答的服务具有较高的效率,不须要花费开销建立连接;常用于交换量较少的服务如:NFS每个客户机的请求都是独立和无序的对客户机而言,每个服务器的应答都是独立和无序的同一个客户端用同一个套接口可以与多个服务器收发数据包,反之也是UDP协议增加了端口号的概念不同的进程使用不同的端口每个端口有一个惟一的整数标识端口号分为公认端口和自由端口号两种服务器使用公认端口号来提供服务客户机使用自由端口号与服务器通信小于

5、1024的端口号被用做保留端口号,常被用来提供公共服务。例如HTTP服务的标准端口号是80,FTP的标准端口号是21。必须在应用程序上建立特性,确保可靠性7、传输控制协议(TCP)可靠性(本身不能保证把数据传送到对方,只是可靠投递或故障的可靠通知)传输控制协议(Transmission Control Protocol)提供虚电路服务,它面向连接,提供可靠、双向、有序、无重复的数据流服务-无记录边界可以解决网络通信中的数据丢失、重复、出错、无序等问题TCP协议根据接收方所能接收信息的最大发送速度传输数据并以接收方所能接收的最大发送长度把用户数据分段发送其本身并不能保证把数据传送到对方,只是可靠

6、投递或故障的可靠通知协议描述通信之前,必须先建立一条连接;通信结束,应该断开连接用确认和超时重传保证通信的可靠性用序列号保持字节流的顺序;为每个要发送的字节数据分配一个序列号,并将起始序列号通知对方提供流量控制,接收方总是把它能接收的数据量告诉对方,设置了一个大小可变的接收窗口。窗口大小在确认数据段中,通知对方,发送方据此发送数据全双工信道TCP不支持多点播送或广播8、码位码位:URG(urgent)位:如果使用紧急数据指针,则将这一位设置成1。ACK(acknowledge)位:如果确认序列号有效,则将这一位设置成1。PSH(push)位:表示“推”数据,如果这一位设置成1,则表示希望接收方

7、在接收到这个数据段之后,立即将它传送给高层应用程序,而不是缓存起来。RST(reset)位:表示请求重置连接。当TCP协议接收到一个不能处理的数据段时,向对方TCP协议发送这种数据段,表示这个数据段所标识的连接出现了某种错误,请求对方TCP协议将这个连接清除。SYN(synchronize)位:请求建立连接。TCP用这种数据段向对方TCP协议请求建立连接。在这个数据段中,TCP协议将它选择的初始序列号通知对方,并且与对方协议协商最大数据段的大小。SYN数据段的序列号为初始序列号,这个SYN数据段能够被确认。当协议接收到对方这个数据段的确认之后,建立TCP连接。紧急指针:如果设置了紧急指针位(U

8、RG),这个域指出紧急数据相对于这个数据段的开始序列号的偏移量。TCP协议只提供一字节的紧急数据紧急指针指向紧急数据的下一个字节位置。9建立连接(三次握手)、图建立连接双方发送各自的同步请求,并收到对方确认AB SYN my sequence number is X。A向B发送同步请求,附序号XAB ACK your sequence number is X。B响应序号为X的A同步请求AB SYN my sequence number is Y。B向A发送同步请求,附序号YAB ACK your sequence number isY。A响应序号为Y的B同步请求10、TCP连接终止TCP连接终

9、止客户端调用close,主动关闭,发送FIN,表示数据发送完毕(假设客户端主动关闭)服务器接收到FIN,被动关闭,由TCP确认这个FIN。将文件结束符传递给接收端应用程序,表明应用程序再也接收不到数据一段时间后,服务器调用close关闭它的套接口,也发送一个FIN客户端收到FIN并确认总之,每个方向都有一个FIN和ACK11、标识一条连接,状态转换图四个信息本地IP地址、本地端口号、远地IP地址、远地端口号标识一条连接TCP协议中,使用四个信息完全标识一条连接:本地IP地址、本地端口号、远地IP地址、远地端口号。连接一端的IP地址和端口号组成了一个套接口(socket)的地址部分。连接双方的套

10、接口组成一个套接口对,一个套接口对惟一地标识一条TCP连接。12、TIME_WAIT存在的两个理由TIME_WAIT状态存在的两个理由:主动关闭的那端进入TIME_WAIT状态,持续时间是2个MSL(最大分节生命期)可靠的实现TCP全双工连接的终止假设最终的ACK丢失允许老的重复分节在网络中的消逝13、流控制传输协议特性流控制传输协议(Stream Control Transmission Protocol)较新的协议在客户和服务器之间提供关联,应用层提供可靠性、有序、流量控制以及全双工的数据传输服务。(TCP)面向消息的通信,提供各个记录按序投递服务,保护数据消息边界(UDP) 14、TCP

11、.UDP1)PDU2)SDU3)如何分片TCP和UDP的PDU、SDU和分片(MSS,MTU)PDU(协议数据单元):对等实体间交换的单位信息SDU(服务数据单元):每层的PDU通过由相邻下层提供的服务接口,作为下层的SDU传递给下层,由下层间接完成本层的PDU交换如果本层PDU大小超过紧邻下层的最大SDU,本层事先将PDU分片让下层载送,再在反方向上重组。1.4 网络编程模式与编程接口1.客户机、服务器模式(C/S)1)重复服务器2)并发服务器3)典型C/S模型客户机/服务器模式(C/S模式)服务器:为应用提供服务的主机;一直等待客户请求,以便为客户提供服务客户机:向服务器提出服务要求,并等

12、待传回的结果服务:文件传送,电子邮件,远程登录,时间服务网络应用的标准模型是C/S模型C/S模型是非对称模型重复服务器(iterative server),也称循环服务器在同一个时刻只可以响应一个客户端的请求。这种服务器上的进程能够预知在短时间内可以处理完请求,便亲自处理它。例如,典型的服务是通报时间。并发服务器(concurrent server)在同一个时刻可以响应多个客户端的请求。这种服务器上的进程事先不能预知完成服务请求需要花多长时间,便以并发的方式处理它。并发服务器通过激活别的进程来完成服务请求,而本身转入睡眠状态以等待另一个请求的到来。典型的服务是处理文件信息,例如对文件的访问和打

13、印文件。1.6变元表。环境表.gcc编译器。gdb常用命令变元表变元表是用来向执行的程序提供参数的指向字符串的指针数组其长度可变,最大长度不应超过5120或10240个字节在C语言中变元表主要用argc,argv表示。C语言的main函数格式为:main(int argc,char argv) main函数argc,argv 参数根据需要可有可无变元表存放在进程的数据空间中,进程可以使用这些参数当一个程序被激活时,通常把这些参数放进初始堆栈main(int argc,char * argv) printf(argc:%dn,argc); printf(argv:%s,argv0); 第二章 基

14、于TCP套接口的编程2.2 套接口和套接口地址1、linux系统的套接口套接口是两个通信通道上的端节点套接口函数可以用来产生通信信道,通过信道两个应用程序间可以传送数据Linux系统的套接口网络编程接口,支持多种协议套接口地址结构“sockaddr_”开头,并以对应协议族的唯一后缀结束sockaddr_in、sockaddr_in6、sockaddr_un通用的套接字地址结构struct sockaddrunsigned short sa_family; /* 地址类型,AF_xxx,2个字节 */char sa_data14;/* 协议地址,14个字节 */;/16字节2、值结果参数值结果参

15、数函数调用时,结构大小是一个值告诉内核结构的大小,内核在写结构时不会越界函数返回时,结构大小是一个结果告诉进程结构中确实存在的信息量若套接口地址结构为定长:返回值是定长sockaddr_in(16B)、sockaddr_in6(28B)若套接口地址结构为变长:返回值是比最大值小sockaddr_un3、网络字节顺序、主机字节顺序网络字节顺序与主机字节顺内存中存储字节的两种方法将低序字节存储在起始地址:小端字节序将高序字节存储在起始地址:大端字节序将给定系统所用的字节序称为主机字节(host byte order)这两种方式都有系统使用网际协议在处理多字节整数(如传输TCP分节的协议地址16位端

16、口号,32位IP地址)时,使用大端字节序。套接口地址结构中的某些成员需要按网络字节序进行维护在填充套接口地址结构前必须考虑主机字节到网络字节之间的转换4、IP地址的使用,功能 IP地址的使用设置sockaddr_in类型地址时,需要进行字符串形式的IP地址和二进制形式的地址间转换:#include #include #include int inet_aton(const char *cp,struct in_addr *inp);/点分十进制字符串网络字节顺序二进制值unsigned long int inet_addr(const char *cp);/点分十进制字符串网络字节顺序二进制值

17、/以255.255.255.255表示出错,不能表示此广播地址char * inet_ntoa(struct in_addr in);/网络字节顺序二进制值点分十进制字符串2.3 基本套接口函数1、TCP数据流流程图2、socket()、socketpair()(socketpair()产生两个套接口)socket( ) 函数执行网络通信,进程调用socket函数,指定期望的通信协议#include #include int socket(int domain, int type, int protocol);socketpair()socketpair()产生两个套接口,并连接这两个套接口,

18、返回这两个套接口描述字3、connect()三种出错返回状态转换:CLOSED状态SYN_SENT状态ESTABLISHED状态connect函数TCP客户端与服务器建立连接用connect函数未连接的套接口 主动连接套接口#include #include int connect(int sockfd,struct sockaddr * addressp,int addrlen);成功返回:0;出错返回:-1connect的三种出错返回1 若TCP客户没有收到SYN分节的响应(ACK)返回ETIMEOUT错误调用connect函数时,系统发送SYN,若无响应则等待6秒钟再发送一个,若仍然无响

19、应则等待24秒钟后再发送一个SYN。总共等75秒后仍未收到响应则返回该错误。2 若对客户的SYN响应是RST,则表示该服务器主机在指定端口上没有进程在等待与之连接称为硬错(hard error),客户收到RST立即返回ECONNREFUSED错误目的地为某端口的SYN到达,该端口上没有正在监听的服务器TCP想取消一个已有连接TCP接收到一个根本不存在的连接上的分节【3】若客户发出的SYN在中间的某个路由器上引发一个“destination unreachable目的地不可达”ICMP错误称为软错(soft error)客户机内核保存该消息,按第一种方式继续发送SYN,规定时间内无响应,则将保持

20、的消息(ICMP错误报文)作为EHOSTUNREACH或ENETUNREACH错误返回。收到一次ICMP错误后,必须继续发送SYN,这种错误可能是暂时情况。CLOSED状态SYN_SENT状态ESTABLISHED状态若失败则套接口不再可用了,必须关闭,不能再在该套接口上调用connect函数,需要重新调用socket4、listen()listen函数监听端口:未连接的套接口 被动套接口内核应该接收指向该套接口的连接请求套接口状态:CLOSED LISTEN服务端在socket和bind后,accept前调用#include int listen(int sockfd,int backlog

21、)功能:监听本地地址和端口参数:sockfd已绑定的socket描述符backlog已完成连接、等待接收的队列长度返回值0成功,-1失败5、等待队列当客户SYN到达时,若队列是满的如果返回RST等待队列未完成连接队列:客户端发来的SYN分节对应其中一项;服务器正等待完成相应TCP三次握手。服务端为SYN_RCVD状态已完成连接队列:每个已完成三次握手的客户对应其中一项。服务端为ESTABLISHED状态未完成队列完成队列 backlog当客户SYN到达时,若队列是满的,TCP就忽略该分节,不发送RST分节。客户端会重发SYN,期望不久在队列中找到可用空间如果返回RST则出现:connect立即

22、返回错误,客户端也不知是“端口没有监听”还是“端口在监听,而队列满了”6.accept()(完成三次握手)TCP服务器调用从已完成连接队列头返回下一个已完成连接已完成队列为空,则进程睡眠执行步骤:(1)服务请求到达accept()函数监视的socket(监听套接口)(2)socket执行体将自动建立一个新的socket(已连接套接口)(3)并将此socket和客户进程连接起来(4)监听套接口继续接收到达的服务请求#include #include int accept(int sockfd,sockaddr * cliaddr,int *addrlen);成功返回:非负套接字 ;出错返回:-1

23、7、套接口的生存期套接口的生存期监听套接口(socket创建)在服务器的生命期内一直存在已连接套接口(accept创建)服务器完成该客户端进程服务时,关闭该套接口8、close()考虑计数器注意close( )函数用来关闭套接口,终止TCP连接 #include int close(int fd);注意:close引发相应套接口描述字的引用计数器减一若引用计数器值仍大于0,该close不引发TCP的四分组连接终止序列只有在引用计数器=0时,才关闭套接口例如:并发服务器中,父进程close已连接套接口,不影响子进程对该套接口的使用close的两个限制仅当计数器=0时,才关闭套接口Close终止数

24、据发送的两个方向:读与写;TCP是全双工的9、并发服务器(实验)fork的典型用法fork函数:#include #include pid_t fork(void);fork的两个典型用法:(1)进程创建一个自身的拷贝,该拷贝都可以在另一个拷贝执行其他任务的时候处理各自的操作如:网络服务器(2)一个进程要执行另一个程序创建自身拷贝后,其中一个拷贝调用exec吧自身换成新的程序2.4 高级套接口函数9、send()、recv()send( )和recv( )与write函数和read函数类似,用来发送数据可用于TCP或者UDP通信协议采用数据报传送方式时,应利用connect( )函数给出所连接

25、的套接口地址#include #include int send(int sockfd, const void *buf, size_t len, int flags);int recv(int sockfd, void *buf, size_t len, int flags);sockfd:套接口的文件描述符;buf:数据缓冲区;len:数据缓冲区字节数flags:发送/接收数据的控制参数返回值:-1失败; 0成功。10、sendto()、recvfrom()sendto( )与recvfrom( )函数两个函数均可用于TCP或者UDP通信协议#include #include int se

26、ndto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);from:发送数据的套接口地址to:数据要发送的目的套接口地址tolen:目的地址字节数fromlen:源地址字节数(值结果参数)返回值:读写数据的长度11、readv()/writev()readv和writev

27、函数与read/write类似,用于一次读写多个非连续缓存readv:分散读,读操作的输入数据分散到多个应用缓冲区中writev:集中写,多个应用缓冲区的输出数据被集中提供给单个写操作二者可以用于任何描述字:套接口描述字,文件描述字等函数任何描述字仅套接口描述字单个读/写缓冲区分散/集中读/写可选标志可选对端地址可选控制信息read/writereadv/writevrecv/sendrecvfrom/sendtorecvmsg/sendmsg12、几种IO函数的差异(图)13、shutdown()shutdown( )终止网络连接并停止所有信息的发送与接收不管引用计数器为何值#include

28、 int shutdown(int sockfd, int how);参数说明:sockfd:套接口描述字how:套接口关闭方式14、多路复用(概念、select()函数、中间三个参数、描述子集、低潮标记、select返回某个套接口就绪小结)内核发现进程指定的一个或多个I/O条件就绪,就通知进程:这种方式称为多路复用I/O复用在网络编程中的典型应用:客户机处理多个描述字时,使用I/O复用。(交互式输入与网络套接口)客户同时处理多个套接口时,使用I/O复用一个TCP服务器,既要处理监听套接口,又要处理已连接套接口,使用I/O复用如果一个服务器要处理多个服务或者多个协议,一般也要用I/O复用。(如

29、inetd守护进程)Unix下可用的5种I/O模型:阻塞I/O非阻塞I/OI/O复用 ( select函数、poll函数、pselect函数) 信号驱动I/O(SIGIO)异步I/O (POSIX的aio_*函数)select函数同步多路复用可对任何描述字进行操作将多个套接字组成一个集合使用select函数对集合进行监控集合中任一个描述符就绪,进程就作相应的I/O处理或者经历指定时间后唤醒进程中间三个参数readset,writeset和exceptset:指定让内核测试的读、写和异常条件到达的描述字每个描述字集合指定一个或多个描述字值描述字集合表示方法:典型地是一个整数数组,其中每个整数中的

30、每一位对应一个描述字。例如:使用32位整数,数组第一个元素对应于描述字的编号031,第二个元素对应于描述字3263描述字集合的使用:隐藏于fd_set的数据类型中void FD_ZERO(fd_set * fdset); /*清除描述字集fdset中的所有位*/void FD_SET(int fd, fd_set *fdset); /*在fdset集中加入fd描述字*/void FD_CLR(int fd, fd_set *fdset); /*将fd从fdset中清除*/int FD_ISSET(int fd, fd_set *fdset); /*判断fd是否在fdset中*/描述字集在使用前

31、必须初始化例如:fd_set rset;FD_ZERO(&rset);/*初始化*/FD_SET(1,&rset);FD_SET(4,&rset);FD_SET(5,&rset);对于不感兴趣的描述字集合(readset, writeset, exceptset),将参数设置为空;若三个指针都为空则就相当于精确的定时器描述字集( readset, writeset, exceptset )参数为值结果参数select函数修改由( readset, writeset, exceptset )所指向的描述字集调用函数时,指向所关心的描述字的值函数返回时,结果指示哪些描述字已就绪,未就绪的描述字(对

32、应位)清0随后使用FD_ISSET宏测试fd_set数据类型中的描述字每次重新调用select函数时,必须重新设置描述字集的值值得注意的两个错误忘记对最大描述字加1忘记描述字集是值结果参数接收与发生缓冲区低潮标记:允许应用进程控制在select返回可读或可写条件之前,有多少数据可读或有多大空间可写。select返回某个套接口就绪小结2.6 DNS与域名1.递归解析(迭代解析)递归解析客户(解析程序)向名字服务器请求递归回答:期望服务器提供最终解答若服务器是该域名的权限服务器,检查它的数据库和响应若不是该权限服务器,就将请求发生给另一个服务器(通常为父服务器)并等待响应。若父服务器是权限服务器,

33、则响应;否则,就将查询再发送给另一个服务器。当查询最终被解析时,响应就返回,直到最后到达发出请求的客户。若客户没有要求递归回答,则映射按迭代方式进行若服务器是这个域名的权限服务器,则发送解答。若不是,返回它认为可以解析这个查询的服务器的IP地址客户向第二个服务器重复查询若新找到的服务器能够解决这个问题,回答这个查询;否则,就向客户返回一个新的服务器的IP地址。客户必须向第三个服务器重复查询。这种过程称为迭代,客户向多个服务器重复同样的查询。 第三章 UDP套接口与原始套接口的编程3.1:UDP模型3.2 UDP套接口编程1. UDP套接口在通信中发送接收数据的单位-数据报发送时(sendto、

34、sendmsg):封装生成一个UDP数据报,然后发送接收时(recvfrom,recvmsg):UDP协议返回一个完整的数据报内容2. UDP套接口注意问题(1)UDP套接口发送数据时不会因发送缓冲区满而出现阻塞(2)UDP套接口的接收缓冲区是一个队列。(3)UDP服务器采用循环服务器的工作方式(4)发送数据时需指定接收方的地址(5)需要多点传送数据时,使用UDP套接口3. UDP采用循环服务器的工作方式服务端:调试代码UDPserver.c创建UDP套接口填充本地地址将套接口与协议地址绑定通信函数: 循环处理请求 接收请求并获取对方协议地址 根据协议地址发送响应信息客户端调试代码UDPcli

35、ent.c创建套接口填充服务端地址通信函数: 循环获取标准输入字符串 向服务器端发送字符串 接收服务器端的响应字符串 输出到标准输出4. 假冒服务端反馈问题客户端调用recvfrom指定的地址相关指针为NULL时,任何进程都可以向该客户端的IP地址与端口发送数据报,这些数据会被误认为是服务器的应答解决办法:客户通过recvfrom返回数据报发送者的IP地址与端口号,保留来自指定服务器的应答,忽略任何其他数据报若服务器有多个网络接口和IP地址(且服务器端未绑定指定IP地址) 客户得到服务器IP地址后,通过DNS查找其域名,验证其域名 在服务器上为每个IP地址创建一个套接口,bind每个IP地址到

36、各自的套接 口;在这些套接口上使用select,再从可读的套接口给出应答(给出应答的套接口上绑定的IP地址就是客户请求的目的IP地址)。应答源IP地址与请求目的IP地址相同5. 服务器未运行问题服务器未运行问题客户端发送一行信息后,阻塞于recvfrom调用客户端进行ARP请求与应答的交换然后发送信息(sendto),调用后即可成功返回服务器响应端口不可达的ICMP错误消息异步错误ICMP不会返回给进程,在recvfrom中返回errno值(若是连接UDP,才在recvfrom返回拒绝访问错误)3.3 连接UDP套接口功能1. 连接套接口的建立(没有三次握手)连接套接口的建立(1)UDP套接口

37、调用connect函数(与流式套接口方法相同,结果不同)(2)没有三次握手,不需要在发送和接收方建立连接(3)UDP套接口仅记录目的方的IP地址和端口号,并立即返回调用进程 a).调用connect函数后的UDP套接口:连接UDP套接口 b).未调用connect函数的UDP套接口:未连接套接口2. UDP连接套接口的特点(1) 发送数据时不用指定服务器的目的地址,UDP协议自动根据保存的地址填充要发送的UDP数据报(使用send或write函数代替sendto)(2) UDP协议在内核中检查连接套接口收到的数据报,并使得连接套接口只接收来自connect指定协议地址的UDP数据报(3) 由已

38、连接UDP套接口引发的异步错误返回给它们所在的进程未连接UDP套接口不接收任何异步错误3. 连接UDP套接口的取消(TCP套接口,connect只能调用一次)连接UDP套接口的取消(1)连接UDP套接口再次调用connect函数,可以断开旧的连接,建立新的连接(2)使用一个非法的套接口地址对这个套接口调用connect函数;设置套接口地址的地址族为AF_UNSPEC,connect错误返回EAFNOSUPPORT,表示UDP协议不支持该类型地址,即取消了连接UDP套接口3.6 原始套接口1. ping程序原理分析(ping.h)Ping程序的分析Ping程序的操作(1)向某个IP地址发送一个I

39、CMP回射请求icmp_type=ICMP_ECHO, icmp_code=0, icmp_id=pid,每个分组递增序列号,时间戳(2)对方响应一个ICMP回射应答返回来自回射请求的标识符、序列号、时间戳收到回射应答时计算往返时间(RTT)程序分为两部分:(1)在原始套接口上读取收到的每个分组,显示ICMP回射应答(2)每隔1秒钟发送一个ICMP回射请求,由SIGALRM信号每秒驱动一次2. proc_v4函数的图将获取到的数据转换成ip结构体指向区域将IPv4头部长度字段乘以4得出IPv4头部以字节为单位的大小把icmp设置成指向ICMP头部开始位置3. traceroute程序(图)Tr

40、aceroute程序目的:确定IP数据报从本地主机游历到远地主机所经过的路径使用了IPv4的TTL字段,以及两种ICMP消息工作流程(1)向目的地发送一个TTL为1的UDP数据报(随机选取的未被使用的目的端口发送数据报)(2)该数据报导致第一跳路由返送一个ICMP错误(time exceeded in transit 传输超时)(3)每递增TTL一次发送一个UDP数据报,逐步确定下一跳路由器(4)当UDP数据报(TTL增加到一定大小后)到达最终目的地时,目标主机返送一个ICMP错误(port unreachable 端口不可达)4. 接收ICMP反送包函数的图(1)设置3秒钟的报警时钟,进入调

41、用recvfrom的循环,读入返送到原始套接口的所有ICMPv4的消息(2)收到ICMPv4消息构成与处理5. ICMP守护进程内容ICMP消息守护程序: icmpd创建一个ICMPv4的原始套接口,接收内核传递过来的所有ICMP消息 创建一个Unix域字节流套接口,用来传递UDP套接口描述字和错误消息ICMP消息守护程序运作原理UDP应用程序使用Unix域套接口的描述字传递机制,通过Unix域连接把自身的UDP套接口传递给icmpd共享icmpd得到该套接口的拷贝后通过getsockname获取绑定在此套接口上的端口号,随即关闭该套接口的本地拷贝icmpd一旦收到了由UDP应用进程通过绑定在

42、它的UDP套接口上的端口发送的UDP数据报所引发的任何ICMP错误,就可以通过Unix域连接向该应用进程发送一个消息UDP应用进程需要使用多路复用方式等待其UDP套接口和Unix域套接口中任何一个有数据到达而变为可读3.7 服务器编程模型1. 模型:循环服务器(TCP、UDP)、并发服务器(TCP/UDP)、阻塞、非阻塞UDP循环服务器UDP服务器每次从套接口上读取一个客户端的请求并处理请求,然后将结果返回给客户机TCP循环服务器A.TCP循环服务器接收一个客户端的连接,然后进行处理,直到完成这个客户机的所有请求后,断开连接。B.TCP循环服务器一次只能处理一个客户端的请求,只有在这个客户的所

43、有请求都满足后,服务器才能继续后面的请求。C.若一个客户端占住服务器不放,其他客户机都不能工作D.TCP服务器很少用循环服务器模式 a.数据处理所需时间短 b.服务器只能为单一用户提供服务时,此时应设置超时控制TCP循环服务器的缺陷客户要独占服务器服务器一次只能处理一个客户端请求必须处理完客户的所有请求, 才释放服务器并发服务器:每个客户机的请求不是由服务器的侦听进程直接处理,由服务器侦听进程创建一个自己的子进程负责处理服务请求,父进程仍负责侦听客户机的请求)TCP并发服务器基本流程A.创建侦听套接口,等待客户机的请求B.接受到一个客户机请求时,创建一个子进程C.子进程进行数据处理D.父进程继续等待新的客户机请求UDP并发服务器当客户请求的处理需要耗用过长时间时,需要UDP服务器实现某种并发性简单UDP服务器读入客户请求后发送一个应答,就结束服务 基本流程A.创建并绑定一个套接口B.接收到请求数据时,创建一个子进程C.子进程进行数据处理D.父进程继续接收请求数据(类似TCP并发服务器TCP的并发服务

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|