socket套接字
目录
socket套接字
体系结构的两种形式
几种常见的网络编程接口
socket套接字
socket常用API介绍
socket套接字
三元组【IP地址,端口,协议】
地址族结构体
套接字类型
TCP通信的实现过程
体系结构的两种形式
网络的体系结构 (Network Architecture) 是计算机网络的各层及其协议的集合,就是这个计算机网络及其构件所应完成的功能的精确定义(不涉及实现)
实现 (implementation) 是遵循这种体系结构的前提下,用何种硬件或软件完成这些功能的问题
几种常见的网络编程接口
Berkeley UNIX 操作系统定义了一种 API,它又称为套接字接口 (socket interface)
微软公司在其操作系统中采用了套接字接口 API,形成了一个稍有不同的 API,并称之为 Windows Socket
AT&T 为其 UNIX 系统 V 定义了一种 API,简写为 TLI (Transport Layer Interface)
socket套接字
socket常用API介绍
/*创建套接字*/ int socket(int domain, int type, int protocol);
/*绑定通信结构体*/ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
/*监听套接字*/ int listen(int sockfd, int backlog);
/*处理客户端发起的连接,生成新的套接字*/ int accept(int sockfd, struct sockaddr *addr,
socklen_t *addrlen);
/*向服务器发起连接请求*/ int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
socket套接字
三元组【IP地址,端口,协议】
IP地址:标识计算机
端口号:标识计算机当中的进程
协议:指定数据传输的方式
地址族结构体
//通用地址族结构体
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
};
struct sockaddr {
uint32_t s_addr;
};
struct sockaddr_in6 {
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo;
struct in_addr sin_addr;
uint32_t sin6_scope_id;
};
struct sockaddr {
unsigned char s6_addr[16];
};
//sa_family
AF_UNIX 使用本地域套接字的地址结构,用于本地通信
AF_INET 使用IPv4的通信地址结构
AF_INET6 使用IPv6的通信地址结构 ....
套接字类型
流式套接字 (SOCK_STREAM) 提供可靠的、面向连接的通信流;它使用TCP,从而保证数据传输的可靠性和顺序性
数据报套接字 (SOCK_DGRAM) 定义了一种不可靠、面向无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP
原始套接字(SOCK_RAW) 允许直接访问底层协议,如IP或ICMP,它功能强大但使用较为不便,主要用于协议开发。