alin的学习之路:面试题 计算机网络相关
alin的学习之路:面试题 计算机网络相关
介绍下proactor和reactor
- reactor:同步IO
- proactor:异步IO
- Reactor框架中用户定义的操作是在实际操作之前调用的。比如你定义了操作是要向一个SOCKET写数据,那么当该SOCKET可以接收数据的时候,你的操作就会被调用;而Proactor框架中用户定义的操作是在实际操作之后调用的。比如你定义了一个操作要显示从SOCKET中读入的数据,那么当读操作完成以后,你的操作才会被调用。
reactor的组成
Reactor模式是基于事件驱动的分发处理模型,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers,这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler。
Handler
Synchronous Event Demultiplexer(同步事件分离器)
Event Handler(事件处理器)
ConCrete Event Handler(具体事件处理器)
Initiation Dispatcher(初始分发器)
TIME_WAIT危害
在高并发服务器上,如果每一个socket断开连接后都需要等待TIME_WAIT时长,又因为文件描述符的最大个数是有限制的,当并发量很大时,会造成文件描述符使用满的情况,那么这时新的socket就无法接入了
如何避免:
//设置端口复用 int opt = 1; setsockopt(SOC_SOCKET, SO_REUSEADDR, (void*)&opt, sizeof(opt));
TIME_WAIT时长,为什么?
- TIME_WAIT时长出现在主动关闭端收到对端发来的FIN并发送了ACK应答后,会等待TIME_WAIT时长后才关闭
- 目的是为了防止主动关闭端发送的ACK对端没有收到,如果没有收到的话对端会重新发送FIN,主动端可以再发送一次ACK
IP为什么要分片
- 数据分段增加了网络的传输效率。分段减小了数据传输时每一块的大小,如果当数据传输出现丢失的情况,只重发丢失的部分即可,而不用整个IP重新发送。
项目中说用到线程池,开多大,为什么运用线程池?
- 线程池可以用来提高程序的效率,每当有一个任务需要处理时,就需要一个线程,如果频繁的创建一个线程,回收一个线程,会频繁从用户空间切换到内核空间,会很浪费CPU的时间。
- 那么使用线程池的话,一次性创建多个线程,减少了进出内核来频繁创建线程的时间。
select和epoll区别
- select
- select是将三个集合进行分离,读集合、写集合和事件集合。select函数返回的是发送事件的个数,并不知道都有哪些文件描述符发生了事件,所以还需要维护一个监听事件的最大文件描述符以遍历使用。
- select跨平台,最大文件描述符1024个。
- epoll
- epoll只支持Linux下
- 可以突破1024文件描述符限制
- epoll返回一个结构体数组,结构体中的属性对应其事件,同时还包含对应的文件描述符
- select
select什么情况返回0
- select的最后一个参数代表监听的时间,当超时,返回0
epoll可读情况有哪些
- 如果epoll是一个服务器的话
- 监听套接字监听到客户端连接
- 通信套接字进行数据的发送
- 客户端断开连接
- 如果epoll是一个服务器的话
什么时候需要TCP四次挥手?
- 已经建立起连接的两端,其中一端主动发起断开连接
如何设置非阻塞
int flag = fcntl(fd, F_GETFL); flag |= O_NONBLOCK; fcntl(fd, F_SETFL, flag);
什么是零拷贝?
数据没有发生用户空间缓冲区到内核空间缓冲区还有磁盘空间的拷贝
零拷贝的效率很高
tcp与udp的区别以及应用场景
- tcp是面向连接的可靠的数据报传递,udp是无连接的不可靠的数据报传递。
- tcp应用在数据传递要求安全完整,不追求效率。–大数据传输
- udp应用在时效性高的场景,稳定性其次。–视频通话
如何设计一个可靠的udp
- 设计重发机制
- 设计错序重排机制
粘包如何解决
- 在数据前面加上一个固定长度的头,这个头描述后面的数据的长度。
讲一下拥塞控制和流量控制
- 流量控制是端到端的控制,A向B发送数据,A发送得太快导致B来不及接受,从而A调整发送窗口,B调整接收窗口。原理就是通过滑动窗口来改变或实现。
- 拥塞控制主要是发送端主动调整发送策略的过程。当A.B两者之间的网络出现堵塞导致丢包,传输过慢,为了防止过多的数据注入到网络,发送端减小自己的发送包速率,并通过慢开始,快重传、快恢复等算法来控制发送速率。
http和https区别
- https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
http协议格式,几种方法,功能是什么
- 请求
- 几种方法:GET (查看)、POST(添加)、PUT(修改)、DELETE(删除)
- 请求行:方法 空格 请求的数据 空格 http协议版本号
- 请求头:key:value
- 空行:\r\n
- 请求包包体
- 应答
- 应答行:http协议版本号 空格 状态码 状态描述
- 应答头
- 回发的数据类型
- 回发的数据大小,必须写正确的实际长度,或者-1,或者不写。浏览器会自动求。
- 空行:\r\n
- 应答包包体
- 请求
半连接在哪个阶段
- 服务器收到SYN标志位后,达到半连接状态。
- 此时客户端是SYN_SEND状态
- 服务器发送SYN和ACK后变为SYN_RECV状态
三次握手四次握手详细过程,越详细越好
libevent结构,内部实现
- 框架
- 创建底座base
- 创建事件
- 事件添加到base上
- 启动循环监听 dispatch
- 释放资源
- 内部实现:epoll
- 框架
tcp的可靠性体现在哪里
- 数据的回发和确认
ARP协议工作流程
- 获取mac地址
epoll中的ET和LT模式
- ET是边沿触发,例如度事件,即发生一次读事件即触发
- LT是水平触发,例如读事件,即缓冲区内有数据即会触发
介绍下滑动窗口
- 滑动窗口是用来进行TCP流量控制的。如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据。
- 通信过程中会发送一个滑动窗口大小的数据,以告知剩余缓冲区的大小,当剩余缓冲区的大小为0时,那么对端会暂时不发送数据,等待处理数据缓冲区剩余大小不为0时继续发送。
Accept发生在三次握手哪个阶段
- ESTABLISHED状态时
Udp的接收缓冲区和发送缓冲区和tcp的区别
- udp没有发送缓冲区只有接受缓冲区:所以说udp没有流量控制。当对端的接收缓冲区满了,新来的数据段被丢弃了,也就丢失了这个包
- 当发送缓冲区满是write()会写不进去,也就控制了流量
http长连接与短连接的区别
- 短连接:Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯。
- 长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P通信。
udp包长度
- 65507 约等于 64K
- 因为udp包头有2个byte用于记录包体长度. 2个byte可表示最大值为: 2^16-1=64K-1=65535
udp包头占8字节, ip包头占20字节, 65535-28 = 65507
一次url访问会经历哪些过程
- 客户端获取URL - > DNS解析 - > TCP连接 - >发送HTTP请求 - >服务器处理请求 - >返回报文 - >浏览器解析渲染页面 - > TCP断开连接
数据包乱序会处理?
- 使用算法
seq为1000,发送了1000个数据,下一个seq是多少?
- 2001
syn如果丢了,重传多少次
- 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户端确认包,进行第二次重传。如果重传的次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意每次等待的时间不一定相同,一般会是指数增长,列如间隔时间为1s,2s,4s,8s…
一个完整的http通信
- 1. 建立TCP连接
- 2. Web浏览器向Web服务器发送请求命令
- 3. Web浏览器发送请求头信息
- 4. Web服务器应答
- 5. Web服务器发送应答头信息
- 6. Web服务器向浏览器发送数据
alin的学习之路:面试题 计算机网络相关相关推荐
- alin的学习之路:面试题 数据库相关
alin的学习之路:面试题 数据库相关 如何提高查询速度? 使用索引 create index 索引名 on 表名(列名1,列名2,--); 数据库索引,事务,事务级别 使用索引可以提高查询效率 事务 ...
- alin的学习之路:共享内存
alin的学习之路:共享内存 1. 概念 共享内存是进程间通信中效率最高的一种方式. 共享内存: 可以被多个进程同时使用的一块内核的内存 有血缘关系的进程 没有血缘关系的进程 这块内存不属于任何的进程 ...
- alin的学习之路:Qt与多线程
alin的学习之路:Qt与多线程 如果程序在进行复杂的逻辑处理过程中, 对窗口进行操作, 就会出现无响应的情况. 如何解决这样的问题与高并发的问题? 需要使用多线程. 方式1 特点:简单 创建一个自定 ...
- alin的学习之路:序列化与protobuf
alin的学习之路:序列化与protobuf 1. 序列化(串行化) 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程,与之相对应的过程称之为反序列化(Unser ...
- alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)
alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...
- alin的学习之路:加密相关知识(加密和解密,常见加密算法,消息验证码HMAC,数字签名)
alin的学习之路:加密相关知识(加密和解密,常见加密算法,消息验证码HMAC,数字签名) 1. 加密和解密 1.1 加密的三要素 原始数据 加密操作: 明文 -> 密文 解密操作: 密文 -& ...
- alin的学习之路(Linux网络编程:十)(http协议,BS模型)
alin的学习之路(Linux网络编程:十)(http协议,BS模型) 需求:使用B/S模型来访问主机中的文件(包括目录) 0. B/S 模型 注意事项 1. 浏览器请求ico 准备一个favic ...
- alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理)
alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理) 1. 多表查询 1.1 笛卡儿积 笛卡尔积就是两个集合的乘积计算 . 如果多个表进行联合查询, 得到结果是一个笛卡尔积, 举 ...
- alin的学习之路(Linux网络编程:一)(网络模型、帧格式、socket套接字、服务器端实现)
alin的学习之路(Linux网络编程:一)(网络模型.帧格式.socket套接字.服务器端实现) 1. 协议 协议是一组规则,规定了如何发送数据.通信的双发都需要遵守该规则 2. 网络分层结构模型 ...
最新文章
- python json dump输出中文_Python读写文件(json.dump())中文被转成Unicode问题
- [原创] 为Visio添加公式编辑器工具栏按钮
- Jmeter之函数助手操作
- 乖离性暗机器人_乖离性百万亚瑟王国服超弩暗机器人如何打|乖离性百万亚瑟王国服超弩暗机器人平民打法攻略分享_好特教程...
- 一类新算法研究智能飞行器航迹规划问题
- js中追加写入文件(字符串追加)_note
- 全球智库报告发布 7家中国智库上榜世界综合排名百强
- UDP协议和socketserver以及文件上传
- (转载)RESTORE DATABASE命令还原SQLServer 2005 数据库
- 如何通过QQ机器人技术实现禅道bug的自动提交功能
- 和张哥的那些天,互联网人的潜规则
- 04年学计算机,成都电子科大计算机学院04年专业?
- Java对象内存大小计算
- 篮球爱好和程序的结合:C#生成NBA赛事预告页面
- 应用软件安全编程资源使用安全
- 测试方法介绍-计算模型复杂度(GMac)、模型大小(M)、计算速度(FPS)
- Word 文字处理学习笔记
- 小试DirectX游戏CPU优化
- 财务自由之路——我的投资史
- Vue源码学习(一):源码的入口在哪里