《网络编程基础》PPT课件.pptx

上传人:wuy****n92 文档编号:70497992 上传时间:2023-01-21 格式:PPTX 页数:41 大小:473.69KB
返回 下载 相关 举报
《网络编程基础》PPT课件.pptx_第1页
第1页 / 共41页
《网络编程基础》PPT课件.pptx_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《《网络编程基础》PPT课件.pptx》由会员分享,可在线阅读,更多相关《《网络编程基础》PPT课件.pptx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、网络编程基础TCP/IP基础知识TCP协议UDP协议Socket的位置I/O多路复用Socket选项带外数据一、TCP/IP基础知识 TCP/IP协议是一组在网络中提供可靠数据传输和无连接数据服务的协议。其中提供可靠数据传输的协议称为传输控制协议TCP,而提供无连接数据包服务的协议叫做Internet协议IP。但是TCP/IP协议并不是只有TCP和IP两个协议,而是包含很多其他协议的一个网络协议的集合。TCP/IP协议组大体上分为三部分:1Internet协议(IP)2传输控制协议(TCP)和用户数据报文协议(UDP)3处于TCP和UDP之上的一组协议专门开发的应用程序。它们包括:TELNET

2、,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等许多协议。一、TCP/IP基础知识 TCP/IP协议参考模型共分四层:3一、TCP/IP基础知识4网络接口层是TCP/IP的最底层,负责从网络接收IP数据报及通过网络发送IP数据报。网间网层(也叫IP层、网络层)负责相邻计算机之间的通信。其功能包括:处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。处理输入数据报:检查其合法性,去掉IP报头,将剩下部分交给适当的传输协议。处理路由、流控、拥塞等。传输层负责网络主机与主机的通信。其功能如下:格

3、式化信息流。提供连接/非连接端对端的传输。应用层向用户提供一组常用的应用程序。一、TCP/IP基础知识用户数据用户数据App头部用户数据TCP头部用户数据TCP头部IP头部用户数据TCP头部IP头部以太网头部以太网尾部以太网帧401500字节FTP客户TCPIP以太网驱动程序TCP段IP分组一、TCP/IP基础知识应用层表示层会话层传输层网络层数据链路层物理层应用层IPv4,IPv6网络接口层TCPUDPOSI模型TCP/IP模型二、TCP协议TCP(传输控制协议)是一种可靠的面向连接的传送服务。主机交换数据必须首先建立连接,传输完毕后断开连接。它用位流通信,即数据被作为无结构的字节流。它提供

4、反馈重发机制,从而保证数据的可靠传输。二、TCP协议TCP是面向连接的。一个TCP客户建立与一个给定服务器的连接,并跨该连接与那个服务器交换数据,然后终止连接。TCP提供可靠性,实现了丢失重传,RTT(客户到服务器往返所花时间,round-triptime)的动态估算。当TCP向另一端发送数据时,它要求对端返回一个确认。如果确认没有收到,TCP自动重传数据并等待更长时间。在数次重传失败之后,TCP才放弃。TCP通过给所发送数据的每一个段管理一个序列号进行排序。以便于接收端按这个序号对数据进行排序。TCP提供流量控制。TCP总是告诉对端它能够接收多少字节的数据,这称为通告窗口。这个窗口在任何时刻

5、都指出接收缓冲区中可用空间,从而确保发送端发送的数据不会溢出接收缓冲区。TCP的连接是全双工的。二、TCP协议TCP数据包头TCP数据包头格式:二、TCP协议源端口、目的端口:16位长,标识出远端和本地的端口号。序号:32位长,标识发送的数据报的顺序。确认号:32位长,希望收到的下一个数据报的序列号。TCP头长:4位长,表明TCP头中包含多少个32位字。6位未用。ACK:ACK为1表明确认号是合法的;如果ACK为0,那么数据报不包含确认信息,确认字段被省略。PSH:表示是带有PUSH标志的数据。因此请求数据报一到接收方便可送往应用程序而不必等到缓冲区装满时才传送。RST:用于复位由于主机崩溃或

6、其他原因而出现的错误的连接,还可以用于拒绝非法的数据报或拒绝连接请求。SYN:表示同步。FIN:用于释放连接。窗口大小:16位长,窗口大小字段表示在确认了字节之后还可以发送多少个字节。校验和:16位长,是为了确保高可靠性而设置的,它校验头部、数据和伪TCP头部之和。可选项:0个或多个32位字,包括最大TCP载荷、窗口比例、选择重发数据报等选项。二、TCP协议TCP连接建立是一个三次握手过程,三次握手的目的是使数据的发送和接收同步。其过程如下:服务器必须准备好接受外来的连接。通过调用socket,bind,listen函数完成。称为被动打开。客户通过调用connect进行主动打开。这引起客户TC

7、P发送一个SYN(表示同步)分节,告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。服务器必须确认客户的SYN,同时自己也得发送一个SYN分节。服务器以单个分节向客户发送SYN和对客户的SYN的ACK(表示确认)。客户必须确认服务器的SYN。二、TCP协议客户服务器SocketConnect(阻塞)(主动打开)Socket,bind,listen(被动打开)SYNJSYNK,ackJ+1ackK+1Accept返回Read阻塞Connect返回Accept(阻塞)二、TCP协议TCP连接关闭过程如下:某个进程首先调用close(称这一端执行主动关闭),这一端的TCP于是发送一个FIN

8、分节,表示数据发送完毕。另一端称为被动关闭。TCP对接收的FIN分节进行确认,并以文件结束标志传递给应用程序。FIN的接收意味着应用进程在相应连接上再也接收不到额外数据。一段时间后,接收到文件结束标志的应用程序调用close,这也导致向对方发送一个FIN分节。接收到这个FIN分节的原发送方TCP对它进行确认。Note:因每个方向都需要一个FIN和一个ACK,所以一般需要四个分节。但执行被动关闭的那一端的TCP在步骤2和3发出的ACK和FIN也可以合并为一个分节。二、TCP协议客户服务器Close主动关闭被动关闭Read返回0FINMACKN+1CloseACKM+1FINN三、UDP协议UDP

9、协议(用户数据报协议)是建立在IP协议基础之上的,用在传输层的协议。UDP提供了无连接的数据报服务。UDP和IP协议一样,是不可靠的数据报服务。三、UDP协议UDP提供无连接服务UDP缺乏可靠性支持,应用程序必须实现:确认、超时、重传、流量控制等UDP面向记录服务UDP套接口是无连接的、不可靠的数据报协议;既然它不可靠为什么还要用呢?其一:当应用程序使用广播或多播是只能使用UDP协议;其二:由于他是无连接的,所以速度快。三、UDP协议协议的选择依据:(1)对数据可靠性的要求高可靠性要求的应用需选择TCP协议,如验证、密码字段的传送都是不允许出错的,而对数据的可靠性要求不高的应用可选择UDP传送

10、。(2)应用的实时性TCP协议在传送过程中要使用三次握手、重传确认等手段来保证数据传输的可靠性。使用TCP协议会有较大的时延,因此不适合对实时性要求较高的应用,如VOIP、视频监控等。相反,UDP协议则在这些应用中能发挥很好的作用。(3)网络的可靠性由于TCP协议的提出主要是解决网络的可靠性问题,它通过各种机制来减少错误发生的概率。因此,在网络状况不是很好的情况下需选用TCP协议(如在广域网等情况),在网络状况很好的情况下(如局域网等)应选择UDP协议来减少网络负荷。四、socket的位置应用层程序TCPUDPIP网络接口层流式套接口数据报套接口原始套接口五、I/O多路复用select()系统

11、调用提供一个机制来实现同步多路I/O。使用函数select可以同时检查多个描述符是否就绪。当有描述符就绪时,函数select成功返回。调用select()将阻塞,直到指定的文件描述符准备好执行I/O,或者可选参数timeout指定的时间已经过去。五、I/O多路复用五、I/O多路复用#include#includeintselect(intnumfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout);structtimevallongtv_sec;/secondlongtv_usec;/microsec

12、onds五、I/O多路复用参数说明:numfds是为要监视的3个文件描述符集中最大文件描述符的数值加上1。其中readfds,writefds和exceptfds为要监视的读、写和异常条件的文件描述符集合。timeout是select的时间限制返回值:当select()函数发现有文件描述符准备好之后,将返回准备好的文件描述符的数量。这时,并不知道哪个文件描述符集合中哪个文件描述符已经准备好了,FD_ISSET()将获得准备好的文件描述符信息。五、I/O多路复用timeout设置情况:null:select将一直被阻塞,直到某个文件描述符上发生了事件。0:仅检测描述符集合的状态,然后立即返回,并

13、不等待外部事件的发生。特定的时间值:如果在指定的时间段里没有事件发生,select将超时返回。五、I/O多路复用n集合变量类型:fd_set n集合变量运算宏:FD_ZERO(fd_set*set):清空一个文件描述符集;FD_SET(int fd,fd_set*set)将一个文件描述符加入一个文件描述 符集中;FD_CLR(int fd,fd_set *set)将一个文件描述符从文件描述符集 中清除;FD_ISSET(int fd,fd_set*set)判断fd是否是set集合中的一员;u例子:通过select来判断用户是否输入信息。u例子:通过select来判断套接字上是否有活动。u练习:

14、通过select来判断用户是否输入信息,如果用户在2.5秒内无输入,则提示timeout,否则显示用户的输入及输入字符个数。六、Socket选项#includesys/types.h#includeintgetsockopt(intsockfd,intlevel,intoptname,void*optval,socklen_t*optlen);intsetsockopt(intsockfd,intlevel,intoptname,constvoid*optval,socklen_toptlen);这两个函数用于设置、获得socket的各种特性,即socketoptions.sockfd是所要查

15、看的socket的filedescriptor。level是套接字级别。如果想要在套接字级别设置选项,将level设为SOL_SOCKET,如果想在底层协议级别(如TCP、UDP)设置选项,将level设为该协议的编号如SOL_TCP。optname是选项名称。optval是要设置或者获取到的选项值。optlen是选项值的长度。六、Socket选项一些层与选项的组合值:协议层选项名字类型说明SOL_SOCKETSO_REUSEADDRBOOL套接口能和已在使用的地址捆绑SOL_SOCKETSO_KEEPALIVEBOOL发送“保持活动”信息SOL_SOCKETSO_LINGERstructli

16、nger*返回当前各linger选项SOL_SOCKETSO_BROADCASTBOOL套接口设置为传送广播信息SOL_SOCKETSO_OOBINLINEBOOL在普通数据流中接收带外数据SOL_SOCKETSO_SNDBUFint发送缓冲区大小SOL_SOCKETSO_RCVBUFint接收缓冲区大小SOL_SOCKETSO_TYPEint套接口类型(如SOCK_STREAM)SOL_SOCKETSO_ERRORint获取错误状态并清除SOL_TCPSO_NODELAYBOOL禁止发送合并的Nagle算法u例子:分别创建一个TCP和UDP的socket,通过getsockopt获取这两个s

17、ocket的选项。u例子:设置socket的sendbuf和recvbuf大小。if(valsysctl_wmem_max)val=sysctl_wmem_max;set_sndbuf:sk-sk_userlocks|=SOCK_SNDBUF_LOCK;if(val*2)sk_sndbuf=SOCK_MIN_SNDBUF;elsesk-sk_sndbuf=val*2;u例子:u练习:新建一个socket,然后获取该socket的SO_TYPE、SO_STREAM以及sendbuf和recvbuf大小。u练习:新建一个socket,设置该socket的SO_REUSEADDR选项为1。telne

18、tlocalhost10013netstat-an|grep10013七、带外数据带外数据也称为TCP紧急数据。在流套接字的抽象中包括了带外数据这一概念。带外数据是每一对相连流套接字间逻辑上独立的传输通道。带外数据是独立于普通数据传送给用户的。这要求带外数据设备必须支持每一时刻至少一个带外数据消息被可靠的传送。带外数据消息至少包含一个字节。在任何时刻仅有一个带外数据信息等候发送。对于仅支持带内数据的通信协议来说(例如紧急数据是与普通数据在同一序列中发送的),系统通常把紧急数据从普通数据中分离出来单独存放。这就允许用户可以在顺序接收紧急数据和非紧急数据之间作出选择。带外数据以signal(SIG

19、URG)的方式进行处理,不影响正常TCP通信。七、带外数据TCP仅支持一个字节的紧急数据。为了产生紧急数据,在send函数中指定标志MSG_OOB。如果带MSG_OOB标志传输字节超过一个时,最后一个字节被看作是紧急数据字节。通过调用以下函数,可以安排接收一个套接字的信号。fcntl(sockfd,F_SETOWN,getpid();通过调用以下函数,可以获得当前套接字的所有权。fcntl(sockfd,F_GETOWN,0);如果采用套接字选项SO_OOBINLINE,则可在普通数据中接收紧急数据。七、带外数据fcntl函数#includeintfcntl(intfd,intcmd,./*i

20、ntarg*/);返回值:若成功则依赖于cmd,若出错则返回-1输入:fd是文件描述符cmd是命令名称。第三个参数总是一个整数。但是在作为记录锁用时,第三个参数则是指向一个结构的指针。fcntl函数有5种功能:1.复制一个现有的描述符(cmd=F_DUPFD).2.获得设置文件描述符标记(cmd=F_GETFD或F_SETFD).3.获得设置文件状态标记(cmd=F_GETFL或F_SETFL).4.获得设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN).5.获得设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW).u例子:用fcntl函数获取文件标志./a.out1temp.outu例子:客户端通过tcp协议发送带外数据给服务端。fcntl(new_fd,F_SETOWN,getpid();recv(new_fd,buff,1,MSG_OOB);send(sockfd,4,1,MSG_OOB)u练习:客户端通过tcp协议发送带外数据给服务端,服务端在普通数据流中接收带外数据,同时处理收到的SIGURG信号。u课后练习复习进程间通信及网络编程知识。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁