简介
bzero(&p, size); // 功能等效memset(&p, 0x00, size)
inet_pton(AF_INET, input_str, &servaddr.sin_addr); // 地址转换,将点分十进制转换为正确格式,支持ipv6
- TCP本身并不提供记录结束标志,如果应用程序需要确定记录的边界,需要自己实现。
传输层
概述
- TCP:传输控制协议,是一个复杂的、可靠地字节流协议
- UDP:用户数据协议,是一个简单的、不可靠的数据报协议
- SCTP:流控制传输协议, 是一个可靠的传输协议,提供消息边界、传输级别多宿支持、将头端阻塞减少到最小的一种方法
- BPF:BSD分组过滤器
- DLPI:数据链路提供者接口
- IPv4:网际协议版本4,使用32位地址
- IPv6:网际协议版本6,使用128位地址
- ICMP:网际控制消息协议
- IGMP:网际组管理协议,用于多播
- ARP:地址解析协议,把一个IPv4地址映射成一个硬件地址
- RARP:反向地址解析协议,把一个硬件地址映射成一个IPv4地址
- MSL:最长分节生命期,表示IP数据报能够在英特网中存活的最长时间
UDP(RFC 768)
TCP(RFC 793 1323 2581 2988 3390)
SCTP(RFC 2960 3309 3286)
- TCP也不能被描述成是100%可靠的协议,它提供的是可靠传递或故障的可靠通知
TCP连接的建立和终止
三路握手
- 服务器的被动打开:socket、bind、listen
- 客户端的主动打开:connect,客户TCP发送一个SYN分节,里面包含将要建立的连接中的数据的初始序列号
- 服务器在单个分节中发送SYN和对客户SYN的ACK
- 客户必须确认服务器的SYN
连接终止
- 应用进程主动关闭:close,发送一个FIN分节,表示数据发送完毕
- 对端被动关闭:接收到FIN分节,由TCP确认
- 接收到FIN分节的进程调用close关闭套接字,发送一个FIN分节
- 原发送端确认这个FIN分节
异常终止套接字也将发送一个FIN分节
TIME_WAIT状态的持续时间为2MSL
SCTP关联的建立和终止
四路握手
- 服务器的被动打开:socket、bind、listen
- 客户端的主动打开:connect或者发送消息进行主动打开,客户SCTP发送一个INIT消息,包含客户的信息
- 服务器回复INIT ACK消息确认,包含服务器的信息和一个状态cookie
- 客户回复一个COOKIE ECHO消息回射服务器的状态cookie
- 服务器以一个COOKIE ACK消息确认客户端
端口号
IANA众所周知端口 IANA注册的端口 IANA动态或私用端口
|<-------------------------->| |<----------------------------->| |<-------------------->|
1 1023 1024 49151 49152 65536
套接字对
(TCP) 是一个定义该连接的两个端点的四元组:本地IP、本地TCP端口号、外地IP、外地TCP端口号
(SCTP) 是一个定义该关联的两个端点的四元组:一组本地IP、一个本地TCP端口号、一组外地IP、一个外地TCP端口号
缓冲区大小和限制
- IPv4数据报的最大大小为65536字节,因为长度字段占据16位
- IPv6数据报的最大大小为65575字节,增加了40字节的IPv6首部
- MTU:最大传输单元