引言
这两天学习了 《 UNIX 网络编程 》的 chapter1,2,6, 简要总结一下。
OSI 七层模型
七层网络模型,前三层为用户相关,后四层为系统内核相关。
-
应用层
-
表示层
-
会话层
-
传输层 TCP/UDP/SCTP
-
网络层 IPv4 IPv6
-
数据链路层 下面两层为设备驱动程序及硬件
-
物理层
传输层协议
TCP 是如何做到可靠性?
- 确认机制
- RTT估算
- 超时重传
- 流量控制
建立连接:三次握手
-
server listen
-
client -> server (SYNj)
-
server -> client (SYNk ACKj+1)
-
client -> server(ACKk+1)
-
建立连接
断开链接:四次挥手
这里的四次是指有四个过程,并不是一定有四个包发送,也可能被动关闭一方直接将ACK和FIN发送到主动接收方。
图待补充
主动关闭的一方在接收到FIN时进入状态 TIME_WAIT 半关闭状态
TIME_WAIT状态
主动关闭端状态,时间为2*MSL,原因如下:
- 可靠的实现了TCP全双工连接的中止
- 允许老的重复分节在网络中消逝,防止下个新的连接建立时,还收到了上个连接的报文
I/O 多路复用
多路复用存在意义:
- 存在多个描述符,如交互式输入和套接字
- 同时处理多个套接字
- 服务端处理监听套接字同时处理已连接套接字
- 服务端同时处理多个协议,TCP/UDP
I/O 模型
(图待补充)
- 阻塞式I/O
- 非阻塞I/O
- I/O复用(select函数维护多个描述符)
- 信号驱动
- 异步 AIO
POSIX 定义的同步/异步
同步: 请求进程阻塞,直到I/O操作完成
异步:请求进程不阻塞
根据该定义,前四种I/O模型,进程都是阻塞的。只有最后AIO才是异步