UNIX SOCKET编程简介38821new.docVIP

  • 2
  • 0
  • 约4.11千字
  • 约 11页
  • 2016-10-18 发布于江西
  • 举报
UNIX SOCKET编程简介38821new.doc

/tarius.wu/articles/434.html 1 . Layered Model of Networking Socket 编程的层次模型如下图所示, 最上面是应用层,应用层下面的是 SOCKET API 层,再下面是传输层和网络层…… 实际上, Sockets API 层并不是一个真正定义的网络层次,但却很好的描述了 Socket 编程所处的位置和所扮演的角色。 TCP 状态转换图 2 .什么是 SOCKET ? 简单的, Socket 可以被定义描述为两个应用通信通道的端点。一个 Socket 端点可以用 Socket 地址来描述, Socket 地址结构由 IP 地址,端口和使用协议组成( TCP or UDP )。 3 . Socket 地址结构 网络中以主机 IP 、端口以及使用的协议表明一个网络应用。 UNIX Socket 将它们组成一个结构,统称为 SOCKET 地址结构。 3.1? IPv4 对应的 SOCKET 地址结构 通常也称为“网际 SOCKET 地址结构”,以“ socketaddr_in ”命名,定义在头文件 netinet/in.h 中。 所涉及到的数据类型: 3.2? IPv6 对应的 SOCKET 地址结构 3.3 ? 通用地址结构 当地址结构作为传递给任何一个 SOCKET 函数的参数时,任意一个 Socket 函数必须能处理每一种地址结构,为了解决这个问题,提出了使用通用套接口地址结构。当任何一个地址结构要作为指针参数传到套接口函数时,必须要显示转化为通用地址结构。 在 IPv4 应用中,使用的通用地址结构为 struct sockaddr, 定义在 sys/socket.h 中, 例如: 在 IPv6 中,提出了一种新的通用地址结构: struct sockaddr_storage 定义在netinet/in.h中。 struct sockaddr struct sockaddr_storage 的区别 !--[if !supportLists]--a.!--[endif]--struct sockaddr_storage能提供严格的结构对齐 !--[if !supportLists]--b.? !--[endif]--struct sockaddr_storage能容纳系统支持的更大的地址结构 3.4 ?Socket 4 . Client/Server Model Client/Server 的网络通信模型是使用最广最为基础的通信模型。在 Socket API 环境,其应用可以归纳为: TCP 链接建立 根据 TCP/IP 协议,函数 connect() 激发 TCP 的三路握手过程。 客户端给服务器一个 SYN(J) 信号,服务器返回一个 ACK(J+1); 然后服务器给客户端一个 SYN(K), 客户端也同样给服务器一个 ACK(K+1) ,这样就算 connect 成功。 注意:服务器返回的 SYN(K) 和 ACK(J+1) 是放在同一个分节中发给客户端的,因此链路在建立连接时只用了三个分节,故称为三路握手。 TCP 链接终止 TCP 用三个分节建立一个链接,而终止连接时需要四个分节。原因在于被动关闭链接一方需要关闭处理时间,因此 ACK 和 FIN 不能同时发给主动关闭一方。 主动关闭一方在收到 ACK 后,在等待被动关闭方发 FIN 消息这一状态称为处于 TIME_WAIT 状态。 5 Socket API 描述 5.1 创建套接字—— socket 函数 应用程序在使用套接字前,必须拥有一个套接字,系统调用 socket ()向应用程序提供 创建套接字的手段,其调用格式如下: 参数 family 指定通信发生的区域, UNIX 系统支持的地址族有: AF_UNIX,AF_INET,AF_NS 等,而 DOS 、 WINDOWS 中仅支持 AF_INET ,它是网际网区域。因此,地址族与协议族相同。 参数 type 描述要建立的套接字的类型。参数 protocol 说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为 0 ,使用默认的连接模式。根据这 3 个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。因此, socket ()系统调用实际上指定了 协议 。 5.2 指定本地址—— bind 函数 一个套接字用 socket ()创建后,存在一个名字空间(地址族),但它没有被命名。 Bind ()将套接字地址(包括本地主机地址和本断口地址)与所创建的套接字号联系起来,即将,名字赋予套接字,以指定本地半相关。其调用格式如下: 参数 socke

文档评论(0)

1亿VIP精品文档

相关文档