网络层:IP协议,地址管理,路由选择 路由选择:路由器根据每一条流经路由器的数据中的目标主机地址进行路径选择 链路层: ETH协议:6字节目标-源端mac地址,2字节的上层协议,4字节帧尾 Mac地址:网卡的物理硬件地址 ARP协议:介于网络层与链路层之间的协议-通过IP地址获取MAC地址 ARP欺骗攻击:伪造ip进行ARP响应—防火墙白名单 MTU:链路层限制的数据帧大小–最大传输单元—以太网默认1500字节 Mtu对tcp影响:tcp传输会协商mss,而mss=mtu-40,往后通信每次都是从发送缓冲区取出不大于mss大小的数据进行传输,基于这个操作,tcp也会被认为在传输层会自动进行数据分段 Mtu对udp影响:udp不会协商mss,只要数据大小小于64k-28都可以进行传输,然而这个数据大小有可能会大于mtu,因此会在网络层进行数据分片,分片了则会在对端进行分片重组,然而一旦传输中任意一个分片出问题,整个报文会被丢弃 分片越多,出问题概率越高 因此在udp通信时,最好程序员在应用层就计算好每个分包大小,避免分片 其他典型协议: DNS:域名系统 作用:对域名进行解析,通过域名获取到服务器IP地址 域名:服务器的别名,通过比较容易记忆的字符串组成 域名服务器等级:根->顶级->二级 域名等级:顶级(使用性质,地址划分),二级 域名解析流程: 1. 浏览器缓存->2.本机hosts文件->3.本地域名服务器 4.根域名服务器->5.顶级域名服务器->… ICMP/ping,NAT/NAPT,代理服务 高级IO:四种典型IO,多路转接模型 四种典型IO: 阻塞IO,非阻塞IO,信号驱动IO,异步IO 阻塞:为了完成一个功能,发起调用,若不具备完成条件,则调用一直等待 非阻塞:发起调用,若不具备完成条件,则调用立即报错返回 阻塞与非阻塞:通常用于讨论接口特性,区别在于发起调用后是否会立即返回 同步:功能自己完成,一个完成之后才能完成下一个 异步:功能别人完成,功能完成流程并非按发起时序完成 异步阻塞与异步非阻塞:区别在于进程是否等待系统完成任务。 同步与异步:通常用于讨论任务完成流程,区别在于功能是否由自身完成 同步流程清晰简单,但是效率相较于异步较低 异步对资源利用率更高,效率更高,但是流程较为复杂; IO多路转接模型: 作用:IO多路转接模型,就是针对大量描述符进行IO就绪事件监控,让进程能避免对没有就绪的描述符进行操作,提高IO效率,避免对没有就绪的描述符进行操作而导致的阻塞。 实现:selet poll epoll Select模型: 流程:1.定义指定事件的描述符集合,添加要监控的描述符到其中 2.将集合拷贝到内核进行IO就绪事件监控 监控调用返回前,将集合中没有就绪的描述符移除 3.进程中判断哪个描述符还在集合中,确定哪个描述符就绪了什么事件 接口:
- fd_set set; void FD_ZERO(fd_set *set);清空集合
void FD_SET(int fd,fd_set *set);–添加描述符 2. int select(int nfds,fd_set *rfds,fd_set *wfds,fd_set *efds,timeval *t) 3. Int FD_ISSET(int fd,fd_set *set); 4. Void FD_CLR(int fd,fd_set *set); 多路转接模型是针对一个或多个描述符进行IO就绪事件监控的功能 通常应用于tcp服务器端,针对大量套接字描述符进行监控 让程序能够仅仅针对就绪的描述符进行操作,进而提高处理效率 而udp服务端大多针对单套接字进行操作,大多数情况也会用到多路转接模型,因为多路转接模型不但可以进行IO就绪事件监控,还可以进行超时控制 Select 特性总结: 优点:跨平台移植性较好 缺点: - select所能监控的描述符有数量上限,上限取决于宏_FD_SETSIZE
- select每次进行监控都要重新向集合中添加描述符(每次都会修改)
- select监控原理是在内核中进行轮训遍历
- 将集合中描述符遍历一遍看看有没有就绪的
- 有就直接移除未就绪返回,没有则挂起等待
- 有描述符就绪/超时后被唤醒,重新遍历一遍移除未就绪后返回
4.select返回的是就绪集合,需要用户判断哪个描述符还在哪个集合中才能确定哪个描述符就绪了哪个事件
|