1 / 23
文档名称:

Linux网络编程.doc

格式:doc   页数:23页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Linux网络编程.doc

上传人:fy3986758 2016/6/11 文件大小:0 KB

下载得到文件列表

Linux网络编程.doc

文档介绍

文档介绍:Linux 网络编程 协议概述· 网络接口层:负责将二进制流转换为数据帧,并进行数据帧的发送和接收。要注意的是数据帧是独立的网络信息传输单元。· 网络层: 负责将数据帧封装成 IP 数据报, 并运行必要的路由算法。· 传输层:负责端对端之间的通信会话连接与建立。传输协议的选择根据数据传输方式而定。· 应用层:负责应用程序的网络访问,这里通过端口号来识别各个不同的进程。 协议族· IP :负责在主机和网络之间寻址和路由数据包。· TCP : 为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。· UDP : 提供了无连接通信, 且不对传送包进行可靠的保证。适合于一次传输少量数据, 可靠性则由应用层来负责。 3. 网络基础编程 1). socket 定义在 Linux 中的网络编程是通过 socket 接口来进行的。人们常说的 socket 接口是一种特殊的 I/O ,它也是一种文件描述符。每一个 socket 都用一个半相关描述{ 协议,本地地址、本地端口} 来表示; 一个完整的套接字则用一个相关描述{ 协议, 本地地址、本地端口、远程地址、远程端口}。 socket 也有一个类似于打开文件的函数调用, 该函数返回一个整型的 socket 描述符,随后的连接建立、数据传输等操作都是通过 socket 来实现的。 2). socket 类型(1) 流式 socket ( SOCK_STREAM ) 流式套接字提供可靠的、面向连接的通信流;它使用 TCP 协议, 从而保证了数据传输的正确性和顺序性。(2) 数据报 socket ( SOCK_DGRAM ) 数据报套接字定义了一种无连接的服务, 数据通过相互独立的报文进行传输,是无序的, 并且不保证是可靠、无差错的。它使用数据报协议 UDP 。(3) 原始 socket 原始套接字允许对底层协议如 IP或 ICMP 进行直接访问, 它功能强大但使用较为不便, 主要用于一些协议的开发。 4. 地址及顺序处理 1) .地址结构相关处理(1)socket 数据结构介绍 struct sockaddr { unsigned short sa_family; /* 地址族*/ char sa_data[14]; /*14 字节的协议地址,包含该 socket 的 IP 地址和端口号。*/ }; struct sockaddr_in { short int sa_family; /* 地址族*/ unsigned short int sin_port; /* 端口号*/ struct in_addr sin_addr; /*IP 地址*/ unsigned char sin_zero[8]; /* 填充 0 以保持与 struct sockaddr 同样大小*/ }; 这两个数据类型是等效的,可以相互转化,通常 sockaddr_in 数据类型使用更为方便。在建立 socketadd 或 sockaddr_in 后, 就可以对该 socket 进行适当的操作了。(2) 结构字段结构定义头文件#include </> Sa_family: : IPv4 协议 6 : IPv6 协议 AF_LOCAL : UNIX 域协议 AF_LINK :链路地址协议 AF_KEY :密钥套接字( socket ) 2) .数据存储优先顺序计算机数据存储有两种字节优先顺序: 高位字节优先和低位字节优先。 上数据以高位字节优先顺序在网络上传输,因此在有些情况下,需要对这两个字节存储优先顺序进行相互转化。这里用到了四个函数: htons 、 ntohs 、 htonl 、 ntohl 。这四个地址分别实现网络字节序和主机字节序的转化, 这里的 h 代表 host ,n work ,s 代表 short ,l 代表 long 。通常 16位的 IP 端口号用 s 代表,而 IP 地址用 l 来代表。所需头文件#include </> 函数原型 uint16_t htons(unit16_t host16bit) uint32_t htonl(unit32_t host32bit) uint16_t ntohs(16bit) uint32_t ntohs(32bit) 函数传入值 host16bit :主机字节序的 16bit 数据 host32bit :主机字节序的 32bit 16bit :网络字节序的 16bit 32bit :网络字节序的 32bit 数据函数返回值成功:返回要转换的字节序出错: -1 注意: 调用该函数只是使其得到相应的字节序, 用户不需清楚该系统的主机字节序和网络字节序是否真正相等。如果是相同不需要转