您的位置:首页 > 理论基础 > 计算机网络

Linux网络协议栈(一) -- socket入门(1)

2012-07-04 14:43 309 查看
1、TCP/IP参考模型

为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。



2、套接字(socket)

socket是操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序员提供的API,通过它,应用程序可以访问传输层协议。

1、socket 位于传输层协议之上,屏蔽了不同网络协议之间的差异;

2、socket是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体;

3、在Linux系统中,socket属于文件系统的一部分,网络通信可以被看作是对文件的读取,使得我们对网络的控制和对文件的控制一样方便。



2.1、套接字地址

在传输层上,通信端点可由Internet上3个参数描述:所用的协议、IP地址和端口号。这些内容由sockaddr描述:



//usr/include/sys/socket.h

typedef unsigned short sa_family_t;

//通用socket地址

struct sockaddr {

sa_family_t sa_family; /* address family, AF_xxx,协议簇*/

char sa_data[14]; /* 14 bytes of protocol address */

};

//usr/include/netinet/in.h

//INET地址簇的socket地址

struct in_addr {

__u32 s_addr;

};

struct sockaddr_in {

sa_family_t sin_family; /* Address family: AF_INET */

unsigned short int sin_port; /* Port number,端口*/

struct in_addr sin_addr; /* Internet address,IP地址*/

/* Pad to size of 'struct sockaddr' . */

unsigned char sin_zero[sizeof (struct sockaddr) -

sizeof (sa_family_t) -

sizeof (uint16_t) -

sizeof (struct in_addr)];

};




Linux 支持的套接字地址族:

套接字地址族
描述
UNIX
UNIX 域套接字
INET
通过 TCP/IP 协议支持的 Internet 地址族
AX25
Amater radio X25
APPLETALK
Appletalk DDP
IPX
Novell IPX
X25
X25
Linux 所支持的BSD套接字类型:

BSD 套接字类型
描述
流(stream)
这种套接字提供了可靠的双向顺序数据流,可保证数据不会在传输过程中丢失、破坏或重复出现。流套接字通过 INET 地址族的 TCP 协议实现。
数据报(datagram)
这种套接字也提供双向的数据传输,但是并不对数据的传输提供担保,也就是说,数据可能会以错误的顺序传递,甚至丢失或破坏。这种类型的套接字通过 INET 地址族的 UDP 协议实现。
原始(raw)
利用这种类型的套接字,进程可以直接访问底层协议(因此称为原始)。例如,可在某个以太网设备上打开原始套接字,然后获取原始的 IP 数据传输信息。
可靠发送的消息
和数据报套接字类似,但保证数据被正确传输到目的端。
顺序数据包
和流套接字类似,但数据包大小是固定的。
数据包(packet)
这并不是标准的 BSD 套接字类型,它是 Linux 专有的 BSD 套接字扩展,可允许进程直接在设备级访问数据包。
2.2、套接字操作

套接字(更确切的说是BSD套接字)为应用程序提供了基本的API,这些API是编写网络应用程序的基础。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: