计算机网络篇
计算机网络篇
网络模型
OSI模型
OSI 模型
底——————————————>高
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP模型
网络接口层、网络层、传输层、应用层
TCP、IP层位于哪一层?
TCP位于传输层。IP位于网络层。
应用层
Http常用的状态码?
1XX 提示信息
2XX 处理成功
3XX 客户端请求资源发生了变动,需重定向。
4XX 客户端发送的报文有误,服务器无法处理。
5XX 服务端处理发生了错误。
HTTP返回状态301、302
- 301 Moved Pemanently表示永久重定向,表示资源不存在了,需要改用新的URL再次访问。
- 302 Found 表示临时重定向,请求资源还在,但需要另一个URL来访问。
HTTP 502和504的区别?
502 Bad Gateway:作为网关或者代理工作的服务器尝试请求,服务器无响应。
504 Gateway Time-out:作为网关或者代理工作的服务器尝试请求,服务器超时。
GET和POST的使用场景
一般来说。
- GET 从服务器获得指定资源。GET方法安全且幂等。请求可以由浏览器缓存下来。返回URL。
- POST 新增或提交数据。GET不安全不幂等。一般浏览器不会缓存。返回请求体(JSON,form,二进制..)
何时用哪一个(实战建议)
- GET:查询列表/详情、带筛选排序分页(可书签、可缓存)。
- POST:创建资源、提交表单/登录、复杂查询超长参数、上传文件、执行动作(结算、导出生成等)。
HTTP短连接和长连接?
短连接:建立TCP->请求资源->响应资源->释放连接。
建立连接方式:TCP三次握手,断开连接::四次挥手
长连接:建立TCP->(请求资源->响应资源->)*N…释放连接。
http和https默认端口?
http:80,https:443.
HTTP1.1怎么对请求做拆包?
请求头包含字段”Content-Length”,该字段用来描述请求内容的长度。依据此长度,服务器就知道请求正文的长度。
HTTP断点重传是什么?
断点重传是:客户端下载当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。
客户端发送含Range头的请求告诉服务端。Range头包含开始位置-结束位置。
服务端发送Content-Range,Content-Length,accepted-ranges。
HTTP和HTTPS的区别?
- HTTP,超文本传输协议,信息是明文传输,存在安全风险。HTTPS是在TCP和HTTP网络层之间加入了SSL/TLS安全协议,加密传输。
- HTTP连接建立简单,TCP三次握手便可传输。HTTPS在三次握手后还需进行SSL/TLS的握手过程。
HTTP1.1和2.0的区别?
- 头部压缩
- 二进制格式,帧
- 并发传输
- 服务端可主动向客户端发送消息
DNS的全称了解么?
DNS是DomainNameSystem(域名系统)。
类似于树形结构。
- 根DNS服务器(.)
- 顶级域DNS服务(.com)
- 权威DNS服务器(server.com)
DNS的默认端口是53.
DNS的底层使用的是UDP
DNS基于UDP协议实现。
- 低延迟:无需连接
- 简单快速,没有连接管理和流量控制
- 轻量级:头部较小。
HTTP是静态的(无状态)
HTTP每次请求都是独立的,服务器不会记录状态。
token,cookie和session的区别
- session存储于服务器,拥有一个唯一的状态识别符号sessionId,通常放于cookie中。服务器收到cookie后解析出sessionId,再从session列表中查找,才能找到对应的session。依赖于cookie.
- cookie类似一个令牌,装有sessionId,存储再客户端,浏览器通常自动添加。cookie存储容量小,通常是几KB。
- token也类似一个令牌,无状态,服务器分发,用来记录用户信息。
什么数据应该存在到cookie,什么数据存放到 Localstorage
- Cookie 适合用于在客户端和服务器之间传递数据、跨域访问和设置过期时间。
- 而 LocalStorage 适合用于在同一域名下的不同页面之间共享数据、存储大量数据和永久存储数据。
JWT令牌
JWT令牌是基于加密算法生成的令牌,服务端依据密钥对用户信息等进行加密发送给浏览器。可在请求头携带。
- 无状态性:JWT是无状态的令牌
- 安全性:JWT使用密钥对令牌进行签名。有效放置了CSRF(跨站请求伪造)。
- 跨域支持:只要在请求头携带上JWT。多个服务器集群可以共同处理JWT。
JWT令牌有哪些字段?
三部分:头部(Header),载荷(Payload),签名(Signature)。头部和荷载均为JSON格式,使用Base64编码进行序列化。
Header记录加密算法和令牌类型。
PayLoad记录用户信息。
签名对头部、载荷、和密钥进行签名的结果
JWT令牌如果泄露了,怎么解决,JWT是怎么做的?
及时失效令牌
刷新令牌
使用黑名单
HTTP长连接与WebSocket有什么区别?
- 全双工和半双工:TCP协议本身支持全双工,但HTTP1.1是半双工的。对于大部分需要服务器主动推送数据到客户端的场景,Websocket协议更友好。
- 应用场景:HTTP1.1,客户端不问,服务端就不答。HTTP1.1,可以使用定时轮询或长轮询实现服务端推送的效果。
WebSocket用于频繁交互的复杂场景。
WebSocket有什么特别的点?
- 全双工、低开销:
建立后是持续通道,双方都能主动发送消息。
帧头只有几个字节。 - 服务端可主动推送
- 实现、运维友好:
Android 原生/第三方库直接支持;Node.js事件驱动模型擅长大量长连接。
反向代理支持Upgrade即可如NGINX. - 消息协议可控:
我们在 WS 之上自定义“房间/对局/落子/聊天/心跳”等消息类型;可用 JSON 快速开发,或用 Protobuf 做二进制以降带宽。 - 低延迟
我们选择 WebSocket,因为它在一个持久连接上提供双向、低延迟、可推送的通信,恰好匹配对战类应用“落子即时同步 + 服务器仲裁”的需求;同时部署简单、移动端兼容好,整体体验和成本更优。
Nginx有哪些负载均衡算法?
- 轮询
- IP哈希
- URL哈希
- 最短响应时间
- 加权轮询
传输层
TCP三次握手
- 第一个报文:客户端会随机初始化序列号(client_isn),SYN=1,发送给服务端,客户端置于SYN-SENT状态。
- 第二个报文:服务端接收SYN报文,服务端初始化自己的序号(server_isn),放入[序列号],把TCP首部的[确认序列号]填入client_isn+1,SYN=1,ACK=1,发送给客户端。服务端置于SYN-RCVD状态。
- 第三个报文:客户端接收到服务端报文后,回应报文。ACK=1,[确认应答号]=server_isn+1,此时可以携带数据。客户端置于ESTABLISHED状态。
- 服务端接收后,也置于ESTABLISHED状态。
此时客户端和服务端都置于ESTABLISHED状态,连接已经建立完成,相互都可以发送数据了。