面试问题之计算机网络

博客内容为PHP-Interview-QA读后笔记

计算机网络体系结构

  • 物理层:管理物理连接,并进行数据比特流传输
  • 数据链路层:建立逻辑连接,进行物理地址寻址,将上层数据封装成帧、进行差错校验、硬件地址寻址等
  • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择
  • 传输层:定义传输数据的端口号,负责向两台主机间进程的通信提供通用的数据传输服务
  • 应用层:定义应用进程间的通信与交互规则

TCP三次握手

  1. 服务器端进程监听端口
  2. 客户端向服务器端发送SYN标志报文
  3. 服务器端收到请求报文后,返回携带SYN、ACK标志的确认报文
  4. 客户端接收到确认报文后,返回ACK标志的确认报文,此时,客户端进入已建立连接状态
  5. 服务器收到确认报文后,也进入建立连接状态

为什么要进行三次握手

如果只有两次握手,已失效的请求报文传到服务器会引起错误

TCP与UDP

TCP UDP
面向连接 无连接
可靠 不可靠
面向字节流 面向报文
全双工 一对一、一对多、多对一、多对多
有流量控制与拥塞控制 无流量控制与拥塞控制
速度慢 速度快
开销大 开销小
保证数据顺序 不保证数据顺序

UDP适用于对速度要求比较高,对安全性、可靠性要求相对较低的场景
TCP适用于文件传输、远程登录等对数据准确性要求比较高的场景

TCP粘包问题

发送方发送两个包:Hello World、Hello Alan,粘包后接收方接收到的结果可能为Hello WorldHello Alan。

造成粘包问题的原因:发送时需要等缓冲区满才能发送;接收时不及时接收缓冲区的包。

创建socket的步骤

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

HTTP报文组成

起始行、首部字段、主体

常用状态码

状态码 短语 含义
101 Switching Protocol 切换协议
200 OK 成功
206 Partial Content 部分请求成功
301 Moved Permanently 永久性重定向
302 Found 找到资源,临时重定向
304 Not Modified 未修改,资源未被修改
400 Bad Request 请求格式错误
403 Forbidden 禁止访问
404 Not Found 未找到资源
500 Internal Server Error 服务器遇到错误,PHP代码问题;文件权限问题;资源限制
502 Bad Gateway 网关错误,当PHP-CGI得到一个无效响应时出现,此时PHP-CGI停止运行或卡死
504 Gateway Timeout 网关超时,PHP-CGI没有在指定时间响应请求

常见的HTTP请求

方法 描述 是否包含主体
GET 从服务器获取资源
POST 创建资源
PUT 创建或更新资源、幂等
DELETE 从服务器删除资源
HEAD 从服务器获取头部信息
OPTIONS 获取服务器支持的方法
TRACE 对可能经过代理服务器传送到服务器上的报文进行追踪

GET与POST请求的区别

GET POST
可后退、刷新无害 数据被重新提交
浏览器会限制URL的长度,因此数据长度存在限制 长度无限制
数据可见、安全性差 数据不可见、安全性高
可被缓存、可存为书签 不可被缓存、不可存为书签

HTTP的优缺点

  • 优点:使用方便
  • 缺点:传输速度慢,数据包大;实现实时交互,服务器性能压力大;数据传输安全性差

Keep Alive

定时发送一个探测包,以确保连接是活动状态