Linux知识点
1.网络编程
提供进程间通信
1、网络 :由若干结点和链接这些节点的链路组成(计算机、交换机、路由器)
目的:进行信息交互、资源共享
2、互联网:多个网络连接起来构成互联网
1.1 IP地址
1、ip地址:唯一标识一台主机
端口号:在主机上标识一个进程
2、套接字地址结构:
- 创建套接字:socket()
- 确定进程:ip+port
- 网络字节序列:大端
1.2 协议
一组约定,规则
1、分层:
tcp/ip 模型:数据链路层->网络层->传输层->应用层
网络层:ip
传输层:tcp、udp
应用层:http
2、为什么分层
将大问题分模块,小模块易于实现。分为不同的层,每一层采用合适的办法解决该层的问题,实现起来更灵活。
2.编程流程
2.1 TCP服务器客户端编程流程
tcp特点:面向连接的,可靠的(应答确认,超时重传,滑动窗口进行流量控制,乱序重排,去重),流式服务
connect():由客户端程序执行,开始发起连接,也就是开始进行三次握手
send():
查看接收/发送缓冲区:netstat -natp
端口:小于1024是知名端口(管理员)
5000以内,保留的端口,
5000以上,临时端口
close():
四次挥手
也可以三次完成
1、客户端连接在收到服务器的结束报文段后,并没有直接进入CLOSED状态,而是转移到TIME_WAIT状态
TIME_WAIT状态存在的原因:
- 可靠的终止TCP连接
- 保证让迟来的TCP报文段有足够时间被识别丢弃
2.2 UDP 服务器客户端编程流程
udp特点:无连接,不可靠,数据报
send:发送出去就不管,实时性,可能会丢包
2.3 HTTP(应用层协议)
超文本传输协议
长链接:两个以上的请求可以复用同一个连接
短连接:发送一个请求,就会close()
2.4 I/O复用
方法: select poll epoll
poll和epoll的区别:
poll(select):
- 每次循环都需要向内核空间拷贝数据
- 内核实现:轮询,O(n)
- 遍历所有描述符 O(n)
epoll(处理大量描述符):
创建:epoll_creat、epoll_ctl、epoll_wait
- 创建内核时间表,每个描述符只需要拷贝一次
- 内核实现:注册回调函数O(1)
- 用户检索到就绪面描述符O(1)
- LT:一直提醒,直至实现
- ET:只提醒一次
2.5守护进程编程流程
守护进程是在后台运行不受终端控制的进程
- 先fork()再退出父进程,变为普通的组员进程
- 调用setsid(),成功创建新的会话
- fork()退出父进程(为了丢掉组员进程身份)
- chdir(“/”)更改工作路径
- umask(0)清除掩码(去除权限)
- close 关闭描述符
- 处理僵死进程
今天也要好好学习呀~