计算机网络笔记
OSI七层模型
- 应用层:只关心业务逻辑,不关心数据的传输。
- 表示层:负责协商用于传输的数据格式,并转换数据格式。
- 会话层:建立连接,维持通信,释放连接。
- 传输层:负责将数据从一个实体(一个服务器或应用)传输到另一个实体,但不负责数据传输的方式(这是网络层负责的)。负责将数据进行拆分并封包。
功能:
- 数据分割重组:将数据拆分后按顺序重组。
- 纠错:在数据传输过程中出现问题后采取方式进行纠正(重发或其它)
- 管理连接:处理数据的频繁交换
- 流量控制:控制传输数据的速率
- 端口寻址:标明参与传输的实体的端口号 - 网络层:负责将一个封包从一个 IP 地址传输到另一个 IP 地址。
- 数据链路层:确保两个临近设备间数据的传输,并隐藏底层实现。
- 物理层(光纤、电缆):封装和隐藏具体的传输手段,并且提供稳定的传输接口。
TCP/IP 协议群的5层模型
- 应用层
- 传输层:TCP协议、UDP协议、TLS/SSL、SCTP等
- 网络层:IP协议(ipv4 和 ipv6)、ICMP协议、IPSec协议
- 数据链路层
- 物理层
TCP协议
概述:TCP全名是(Transport Control Protocol),是一个可以提供可靠的(数据无损传输)、支持全双工(任何时候都可以双向传输数据)、连接导向的协议,因此在客户端和服务端之间传输数据的时候,是必须先建立一个连接的。
三次握手
第一次握手:客户端发起连接请求(SYN同步)
第二次握手:服务端响应 ACK 以及 SYN。(响应可以连接,并且询问客户端准备好连接了吗?)
第三次握手:客户端响应可以开始连接了。
四次挥手
第一次挥手:客户端发送(FIN)断开连接请求。
第二次挥手:服务端发送(ACK)表示收到断开请求。
第三次挥手:服务端处理好服务器内部事务,确认可以断开连接,发送(FIN)可断开请求。
第四次挥手:客户端确认断开连接。
TCP传输数据
步骤:
- 报文拆分
- 增加TCP头
- 数据重组
报文拆分
TCP 会将应用层的数据分割成 TCP段(segement)再进行传输。
为了保证传输顺序,在发送时会将每个 TCP段进行标号,顺序发送出去,乱序到达接收方,接收方再进行数据重组。
设置两个序号:一个是发送序号(Seq),一个是接受序号(ACK)。
客户端的发送序号就是服务器端的接受序号。
TCP报文段包括:TCP头部 + TCP段数据
TCP头包含:
1. 源端口:描述发送方机器上的应用
2. 目标端口:描述接受方服务器上的应用
3. 发送序号(Seq)/接受序号(Ack)
TCP头的标志位
TCP头部结构
TCP纠错 和 CheckSum
TCP 拥有一个 16 bit 的 CheckSum字段(类似摘要)
CheckSum 是一个函数,把原文映射到一个不可逆的16位的编码中,这样就可以知道原文传输过程中有没有发生变化。
TCP 的流控能力
TCP滑动窗口
作用:(1)提供TCP的可靠性;(2)提供TCP的流控特性
TCP的滑动窗口的可靠性也是建立在“确认重传”基础上的。
发送窗口只有收到对端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界。
接收端可以根据自己的状况通告窗口大小,从而控制发送端的接收,进行流量控制。
想了解更详细的重传和滑动窗口可参考:https://www.cnblogs.com/yangjiannr/p/7391342.html
IP协议
IP协议可能遇到的问题
网络层要解决的三个问题:
IP协议的工作原理
分片
IPv4 协议头
延迟、吞吐量、丢包率
寻址
用IP地址与子网掩码进行&计算逐级寻址
路由
IPv6协议
IPv6 的工作原理
IPv6 和 IPv4的区别
地址不同**
IPv6地址简写
- IPv6 的地址可以简写,多个0000可以简写为 ::
- 开头的0可以不写
- 中间的0000可以简写成一个0
寻址不同
全局单播
** 本地单播**
本地地址必须以fe80为前缀。
分组多播
IPv6 新设备接入
UDP 协议
传输层才可附带端口号,网络层无法附带端口号。
UDP 封包格式
UDP 和 TCP 的区别
HTTP协议
DNS工作原理
DNS Query 的分级缓存策
DNS概述
A记录:定义ipv4地址
AAAA记录:定义ipv6地址
CNAME 记录:定义域名的别名
MX 记录:定义邮件服务器所在的位置
NS记录
SOA记录
TXT记录
内容分发网络(CDN)
HTTP请求头:key-value的形式
常见的请求头有:
- Content-Length:发送/接受 body 内容的长度。
- User-Agent:记录访问的客户端的浏览器,操作系统信息。
- Content-Type:请求数据的媒体类型。
- Origin:描述请求的来源地址。(从哪里跳转过来的----淘宝的访客记录有使用到)
- Accept:HTTP协议协商能力的体现,用于建议服务端返回何种数据媒体类型。
- Referer:记录上一张页面的URL
- Connection:决定 HTTP 链接(不是TCP链接)是否再当前事务完成后关闭。(close、keep-alive)
HTTP的方法
- GET:从服务器获取资源。
- POST:提交表单到服务器。(再服务器创建资源)
- PUT:再服务器修改资源(幂等性)
- DELETE:从服务器删除资源。
- OPTION:跨域部分讲解。
- TRACE:用于显示调试信息。(一般用于内网调试)多数网站不支持。
- PATCH:对资源进行部分更新。
HTTP状态码
1XX:提供信息
- 100:continue 可继续
- 101:切换协议(switch protocol)
2XX:成功
- 200 - ok
- 201 - Created 已创建
- 202 - Accepted 已接收
- 203 - Non-Authoritative Information 非权威内容
- 204 - No Content 没有内容
- 205 - Reset Content 重置内容
- 206 - Partail Content 服务器下发了部分内容(range header)
3XX:重定向
- 300 - Multiple Choices 用户请求了多个选项的资源(返回选项列表)
- 301 - Moved Permanently 永久转移
- 302 - Founed 资源呗找到
- 303 - See Other 可以使用GET 方法在另一个URL找到资源
- 304 - Not Modified 没有修改(与本地缓存数据比较无修改)
- 305 - Use Proxy 需要代理
- 307 - Temporary Redirect 临时重定向
- 308 - Permanent Redirect 永久重定向
4XX:客户端错误
- 400 - Bad Request 请求格式错误
- 401 - Unauthorized 没有授权(一般是没有登录,跳转到登录页面)
- 402 - Payment Required 请先付费
- 403 - Forbidden 禁止访问
- 404 - Not Founed 没有找到
- 405 - Method Not Allowed 方法不被允许
- 406 - Not Acceptable 服务端可以提供的内容和客户端期待的不一样
5XX:服务端错误
- 500 - Internal Server Error (内部服务器错误)
- 501 - Not Implemented 未实现
- 502 - Bad Gateway 网关错误
- 503 - Service Unavailable 服务不可用
- 504 - Gateway Timeout 网关超时
- 505 - HTTP Version Not Supported 版本不支持