目录
- UNIX为了降低网络编程的难度,秉承着linux风格:一切皆文件,将网络编程抽象了一个文件叫socket
-
SOCKET
- 抽象层,介于应用层和传输层之间的
- 有了套接字,网编开发就转化为了io操作
- 更多的socket描述man 7 socket
-
网络开发接口
- socket(2)创建套接字文件
- connect(2)与对端的套接字连接
- bind(2)将套接字与本地地址绑定
- listen(2)使套接字处于监听状态
- accept(2)接受对方的连接请求
- socketpair(2)返回两个已经连接好的匿名套接字(类似管道)
- send(2), sendto(2), sendmsg(2), write(2) 发送数据包
- recv(2), recvfrom(2), recvmsg(2), read(2) 接受数据包
- getsockopt(2), setsockopt(2)获取、设置套接字选项
- close(2)关闭套接字
- 套接字地址Socket address structures
- 每一个域都有不一样的地址类型,ipv4的地址man 7 ip
-
套接字类型
- UNIX域套接字
- 流式套接字(Stream Socket):SOCK_STREAM
- 数据报式套接字(Datagram Socket):SOCK_DGRAM
-
常见套接字类型详解
-
流套接字(Stream Socket):也称为面向连接的套接字。流套接字基于 TCP 协议,提供可靠的、面向连接的数据传输。它确保数据按顺序到达目标,并进行错误检测和重传。流套接字适用于需要稳定、可靠传输的应用,如文件传输、电子邮件等。在套接字函数中使用 SOCK_STREAM 参数可以创建流套接字。
-
数据报套接字(Datagram Socket):也称为无连接的套接字。数据报套接字基于 UDP 协议,提供了一种简单、高效的数据传输方式。与流套接字不同,数据报套接字不维护连接状态,每个数据包独立发送,没有重传机制和数据顺序保证。数据报套接字适用于实时性要求较高的应用,如视频传输、游戏等。在套接字函数中使用 SOCK_DGRAM 参数可以创建数据报套接字。
-
原始套接字(Raw Socket):原始套接字提供对网络协议的直接访问,可以自定义协议头和数据包内容。原始套接字通常用于网络测量、嗅探和伪造数据包等需要底层网络控制的场景。使用原始套接字需要特殊权限和较高的网络知识,因为它绕过了操作系统的网络协议栈。在套接字函数中使用 SOCK_RAW 参数可以创建原始套接字。
-
Seqpacket 套接字(Sequenced Packet Socket):Seqpacket 套接字提供了一种有序、可靠的面向连接的数据传输方式。它在 TCP 的基础上添加了消息边界的概念,保证了消息的完整性和顺序。Seqpacket 套接字适用于需要按消息划分的应用,如多人聊天、实时通信等。在套接字函数中使用 SOCK_SEQPACKET 参数可以创建 Seqpacket 套接字。
-