第56章 SOCKET简介
1. socket类型:流和数据包,对应TCP和UDP
2. 系统调用流程
socket、bind、listen、accept、connect
3. listen:一个已经调用过connect或accept的socket不能再调用listen
未决的socket连接:调用connect后,服务端的socket未accept,导致被阻塞
4. accept:直到对端connect,否则一直阻塞
关键:accept又会创建一个新socket (有别于socket调用返回的socket:监听socket和连接socket)
linkexin.github.io/notes/%E7%9…
第58章 SOCKET:TCP IP协议简介
1. 分层
2. 数据链路层
MTU
3. 网络层
无连接、不可靠(无序,可能丢,可能重复)
ip报,根据MTU分段,传输层要尽量避免分段的发生
4. 传输层
UDP:无连接不可靠,如何避免IP分段
TCP:连接建立、ack、重传、超时、seq、流量控制(防止打挂接收方)、拥塞控制(防止打挂网络)
第60章 SOCKET:服务器设计
1. 并发型
服务器主进程,创建子进程/线程服务于每个客户端请求
2. 实践:fork后,父子进程共享监听和连接socket,父进程要close连接socket,否则socket fd永远无法释放;子进程close监听socket
3. 子进程pool:父进程创建监听socket,然后有请求时从pool选一个子进程,子进程进行accept
4. 一个进程如何处理多个客户端请求?IO多路复用
第61章 SOCKET:高级主题
1. 流式(TCP)socket IO部分写和部分读问题(循环)
2. shutdown调用,半关闭。和close区别:shutdown会影响其他使用该socket的进程,shutdown不会关闭socket的df
最常用的是客户端关闭写端,让对端感知写入结束了
3. recv send调用
4. 零拷贝 sendfile
sendfile目前只能从文件向socket传,反之不行,两个socket间互传也不行
5. 获取本端、对端socket信息
6. TCP协议深入理解
第63章 其他IO选型
1. IO多路复用(select, poll)、信号驱动、epoll 的核心涉及思路:同时检查多个文件描述符,看是否有文件描述符准备好。它们不会进行实际的IO操作,只是检查文件描述符是否就绪
2. 水平触发和边缘触发:
水平触发:任意时刻都可以检查文件描述符是否处于就绪状态,所以无需在文件描述符就绪后立刻进行IO操作
边缘触发:只有当I/O状态改变时,才触发事件,才可以检查文件描述符是否处于就绪状态
两种方式都应该结合非阻塞IO使用,因为文件描述符就绪状态可能在接受通知和执行IO中间发生变化,不适合用阻塞IO
3. IO多路复用
select系统调用:直到一个或多个文件描述符就绪返回,否则一直阻塞
poll系统调用:和select相似,只是api不同
判定文件描述符就绪的标准:调用IO函数不被阻塞即可认定,但不保证数据传输能否成功
当多个文件描述符分布不密集时,poll性能好于select,否则两者性能接近。当文件描述符数量过多时,性能都很差
4. 信号驱动IO
什么时候会触发信号发送
为什么性能好于select和poll:内核可以记住要检查的文件描述符
5. epoll