博客内容为PHP-Interview-QA读后笔记
计算机网络体系结构
- 物理层:管理物理连接,并进行数据比特流传输
- 数据链路层:建立逻辑连接,进行物理地址寻址,将上层数据封装成帧、进行差错校验、硬件地址寻址等
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择
- 传输层:定义传输数据的端口号,负责向两台主机间进程的通信提供通用的数据传输服务
- 应用层:定义应用进程间的通信与交互规则
TCP三次握手
- 服务器端进程监听端口
- 客户端向服务器端发送SYN标志报文
- 服务器端收到请求报文后,返回携带SYN、ACK标志的确认报文
- 客户端接收到确认报文后,返回ACK标志的确认报文,此时,客户端进入已建立连接状态
- 服务器收到确认报文后,也进入建立连接状态
为什么要进行三次握手
如果只有两次握手,已失效的请求报文传到服务器会引起错误
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
定时发送一个探测包,以确保连接是活动状态