



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(1)什么是套接口(Socket) ?Socket(套接字)是BSD提供的网络应用编程界面(API),Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。现在它已经是网络编程中的标准。Socket是一种特殊的进程间通信方式,不同机器上的进程都可以使用这种方式进行通信,网络中的数据传输是一种I/O操作。Socket也是一种文件描述符,它代表了一个通信管道的一个端点。read,write,close操作可应用于Socket描述符。在socket类型的文件描述符上,可以完成建立连接,数据传输等操作。常用的Socket类型有两种:流式Socket-SOCK_STREAM,提供面向连接的Socket数据报式Socket-SOCK_DGRAM,提供面向无连接的Socket(2)什么是套接字(Sockfd) ?创建套接字是进行任何网络通信时必须做的第一步,创建一个用于网络通信的I/O描述符(套接字),相当于在对文件读写前先用open获取文件描述符。为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。Socket函数原型为:int socket(int family, int type, int protocol);family:协议族 常用的是AF_INET,代表的是IPv4协议,AF_INET6是IPv6协议type:套接口类型 SOCK_STREAM SOCK_DGRAMprotocol:协议类别,一般为0就可以了。调用socket函数返回一个int型的socket描述符。Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上建立一个Socket意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表我们可以认为套接字是将Unix系统的文件操作推广到提供点对点的通信。如果要操作文件,应用程序会根据应用程序的需要为之创建一个套接字。操作系统返回一个整数。应用程序通过引用这个正数来使用这个套接字。文件描述符和套接字描述符的不同点在于,在程序调用open()时,操作系统将一个文件描述符绑定到一个文件或设备,但在创建一个套接字时,可以不将它绑定到一个目标地址。程序可以在任何想要用这个套接字的时候指定目标地址 (3)什么是端口(Port)?操作系统的TCP模块为每一个网络应用进程指定一个端口,用以标识并区分系统中同时运行的各个网络应用程序,TCP port本质是一个非负的整数,取值范围 0 65535(4)两台主机在通信时,是否知道对方的Sockfd是多少?主机需要记录对方主机的哪些信息?TCP模块直接和应用进程交换数据?知道,客户端调用connect(sockfd, (struct sockaddr *)&servaddr,sizeof(servaddr)获得套接字,服务器调用int accept(int sockfd, struct sockaddr* clientaddr, int * addrlen)获得客户端的套接字而不论主机或服务器运行什么操作系统,只要其使用TCP/IP协议,各种服务端口号是一样的,这就是我们为什么能在WINXP的系统上能打开用UNIX作的服务器上的网站 (5)通信连接建立的两个步骤总结:第一步:连接建立前的初始化第步:client/server创建各自的socket第步:client/server完成各自socket中的4-tuple填充第步:server通知kernel : 准备在创建好的socket上第二步: 3-way handshake 第步:client向server发送syn请求包第步:server收到syn后,向client发送syn+ack包第步:client向server发送ack包(6)发送数据函数write()的本质,接收数据函数read()的本质向套接口的输出缓冲中写数据,等待发送;向套接口的输入缓冲区中读数据,交给应用程序;(7)System calls relevant to networking(一些linux网络API)Socket/创建套接口,返回一个套接口描述字Connect/ClientBind/:bind为套接口分配一个本地协议地址client通常不必调用bind:客户端的端口号是系统随机分配的,不需要固定的端口号,所以不需要调用bind()Listen:listen(sockfd, 5)队列满了,socket如何响应新的syn?服务器在socket创建后创建了两个队列,用来响应客户端发来的连接请求,分别是:1) 未完成连接队列(一个S Y N已经到达、但三次握手还没有完成的连接)2) 已完成连接队列(三次握手已完成、内核正等待进程执行a c c e p t调用)如何请求队列已满。则T C P丢弃入连接请求,等待有进程完成三次握手进入已完成连接队列之后,在重新响应新的SYNAccept:server进程接着listen之后调用accept等待client的连接请求,并返回该连接的套接字Send/发送数据:如果socket output buffer已经没有剩余空间,send调用将会一直阻塞(block),或者说调用send的进程会一直sleep,直到buffer腾出空间Recv:如果socket input bufffer没有数据,recv调用将在数据到来前一直block,即进程一直sleeprecv调用中虽然指定了期待接收的字节数len, 但recv方法可能在未读取到len个字节的信息就返回:TCP是字节流协议的特征,读取中可能会发生异常:比如从网络流中读,网络可能中断;从文件系统读,可能会被打断(文件被移动或修改)。这样就无法保证能读len个字节close / closesocket/关闭套接口Close:TCP套接口的close缺省功能是将套接口做上“已关闭”标记,并立即返回到进程。这个套接口描述字不能再为进程使用,但TCP将试着发送已排队待发的任何数据,然后按正常的TCP连接终止序列进行操作。Shutdown:int shutdown(int sockfd, int howto);函数的行为依赖于参数howto的值:(1)SHUT_RD:关闭连接的读这一半,不再接收套接口中的数据且留在套接口缓冲区中的数据都作废。进程不能再对套接口任何读函数。调用此函数后,由TCP套接口接收的任何数据都被确认,但数据本身被扔掉。(2)SHUT_WR:关闭连接的写这一半,在TCP场合下,这称为半关闭。当前留在套接口发送缓冲区中的数据都被发送,后跟正常的TCP连接终止序列。此半关闭不管套接口描述字的访问计数是否大于0。进程不能再执行对套接口的任何写函数。(3)SHUT_RDWR:连接的读这一半和写这一半都关闭。这等效于调用shutdown两次:第一次调用时用SHUT_RD,第二次调用时用SHUT_WRSelect:int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);返回:准备好描述字的正数目,0超时,-1出错。fcntlGetsockname,Getpeername:int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);getsockname函数返回与套接口关联的本地协议地址,getpeername函数返回与套接口关联的远程协议地址,addrlen是值-结果参数使用场合: 在不调用bind的TCP客户,当connect成功返回后,getsockname返回分配给此连接的本地IP地址和本地端口号; 在以端口号为0调用bind后,使用getsockname返回内核分配的本地端口号; getsockname可用来获取某套接口的地址族; 在捆绑了通配IP地址的TCP服务器上,当连接建立后,可以使用getsockname获得分配给此连接的本地IP地址;Getsockopt/setsockoptint getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);返回:0OK,-1出错。sockfd必须是一个打开的套接口描述字;level(级别)指定系统中解释选项的代码:普通套接口代码或特定于协议的代码);optval是一个指向变量的指针;此变量的大小由最后一个参数决定。对于某些套接口选项,什么时候进行设置或获取是有差别的。下面的套接口选项是由TCP已连接套接口从监听套接口继承来的:SO_DEBUG;SO_DONTROUTE;SO_KEEPALIVE;SO_LINGER;SO_OOBINLINE;SO_RCVBUF;SO_SNDBUF。如果想在三路握手完成时确保这些套接口选项中的某一个是给已连接套接口设置的,我们必须先给监听套接口设置此选项(8)Socket 通信流程总结附:四川大学2012年网络编程部分考试题目一,名词解释1. 三路握手2. 未完成队列3. 并发服务器二,下列应用更适合用TCP or UDP协议,并给出理由1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年第2批次浙江宁波前湾产业集团有限公司招聘9人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025福建厦门市集美区幸福幼儿园招聘1人模拟试卷(含答案详解)
- 2025年甘肃省武威市事业单位招聘628人【教育岗48人】模拟试卷及一套参考答案详解
- 2025江苏宿迁市泗洪县卫健系统面向社会招聘工作人员5人模拟试卷有完整答案详解
- 安全培训教室证书课件
- 2025年5月四川西南石油大学考试招聘事业编制辅导员15人考前自测高频考点模拟试题及一套完整答案详解
- 安全培训教学资料课件
- 2025辽宁本溪高新区国有企业招聘6人模拟试卷及完整答案详解
- 2025北京大学医学部总务处房地产管理中心宿舍管理员招聘1人考前自测高频考点模拟试题及完整答案详解
- 山西省【中职专业高考】2025年中职高考对口升学(理论考试)真题卷【医药卫生大类】模拟练习
- CNN 卷积神经网络介绍
- 北师大版五年级上册数学《练习四》
- 新概念英语第二册优质课件Lesson5 NCE2新概念2
- 铸剑先生行为分析技术
- 11、2015年10月25日广东省直机关公开遴选公务员笔试真题解析
- 有理数的乘法说课课件(说课一等奖)
- 口腔颌面外科学第十章 口腔颌面部损伤
- JJG 520-2005粉尘采样器
- stata回归结果详解-stata回归解释
- 审计综合实训(周海彬)答案项目三+货币资金审计程序表
- 药品经营质量风险分析评估报告
评论
0/150
提交评论