计算机网络面试题

计算机网络面试题

持续更新…

  • OSI七层协议
    • 物理层 : 以二进制的流在物理媒介上传输数据
    • 数据链路层 : 物理寻址,同时将比特流转换成逻辑传输线路
    • 网络层 : 为数据包选择路由
    • 传输层: OSI协议中最重要的一层,接受上一层的数据,在必要的时候对数据进行分割,交给网络层,保证数据能到到达对端
    • 会话层 : 不同机器上的用户之间建立会话和会话管理
    • 表示层 : 数据格式化,代码转换,数据加密
    • 应用层 : 文件传输,电子邮件,文件服务,虚拟终端
  • tcp协议
    • 面向连接的,可靠的,基于字节流的传输层通信协议
    • 将应用层的数据流分割成报文段并发送给目标节点的tcp层
    • 数据包都有序号,对方收到则发送ack确认,未收到则重传
    • 使用校验和来检验数据在传输过程中是否有误
  • tcp的三次握手
    • 客户端发送syn包[syn=j]到服务器,并进行syn_send状态,等待服务器确认
    • 服务器收到syn包,必须确认客户的syn[syn+1],同时自己也发送一个syn包[syn=k],即syn+ack包,此时服务器进入syn_rece状态
    • 客户端收到服务器的syn+ack包,向服务器发送确认包ack[ack=k+1],完成后,客户端和服务器进入ESTABLISHED状态,完成三次握手(建立连接)
  • 为什么需要三次握手才能建立连接
    • 为了初始化Sequence Number的初始值
  • 首次握手的隐患-syn超时
    • server收到client的syn,回复syn-ack的时候未收到ack确认
    • server不断重试至超时,linux默认63秒才断开连接
    • 会存在syn blood攻击,就是不同发送连接请求,然后立马下线,占满syn队列
  • 针对syn blood的防护措施
    • syn队列满后,通过tcp_syncookies参数发回syn cookie
    • 若为正常连接,则client会发回syn cookie,直接建立连接
  • tcp的四次挥手
    • client发送一个fin,用来关闭client到sever的数据传送,client进入fin_wait_1状态
    • server收到fin后,发送一个ack给client,确认序号为收到序号+1(与syn相同,一个fin占用一个序号),server进入last_ack状态
    • server 发送一个fin,用来关闭server到client的数据传输,server进入last_ack状态
    • client收到fin后,client进入time_wait状态,接着发送一个ack给server,确认序号为收到序号+1,server进入closed状态,完成四次挥手
  • 为什么会有time_wait状态
    • 确保有足够的时间让对方收到ack包
    • 避免新旧连接混淆
  • 为什么需要四次挥手才能断开连接
    • 因为全双工,发送方和接收方都需要fin报文和ack报文
  • 服务器出现大量close_wait状态的原因
    • 对方关闭socket连接,我方忙于du读或写,没有及时关闭连接
    • 解决:
      • 检查代码,特别是释放资源的代码
      • 检查配置,特别是处理请求的线程配置
  • tcp和udp的区别
tcp udp
面向连接 面向非连接
可靠性 不维护连接转态,支持向多个客户端传输相同的消息
有序性 无序性
速度慢 吞吐量只受限于数据生成速率,传输速率及机器性能
重量级 轻量级
  • Rtt和Rto
    • Rtt:发送一个数据包到收到对应的ack,所花费的时间
    • RTO:重传时间间隔
  • http协议特点
    • 支持客户/服务器模式
    • 简单快速
    • 灵活
    • 无状态
    • 无连接
  • http请求响应的步骤
    • 客户端连接到web服务器
    • 发送http请求
    • 服务器接受请求并返回http响应
    • 释放tcp连接
    • 客户端浏览器解析html内容
  • 在浏览器输入url,按下回车之后的流程
    • DNS解析
    • tcp连接
    • 发送http请求
    • 服务器处理请求并返回htpp报文
    • 浏览器解析渲染页面
    • 连接结束
  • get请求和post请求的区别
    • http报文层面:get请求信息放在url中,键值对拼接,post请求在请求体中
    • 数据库层面:get请求复合幂等性和安全性,post不符合
    • 其他:get请求可以被缓存,post不可以
  • http和https的区别
    • https需要到ca申请证书,http不需要
    • https密文传输,http明文传输
    • 连接方式不同,https默认443端口,http使用80端口
    • https = htpp+加密+认证+完整性保护,更安全

你可能感兴趣的:(面试题)