浅谈计算机网络 | 青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的的第 2 篇笔记
前几天在字节跳动后端营的学习中,通过「打开抖音互联网会发生什么」和「将我的服务开放给用户」,让我对计算机网络有了一个新的认知与理解。通过老师的讲解明白了用户怎么通过网络获取到互联网公司提供的服务,与公司是如何将自己的服务部署到服务器上提供给用户使用的。
下面我整理一些计算机网络的知识点,以供自己复习与强化。
计算机网络体系结构
-
OSI七层模型
- 应用层:通过应用进程间的交互来完成特定网络应用,应用层协议定义的是应用进程间通信和交互的规则
- 表示层:数据的表示、安全、压缩。确保一个系统的应用层所发送的信息可以被另外一个系统的应用层读取
- 会话层:建立、管理、终止会话,是用户应用程序和网络之间的接口
- 运输层:提供源端和目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信
- 网络层:将网络地址翻译成对应的物理地址,实现不同网络之间的路径选择
- 数据链路层:在物理层提供比特流服务的基础上,建立相邻节点之间的数据链路
- 物理层:建立、维护、断开物理连接
-
TCP/IP模型
- 应用层:对应于OSI参考模型的应用层,表示层,会话层
- 传输层:对应于OSI参考模型的传输层,为应用层实体提供端到端的通信,保证数据报的顺序传送及数据的完整性
- 网际层:对应于OSI参考模型的网络层,主要解决主机到主机的通信问题
- 网络接口层:对应于OSI参考模型的数据链路层、物理层
-
五层体系结构
- 应用层:对应于OSI参考模型的应用层,表示层,会话层
- 传输层:对应于OSI参考模型的传输层
- 网络层:对应于OSI参考模型的网络层
- 数据链路层:对应于OSI参考模型的数据链路层
- 物理层:对应于OSI参考模型的物理层
各层的网络协议有哪些
- 应用层:HTTP DNS FTP SMIP
- 表示层:GIF JPEG
- 会话层:PRC SQL NFS
- 传输层:TCP UDP
- 网络层:IP ICMP ARP
- 数据链路层:HDLC PPP
- 物理层:IEA/TIA-232
数据在各层之间怎么样传输
对于发送方而言,从上层到下层层层包装,对于接收方而言,而下层到上层,层层解开包装
包装是指每一层加上一个首部,作为它的控制信息
从浏览器地址输入url到显示主页的过程
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求
- 返回HTTP响应
- 浏览器解析并渲染页面
- 断开TCP连接
DNS的解析过程
- 查找浏览器缓存,如果有对应的IP,则直接返回
- 将请求发送给本地DNS服务器,如果查找到则直接返回
- 本地DNS服务器向根域名服务器请求,根域名服务器返回顶级域名服务器的IP地址列表
- 本地DNS服务器再向顶级域名服务器发送请求,返回对应的权限域名服务器的IP地址列表
- 本地DNS服务器再向权限域名服务器发送一个请求,返回网址对应的ip地址
HTTP状态码
- 1XX:信息性状态码,表示协议处理的中间状态,还需要后续处理
- 2XX:成功状态码
- 3XX:重定向状态码
- 4XX:客户端错误状态码
- 5XX:服务端错误状态码
1xx
101 Switching Protocols。在HTTP升级为WebSocket的时候,如果服务器同意变更,就会发送状态码 101。
2xx
200 OK是见得最多的成功状态码。通常在响应体中放有数据。
204 No Content含义与 200 相同,但响应头后没有 body 数据。
206 Partial Content顾名思义,表示部分内容,它的使用场景为 HTTP 分块下载和断点续传,当然也会带上相应的响应头字段Content-Range。
3xx
301 Moved Permanently即永久重定向,对应着302 Found,即临时重定向。
比如你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回301,这个时候浏览器默认会做缓存优化,在第二次访问的时候自动访问重定向的那个地址。
而如果只是暂时不可用,那么直接返回302即可,和301不同的是,浏览器并不会做缓存优化。
304 Not Modified: 当协商缓存命中时会返回这个状态码。
4xx
400 Bad Request: 开发者经常看到一头雾水,只是笼统地提示了一下错误,并不知道哪里出错了。
403 Forbidden: 这实际上并不是请求报文出错,而是服务器禁止访问,原因有很多,比如法律禁止、信息敏感。
404 Not Found: 资源未找到,表示没在服务器上找到相应的资源。
405 Method Not Allowed: 请求方法不被服务器端允许。
406 Not Acceptable: 资源无法满足客户端的条件。
408 Request Timeout: 服务器等待了太长时间。
409 Conflict: 多个请求发生了冲突。
413 Request Entity Too Large: 请求体的数据过大。
414 Request-URI Too Long: 请求行里的 URI 太大。
429 Too Many Request: 客户端发送的请求过多。
431 Request Header Fields Too Large请求头的字段内容太大。
5xx
500 Internal Server Error: 仅仅告诉你服务器出错了,出了啥错咱也不知道。
501 Not Implemented: 表示客户端请求的功能还不支持。
502 Bad Gateway: 服务器自身是正常的,但访问的时候出错了,啥错误咱也不知道。
503 Service Unavailable: 表示服务器当前很忙,暂时无法响应服务。
HTTP有哪些请求方式
- GET:对服务器获取资源的简单请求
- POST:向服务器提交数据请求
- PUT:修改指定资源
- DELETE:删除URL标记的指定资源
- CONNECT:用于代理服务器
- TRANCE:主要用于环回测试
- OPTIONS:返回所有可用的方法
- HEAD:获取URL标记资源的首部
TCP三次握手的过程
- 最开始,客户端和服务端都处于CLOSE状态,服务端监听客户端请求,进入LISTEN状态
- 客户端发送连接清酒,第一次握手(SYN=1,seq=x),发送完毕后,客户端就进入SYN_SENT状态
- 服务端确认连接,第二次握手(SYN=1,ACK=1,seq=y,ack=x+1),发送完毕后,服务端就进入SYN_RCV状态
- 客户端收到服务端确认之后,再次向服务端确认,这就是第三次握手(ACK=1,seq=x+1,ack=y+1),发送完毕之后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入ESTABLISHED状态
TCP四次挥手过程
- 数据传输结束之后,通信双方都可以主动发起断开连接请求,这里假定客户端发起
- 客户端发送释放连接报文,第一次挥手(FIN=1,seq=u),发送完毕之后,客户端进入FIN_WAIT_1状态
- 服务端发送确认保证,第二次挥手(ACK=1,ack=u+1,seq=v),发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收这个确认包之后,进入FIN_WAIT_2状态
- 服务端发送释放连接报文,第三次挥手(FIN=1,ACK=1,seq=w,ack=u+1),发送完毕之后,服务端进入LAST_ACK状态,等待来自客户端最后一个ACK
- 客户端发送确认报文,第四次挥手(ACK=1,seq=u+1,ack=w+1),客户端接收到来自服务器的关闭请求,发送一个确认包,并进入TIME_WAIT状态,等待了某个固定时间(两个最大生命周期,2MSL)之后,没有收到服务器端的ACK认为服务器端已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态,服务器端接收到这个确认报包之后,关闭连接,进入CLOSED状态