计算机网络

OSI七层协议和TCP/IP四层协议

网络体系结构-图1

http 1.0、1.1、2.0的区别

  • 搞懂 HTTP 1.0 /1.1/2.0 协议差别
  • http 1.0 中,一个 tcp 连接只做一件事情
  • http 1.1 中,保持连接的机制,一个 tcp 连接多次重复使用
  • http 2.0 中,多路复用,一个 tcp 连接并行发送多个请求和响应。数据流优先级和服务器推送。

地址栏输入 URL 发生了什么

  1. 前端经典面试题: 从输入URL到页面加载发生了什么
  2. 从输入网址到浏览器呈现页面内容,中间发生了什么
  3. 解析,例如http://www.baidu.com,其中http为协议,www.baidu.com为网络地址
  4. DNS解析,浏览器缓存、路由器缓存、DNS缓存,若没找到则请求上级DNS服务器,直至找到或到根节点。
  5. 请求,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https),组成http请求。
  6. 传输层TCP传输报文,三次握手、四次挥手等
  7. 网络层IP协议查询MAC地址,ARP协议可以将IP地址解析成对应的MAC地址。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标。
  8. 数据链路层,找到对方的MAC地址后,就将数据发送到数据链路层传输。
  9. 服务器负载均衡:硬件F5,软件lvs、反向代理nginx(epoll)转发算法:轮询、权重、ip_hash
  10. 应用服务器:处理请求、返回响应

TCP 如何保证可靠传输

  1. TCP/IP常见面试题
  2. TCP 协议 · 笔试面试知识整理
  3. TCP协议-如何保证传输可靠性
  4. 校验和:将首部、数据生成校验和,校对错误就丢弃。分为:IP校验和、TCP校验和、ICMP校验和。
  5. 序列号:发送的每一个包进行编号,接收方对数据包进行排序
  6. 确认应答:发送ACK报文确认应答
  7. 超时重传:TCP发出一个段后,它启动一个定时器,超时后重传
  8. 连接管理:三次握手与四次挥手
  9. 流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率(滑动窗口协议)
  10. 拥塞控制:当网络拥塞时,通过动态改变窗口的大小,减少数据的发送。
    1. 慢开始,由小到大倍数增加窗口数值。适用于传输开始时和因超时而重新启用时
    2. 拥塞避免,窗口超过慢开始的阈值,就缓慢增加窗口大小
    3. 快重传,客户端收到失序的报文段,需要尽快发送对未收到的报文段的重复确认。
    4. 快恢复,快恢复就是收到三个重复的确认(可看作是网络已经拥塞了),此时并不执行慢开始算法,而是执行快恢复,就是新的门限值是原来的一半,直接进入拥塞避免阶段。

糊涂窗口综合症、delay ack 和 Nagle 算法

  1. TCP之Nagle算法&&延迟ACK
  2. 一不小心,陷入TCP的性能问题
  3. 糊涂窗口综合症:当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,可能导致有效载荷可能只有1个字节,而传输开销有40字节(20字节的IP头+20字节的TCP头)
  4. 客户端求解:delay ack,收到包后不急着发ACK,一是如果需要发包可以搭顺风车,二是合并多个ACK
  5. 服务端求解:Nagle算法['neɪgəl],发送数据包时,如果数据包小于MSS(最大分段大小),则会去判断是否有已发出去的包还没有ACK,如果有则不着急发送,等等前面的包收到ACK再发送

粘包、拆包

  1. TCP粘包问题分析和解决(全)
  2. 解析 http 协议是否要处理粘包?
  3. UDP报文,要么是一整个,要么不收,不存在粘包问题
  4. TCP是面向字节流的,2k,4k ,8k,这三个数据包,若接收的缓冲区大小在14k以上,就能一次性接收,所以需要拆包
  5. HTTP有三种方式处理拆包:
    1. http 1.0,一个请求一个响应,所以read complete就行
    2. Content-length
    3. transfer-encoding: chunked,用0、空行标志结束

为什么是四次挥手,客户端TIME_WAIT后还要等待2MSL?

  1. 两张动图-彻底明白TCP的三次握手与四次挥手
  2. A 和 B 通话结束时,A 说“我说完了”,B回答“我知道了”,但是 B 可能还有要说的话,最后 B 说“我说完了”,A 回答“知道了”
  3. 客户端发送ACK进入TIME_WAIT,防止服务端没有收到ACK而重发FIN+ACK报文,所以需要等待2MSL

TCP和UDP的区别

  1. 面试官问到TCP/IP怎么回答才过关
  2. TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接
  3. TCP保证可靠传输;UDP不保证可靠
  4. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
  5. TCP连接是一对一;UDP支持一对一,一对多,多对一和多对多
  6. TCP首部开销20~60字节;UDP的首部开销只有8个字节

TCP keepalive

  1. TCP keepalive 详解
  2. 在连接闲置 tcp_keepalive_time 秒后,发送探测包,如果对方回应ACK,便认为依然在线;否则间隔 tcp_keepalive_intvl 秒后,持续发送探测包,一直到发送了 tcp_keepalive_probes 个探测包后,还未得到ACK回馈,便认为对方crash了。

results matching ""

    No results matching ""