TCP/IP 协议栈
应用层:http,https,FTP,DNS 等
传输层:TCP,UDP
网络层:ICMP,ARP,RARP,IP
网络接入层:
常用端口:http:tcp:80,https:tcp:443,DNS:udp:53
TCP 与 UDP
TCP 是面向连接的全双工的可靠数据传输服务,UDP 是无连接的报文服务
为保证全双工,TCP 建立连接需要 3 次握手(SYN,SYN+ACK,ACK),4 次挥手(FIN,ACK,fin,ack)
socket,SOCK_STREAM 代表 TCP,SOCK_DGRAM 代表 UDP
http 和 https
http 数据是明文传输,https 是加密的
https 需要服务端安装证书
服务器收到客户端 https 请求后,会把证书公钥发给客户端
客户端利用公钥将密钥加密后发给服务器
服务器利用私钥解密得到密钥,然后利用密钥对数据解密后传输
服务器和客户端之间的数据需要密钥进行加密,但是协商密钥的过程有可能被窃取,所以通过证书的方式把密钥加密,保证密钥协商过程安全
IO 多路复用
五种 IO 模型
- 阻塞,调用 recvfrom 等,会被阻塞
- 非阻塞,无论数据是否准备好都立即返回,可以设置 socket 为非阻塞
- IO 多路复用,select(底层是数组),poll(底层是链表),epoll(底层是红黑树),可以等待多组数据
- 异步 IO,有 2 种,glibc 中通过创建工作线程实现异步 IO(aio_read 等函数),内核提供的(io_setup)