手头有比较多的技术书籍,弃之可惜,放之惭愧,借助空闲时间,先草读,再demo整理。
unix网络编程卷1 草读简单笔记,为下一步整理细节技术点做准备。
1:udp, tcp,sctp简述
2:telnet的使用 /etc/services
3:常见的因特网应用协议
3:字节序 以及字节序函数 ip和数值转换函数
4:tcp套接字
socket connect listen accept
fork和exec
5:tcp客户 服务端程序 信号
信号 accept等函数 底层实际是信号触发,返回EINTR (阻塞类函数)
wait waitpid 等待子进程结束
demo:服务器每来一个连接,创建子进程,父进程监听子进程的信号终止。
===>主要模拟各种,服务器进程,服务器崩溃等场景。
rst复位报文
init进程对其他进程的控制
7:套接字选项 setsockopt getsockopt
缓冲区大小 MSS SO_RCVBUF nagle算法 ack延迟算法
sctp以及相关套接字
fcntl
8: udp套接字 (DNS NFS SNMP)
udp通信前 arp的交换
udp的connect
udp缺乏流量控制 tcpdump查看相关的显示,缓冲区满了丢弃
增大udp接收缓冲区
9:SCTP套接字 (可靠的面向消息协议)
10:SCTP demo 客户端服务端例子
11:名字和地址转换
域名系统DNS
通过端口获取服务信息,主机名,ip等
getaddrinfo()
获取服务器时间的客户端,服务端代码demo
相关函数的可重入性。
dns和sendmail 的使用
12:ipv4和ipv6互操作性
13:守护进程和inetd超级服务器 (demo)
inetd超级服务器 自动启动相关的服务器 Telnet ftp
syslogd 收集日志
daemon_init 守护进程
inetd守护进程 配置后另外的终端连接能远程执行配置中的代码。 daemon_inetd
14:高级I/O 函数
套接字超时 alarm函数 信号触发 demo
sigsetjmp siglongjmp
select设置超时
SO_RCVTIMEO设置超时
recv和send最后一个参数 路由表?
readv 和writev recvmsg和sendmsg
辅助数据 tcp udp unix域
标准IO函数库: 完全缓冲,行缓冲,不缓冲。
poll,kqueue(可以设置关注事件),
T/TCP 事务目的的tcp
15:Unix域协议
unix域demo以及获取凭据 ===》进程间通信
16:非阻塞IO
相关demo 以及tcp三次握手中的rst等报文发送测试
17:ioctl操作
通过该接口可以获取主机的所有ip,设备等?
与arp相关获取硬件地址。
ioctl操作路由表
18:路由套接字
创建socket 演示操作路由表相关
sysctl 指令和函数的使用, 判断udp校验和是否开启的demo
返回所有接口
返回所有接口名字和索引 demo
19:秘钥管理套接字
IPsec ? 什么原理
demo 静态 动态
安装后自己使用?
20:广播
ipv6不支持广播
用于udp和ip
arp dhcp NTP 路由守护进程
单播的流程 目的mac地址 广播时目的mac地址全f arp ipv4 ipv6等的头标识是啥
有的系统不允许内核对广播数据进行ip分片, 大于MTU
阻塞和pselect解阻塞的demo pselect的实现demo
sigsetjmp siggetjmp 解决竞态
使用ipc 管道的方式解决竞态 demo
21:多播
多播的原理与mac的关系?
多播地址的范围
局域网上的多播和广域网上多播(路由器多播路由协议)的区别
源特定多播(相关套接字)
mcast_join 加入多播等一系列的函数 demo 主要还是setsockopt的使用
sap 会话声明多播demo
发送和接收多播 demo
SNTP 简单网络时间协议demo 毫秒级别精度
22:高级udp套接字(考虑可靠性) 不应该海量数据?
demo
应用udp的场景:支持多播广播。简单请求应答(错误检查 )。
文件传输不应该用udp,错误检查机制,流量控制,拥塞控制,慢启动逻辑等要考虑。 (有例外 http中udp传文件)
增加序号,处理超时和重传 评估因子 demo
捆绑接口地址 demo
并发udp服务器 (参考TFTP) demo (udp面向数据报 和tcp有明显差异)
ipv6分组相关 如设置地址,指定跳限,MTU,分片等demo
23:SCTP套接字
相关demo理解sctp,以及与tcp的差异和使用场景
24:带外数据(紧急?高优先级?) 实际是紧急指针
tcp带外数据的原理和demo
MSG_OOB 设置紧急数据 以及select等实现 demo
tcp带外数据 发送和接收端的demo
心跳函数 demo (用带外数据?)
带外数据使用场景 telnet rlogin ftp
25:信号驱动IO
fcntl SIGIO
udp和tcp中信号驱动作用
基于SIGIO实现udp回射程序demo
26:线程
线程系列函数 以及demo
给线程传递参数
考虑线程安全的相关函数 demo
互斥锁 条件变量 demo
27:ip选项
记录原路径?删除记录的原路径 demo 存入路径ip
ipv6头部协议 扩展首部相关
ipv6路由首部
28:原始套接字
ICMP igmp udp tcp ospf ping traceroute
原始套接字读icmp?
ping命令 icmp(支持ipv6) demo
traceroute demo
icmp守护进程 本地socket+上面两个demo吗?
29:数据链路访问
tcpdump rarp等
bpf :bsd分组过滤器 (虚拟技术)
dlpi:数据链路提供者接口
SOCK_PACKET PF_PACKET
libpcap 分组捕获函数库
libnet 分组构造和输出函数库
使用原始套接字分组捕获 校验udp的校验和字段Demo
libnet代替原始套接字 demo
公开课 libpcap的使用 处理链路访问
30:客户,服务端程序设计范式
研究不同形式的服务器。
客户端测试程序
服务器子进程方式
预先分配子进程 accept未加锁 加锁
传递描述符给子进程(管道?)
每个客户一个子线程
每个线程各自accept
主线程统一accept
31:流
getmsg putmsg ioctl
传输提供者接口 demo
汇总
ipv4 ipv6 icmpipv4 icmpipv6 协议
ipv4地址 子网地址和环回地址
ipv6地址 单播地址
ipv4映射ipv6地址
虚拟网络
使用隧道构造的虚拟网络 Mbone 封装ipv4
6bone
调试技术
getmsg putmsg
ktrace tcpdump netstat lsof
一些基础的公共的公共源码
unp.h 以及执行autoconf后生成的config.h
接下来,结合书籍配套源码,对上述简单笔记进行细节汇总。