欢迎来到天天文库
浏览记录
ID:11435379
大小:446.50 KB
页数:11页
时间:2018-07-12
《unix socket编程简介38821new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、http://www.cnitblog.com/tarius.wu/articles/434.html1.LayeredModelofNetworkingSocket编程的层次模型如下图所示,最上面是应用层,应用层下面的是SOCKETAPI层,再下面是传输层和网络层……实际上,SocketsAPI层并不是一个真正定义的网络层次,但却很好的描述了Socket编程所处的位置和所扮演的角色。TCP状态转换图2.什么是SOCKET?简单的,Socket可以被定义描述为两个应用通信通道的端点。一个Socket端点可以用Socket地址来描述,Socket地址结构由IP地址,端口和
2、使用协议组成(TCPorUDP)。3.Socket地址结构网络中以主机IP、端口以及使用的协议表明一个网络应用。UNIXSocket将它们组成一个结构,统称为SOCKET地址结构。3.1 IPv4对应的SOCKET地址结构通常也称为“网际SOCKET地址结构”,以“socketaddr_in”命名,定义在头文件中。所涉及到的数据类型:3.2 IPv6对应的SOCKET地址结构3.3 通用地址结构当地址结构作为传递给任何一个SOCKET函数的参数时,任意一个Socket函数必须能处理每一种地址结构,为了解决这个问题,提出了使用通用套接口地址结构
3、。当任何一个地址结构要作为指针参数传到套接口函数时,必须要显示转化为通用地址结构。在IPv4应用中,使用的通用地址结构为structsockaddr,定义在中,例如:在IPv6中,提出了一种新的通用地址结构:structsockaddr_storage定义在中。structsockaddr和structsockaddr_storage的区别a.structsockaddr_storage能提供严格的结构对齐b. structsockaddr_storage能容纳系统支持的更大的地址结构3.4 Socket地址结构的比较4.Client/ServerModelClient/Server的网络通信模型是使用最广最为基础的通信模型。在SocketAPI环境,其应用可以归纳为:TCP链接建立根据TCP/IP协议,函数connect()激发TCP的三路握手过程。客户端给服务器一个SYN(J)信号,服务器返回一个ACK(J+1);然后服务器给客户端一个SYN(K),客户端也同样给服务器一个ACK(K+1),这样就算connect成功。注意:服
5、务器返回的SYN(K)和ACK(J+1)是放在同一个分节中发给客户端的,因此链路在建立连接时只用了三个分节,故称为三路握手。TCP链接终止TCP用三个分节建立一个链接,而终止连接时需要四个分节。原因在于被动关闭链接一方需要关闭处理时间,因此ACK和FIN不能同时发给主动关闭一方。主动关闭一方在收到ACK后,在等待被动关闭方发FIN消息这一状态称为处于TIME_WAIT状态。5SocketAPI描述5.1创建套接字——socket函数应用程序在使用套接字前,必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下:参数family指定通信
6、发生的区域,UNIX系统支持的地址族有:AF_UNIX,AF_INET,AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。参数type描述要建立的套接字的类型。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。根据这3个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。因此,socket()系统调用实际上指定了"协议"。5.2指定本地址——bind函数一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名。Bi
7、nd()将套接字地址(包括本地主机地址和本断口地址)与所创建的套接字号联系起来,即将,名字赋予套接字,以指定本地半相关。其调用格式如下:参数socketfd是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。参数myaddr是赋给套接字socketfd的本地地址(名字),其长度可变,结构随通信域的不同而不同。addrlen表明了name的长度。进程可以把一个特定的IP地址捆绑到它的套接口上,但此IP地址必须是主机的一个接口。对于TCP客户端,这就为在此套接口上发送的IP数据包分配了源IP地址。对于服务器端,这样做就限制了
此文档下载收益归作者所有