若转载教程,请注明出自SW-X框架官方文档

问题与简答

网络篇

1. 计算机网络体系结构

各层作用

  • 应用层:应用层协议定义的是应用进程间通信和交互的规则
  • 运输层:运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务
  • 网络层:把运输层产生的报文段或用户数据报封装成分组进行传送
  • 数据链路层:将网络层交下来的 IP 数据报组装成帧,并在两个相邻结点间的链路上传送
  • 物理层:利用物理媒体以比特形式传送数据

2. UDP 的主要特点

  • UDP 是无连接的,即发送数据之前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延
  • UDP 使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表
  • UDP 是面向报文的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界
  • UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的
  • UDP 支持一对一、一对多、多对一和多对多的交互通信
  • UDP 的首部开销小,只有8个字节,比 TCP 的20个字节的首部要短

3. TCP 的主要特点

  • TCP 是面向连接的运输层协议。应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接
  • 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)
  • TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达
  • TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据
  • 面向字节流。TCP 中的“流”指的是流入到进程或从进程流出的字节序列

4. 简述三报文握手建立 TCP 连接

  • 服务器进程先创建传输控制块 TCB,并处于监听状态,等待客户端的连接请求
  • 客户端创建传输控制块 TCB,并向服务器发出连接请求报文段
  • 服务器收到连接请求报文段后,如同意建立连接,则发送确认报文段
  • 客户端进程收到服务器的确认报文段后,立即回复确认报文段,并进入已建立连接状态
  • 服务器收到确认报文段之后,也进入已建立连接状态

传输控制块 TCB(Transmission Control Block)存储了每一个连接中的一些重要信息

5. 建立 TCP 连接为什么最后还要发送确认

这主要是为了防止已失效的连接请求报文段突然又传到了 TCP 服务器,避免产生错误

6. 简述 TCP 连接的释放

  • 客户端应用进程发出连接释放报文段,并停止再发送数据,进入 FIN-WAIT-1(终止等待1)状态,等待服务器确认
  • 服务器收到连接释放报文段后即发出确认,进入 CLOSE-WAIT(关闭等待)状态,服务器若发送数据,客户端扔要接收
  • 客户端收到来自服务器的确认后,进入 FIN-WAIT-2(终止等待2)状态,等待服务器发出连接释放报文段
  • 服务器没有要发送的数据,发出连接释放报文段,进入 LAST-ACK(最后确认)状态,等待客户端确认
  • 客户端收到连接释放报文段后,发出确认,进入 TIME-WAIT(时间等待)状态,经过时间等待计时器设置的时间 2MSL 后,进入 CLOSED(关闭) 状态
  • 服务器收到客户端报文段后,进入 CLOSED 状态

7. TIME-WAIT 是什么,为什么必须等待 2MLS

TIME-WAIT 是一种 TCP 状态。等待 2MLS 可以保证客户端最后一个报文段能够到达服务器,如果未到达,服务器则会超时重传连接释放报文段,使得客户端、服务器都可以正常进入到 CLOSE(关闭) 状态

8. TCP 粘包问题

粘包问题

在 TCP 这种字节流协议上做应用层分包是网络编程的基本需求。分包指的是在发生一个消息(message)或一帧(frame)数据时,通过一定的处理,让接收方能从字节流中识别并截取(还原)出一个个消息。因此,“粘包问题”是个伪命题

长连接分包

  • 消息长度固定
  • 使用特殊的字符或字符串作为消息的边界,例如 HTTP 协议的 headers 以“\r\n”为字段的分隔符
  • 在每条消息的头部加一个长度字段,这恐怕是最常见的做法
  • 利用消息本身的格式来分包,例如 XML 格式的消息中 <root>...</root> 的配对,或者 JSON 格式中的 { ... } 的配对。解析这种消息格式通常会用到状态机(state machine)

9. UDP、TCP 区别,适用场景

对比项UDPTCP
连接性无连接面向连接
可靠性不可靠可靠
报文面向报文-数据报模式面向字节流-流模式
双工性一对一、一对多、多对一、多对多全双工
流量控制有(滑动窗口)
拥塞控制有(慢开始、拥塞避免、快重传、快恢复)
传输速度
资源要求较少较多
首部开销8字节20字节
数据顺序不保证保证

UDP 适用场景

面向数据报方式、网络数据大多为短消息、拥有大量 Client、对数据安全性无特殊要求、网络负担非常重,但对响应速度要求高

TCP 适用场景

文件传输(FTP HTTP 对数据准确性要求较高,速度可以相对慢)
发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用)
远程登录(telnet SSH 对数据准确性有要求,有连接的概念)

10. 建立 socket 需要哪些步骤

  • 创建 socket
  • 绑定 socket 到指定地址和端口
  • 开始监听连接
  • 读取客户端输入
  • 关闭 socket

11. DNS 主要作用是什么

计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 IP 地址访问

但要让计算机去理解名称,相对而言就变得困难,因为计算机更擅长处理一长串数字

为了解决上述问题,DNS 服务应运而生。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。

12. HTTP 报文组成

HTTP 报文是由简单字符串组成,HTTP 报文都是纯文本,不是二进制代码,可以很方便地对其进行读写

从客户端发往服务器的 HTTP 报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message)。HTTP 请求和响应报文的格式很类似

HTTP 报文组成部分

  • 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况
  • 首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值
  • 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据

13. HTTP 状态码

HTTP 状态码用来告诉客户端,发生了什么事情,状态码位于响应的起始行中

状态码分类

状态码整体范围已定义范围分类
1XX100~199100~101信息提示
2XX200~299200~206成功
3XX300~399300~305重定向
4XX400~499400~415客户端错误
5XX500~599500~505服务器错误

常见状态码

状态码原因短语含义考察概率
200OK请求没有问题***
206Partial Content部分或 Range(范围) 请求*
301Moved Permanently在请求的链接被移除时使用**
302Found在请求临时的链接使用**
304Not Modified资源未被修改可使用旧资源**
307Temporary Redirect在请求临时的链接使用**
400Bad Request告知客户端发送了错误请求***
403Forbidden请求被服务器拒绝***
404Not Found无法找到所请求的 URL***
413Request entiry too large请求实体过大*
500Internal Server Error服务器遇到错误***
502Bad Gateway代理或网关错误(无法连接到其父网关)***
503Service Unavailable无法为请求提供服务***
504Gateway Timeout代理或网关超时(等待另一服务器响应超时)***

拓展阅读 HTTP状态码

拓展阅读 5xx系列错误

14. 常见的 HTTP 方法

15. GET 与 POST 请求方式区别

GETPOST
后退按钮/刷新无害数据会被重新提交
数据长度限制/URL长度2048字符长度无限制
数据可见/安全性差不可见/更安全
可以被缓存不可以被缓存
书签可收藏书签不可收藏

16. HTTP 优缺点

基于应用级的接口,使用方便

传输速度慢,数据包大;如实现实时交互,服务器性能压力大;数据传输安全性差

17. HTTPS 通信原理

18. HTTP 2.0

多路复用、客户端拉拽/服务器推送、流量控制、WebSocket

19. WebSocket

WebSocket 是一种通信协议,定义了一个全双工通信信道,仅通过 Web 上的一个 Socket 即可进行通信

主要特点

  • 推送功能:支持由服务器向客户端推送数据的推送功能
  • 减少通信量:只要建立起 WebSocket 连接,就希望一直保持连接状态

20. IPv6 与 IPv4 有什么变化

更大的地址空间、扩展的地址层次结构、灵活的首部格式、改进的选项、允许协议继续扩充、支持资源的预分配

21. 什么是心跳机制

心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制

22. 什么是长连接

长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包

免费教程手写不易,希望能支持一下SW-X框架,(^.^)

GitHub有账号的朋友,也可以给我们一个小星星噢!

希望能够与大家共同培育出良好的Swoole生态,对Swoole有兴趣的朋友可以加我微信好友,进入SW-X框架官方交流群。
该群以Swoole生态发展交流为主,若出现争吵,攻击其他人等行为,立即剔除。