《UNIX网络编程 卷1 套接字联网API(第3版)》读书笔记
OSI
传输层
socket 编程
struct sockaddr_in {
short int sin_family; // 地址族,始终设置为 AF_INET
unsigned short int sin_port; // 端口号,以网络字节序表示
struct in_addr sin_addr; // IPv4 地址,以网络字节序表示
unsigned char sin_zero[8]; // 未使用的字段,通常设置为全零
};
struct in_addr {
unsigned long int s_addr; // IPv4 地址,以网络字节序表示
};
struct sockaddr {
unsigned short sa_family; // 地址族,如 AF_INET 表示 IPv4 地址族
char sa_data[14]; // 地址信息
};
函数
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
TCP
TCP client / server
I/O 复用
UDP
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
高级 UDP
可靠性:
- 超时和重传:用于处理丢失的数据报
- 请求丢失
- 应答丢失
- RTO 太小
- 序列号:供客户验证一个应答是否匹配相应的请求
RTO: 重传超时(retransmission timeout)
信号驱动 IO
- 大部分左侧
- NTP 网络时间协议,英文名称:Network Time Protocol 使用右侧