Linux网络协议栈(一)——Socket入门(1)
来源:互联网 发布:办公室平面图设计软件 编辑:程序博客网 时间:2024/06/15 14:17
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是编写网络应用程序的基础。
- Linux网络协议栈(一)——Socket入门(1)
- Linux网络协议栈(一)——Socket入门(1)
- Linux网络协议栈(一)——Socket入门(1)
- Linux网络协议栈(一)——Socket入门(1)
- Linux网络协议栈(一)——Socket入门(1)
- Linux网络协议栈(一)——Socket入门(2)
- Linux网络协议栈(一)——Socket入门(2)
- Linux网络协议栈(一)——Socket入门
- Linux网络协议栈(一)——Socket入门(2)
- Linux网络协议栈(一) -- socket入门
- Linux网络协议栈(一) -- socket入门(1)
- Linux网络协议栈(一) -- socket入门(2)
- 【Linux 内核网络协议栈源码剖析】socket.c——BSD Socket层(1)
- 【Linux 内核网络协议栈源码剖析】socket.c——BSD Socket层(1)
- 【Linux 内核网络协议栈源码剖析】socket.c——BSD Socket层(1)
- Linux内核网络协议栈8—socket监听
- linux网络协议栈-socket
- Socket网络编程(一)入门及UDP协议实例
- 用vector创建二维数组
- 关于Adater中getView()方法的convertView参数的个人理解
- js闭包
- shift and与shift or字符串匹配算法
- 归并排序
- Linux网络协议栈(一)——Socket入门(1)
- Android仿人人客户端(v5.7.1)——新鲜事之下拉列表(过滤项列表)
- Hibernate缓存
- 关于字符集和编码
- Linux网络协议栈(一)——Socket入门(2)
- struts2文件上传
- 马云专访全文:商业王国、孤独感、管理艺术
- 最小生成树之Prim算法的学习心得与个人总结
- struts2整合json出现no result type defined for type 'json'的解决方法