5层网络协议

层数 特点 协议
应用层 应用程序之间通讯的协议 HTTP、HTTPS、SSH、DNS
传输层 不同主机进程之间通讯的协议 TCP、UDP
网络层 不同主机之间通讯的协议 IP、ARP(IP到Mac地址的映射)
数据链路层 数据传输总是在一段段链路上传输,这时候就用链路层的协议
物理层 传输介质

TCP和UDP

TCP和UDP的区别

类型 特点 性能 应用过场景 首部字节
TCP 面向连接、可靠、字节流 传输效率慢、所需资源多 文件、邮件传输 20-60
UDP 无连接、不可靠、数据报文段 传输效率快、所需资源少 语音、视频、直播 8个字节

基于TCP的协议:HTTP、FTP、SMTP
基于UDP的协议:RIP、DNS、SNMP

这两都是传输层的协议

TCP滑动窗口和拥塞控制

TCP通过:应用数据分割、对数据包进行编号、校验和、流量控制、拥塞控制、超时重传等措施保证数据的可靠传输;
拥塞控制目的:为了防止过多的数据注入到网络中,避免网络中的路由器、链路过载
拥塞控制过程:TCP维护一个拥塞窗口,该窗口随着网络拥塞程度动态变化,通过慢开始、拥塞避免等算法减少网络拥塞的发生。

三次握手的过程

  1. 客户端发送同步包(标志位syn)给服务端,客户端状态进入同步已发送状态
  2. 服务端接收到客户端发送的同步包,返回一个确认包(标志位ack+syn),服务端进入同步已接收状态
  3. 客户端接收到确认包之后,再给服务端发送一个确认包(标志位ack),这样两边连接就建立了,就可以互相收发数据了

    tcp握手是为了确认双方的数据收发能力,第一次客户端询问服务端,第二次服务端确认并发起询问客户端,第三次客户端确认。

tcp握手为什么是3次

两端握手其实就是互相通知一下,接下来要互相传输数据。
首先握手最少是两次,因为一次的话,客户端发出去之后,都不知道服务端有没有准备好,会有很多数据丢失。
而如果只有两次的话,可能存在客户端发了一次连接请求之后,自己就挂了,然后服务端收到连接请求,给客户端回一个,但是没有客户端的确认,那这样服务端其实就浪费性能,白白在那等待。
那为什么不能是4次或者更多呢?
4次握手的话,就是 1 客户端询问服务端;2 服务端ack;3 服务端询问客户端;4 客户端确认。
但其实这样的过程中,可以把服务端询问客户端,和服务端确认放在一起,所以3次就够了。

tcp四次挥手的过程

  1. 客户端发送一个FIN的连接断开请求;
  2. 服务端回一个ACK确认包,就关闭了客户端到服务端的数据传输,是个半关闭状态;
  3. 服务端再发送一个FIN包给客户端;
  4. 客户端收到后,回一个ACK确认包,然后客户端会在等待2个最大报文生存时间之后关闭。

    等待2个最大报文生存时间是为了,防止客户端第4次挥手发的ACK包,服务端没有收到,如果服务端没有收到,那么服务端会重发一个FIN包。

tcp粘包拆包问题

问题由来

TCP传输的时候是字节流,为了提升传输效率,他会把要传输的数据放在缓冲区里,然后一起发送,这个时候就可能把业务上的一个包拆开发送了,这就是拆包;也可能缓冲区里多个包的数据合起来发送了,这就是粘包。

解决方案

  1. 自定义协议,请求头里设置消息长度
  2. 用特殊字符分割

    HTTP和HTTPS

    HTTP

    Connection连接方式,如果需要复用连接,可以让Connection=keep-alive,在HTTP1.X版本,默认就是keep-alive,如果不要复用连接,设置Connection=close。
    如果用到断点续传的话,设置range,可以指定范围。

    HTTP1.0和HTTP1.1和HTTP2.0区别

http1.0和http1.1的主要区别如下:HTTP1.0支持KeepAlived长连接,其他还有增加了错误状态码、支持断点续传、Content-Length等。
http1.1和http2.0的主要区别:2.0使用二进制格式传输数据(1.0文本格式传输),并且2.0会对数据进行顺序标识,可以实现多路复用:连接共享,不同的request可以使用同一个连接传输(最后根据每个request上的id号组合成正常的请求)。

http和https的区别

HTTP HTTPS
默认端口80 HTTPS默认使用端口443
明文传输、数据未加密、安全性差 传输过程ssl加密、安全性较好
响应速度快、消耗资源少 响应速度较慢、消耗资源多、需要用到CA证书

一次请求的过程/URL打开的过程

过程 使用的协议
1、浏览器查找域名DNS的IP地址
DNS查找过程(浏览器缓存、路由器缓存、DNS缓存)
DNS:获取域名对应的ip
2、根据ip建立TCP连接 TCP:与服务器建立连接
3、浏览器向服务器发送HTTP请求 HTTP:发送请求
4、服务器响应HTTP响应 HTTP
5、浏览器进行渲染

https的处理过程

  1. 客户端请求服务端,服务端下发证书(公钥、证书时间、受信任网址等信息);
  2. 客户端校验证书的正确性,包括时间,是否过期,证书颁发者是否受信赖,如果证书可靠,那么会生成一个随机字符串,并用证书里的公钥对随机字符串进行加密(因为服务端有公钥对应的私钥,所以只有服务端才能看到这个随机字符串);
  3. 客户端将加密后的随机字符串发送给服务端;
  4. 服务端用(证书里公钥)对应的私钥,对加密后的随机字符串进行解密,这样就能得到这个随机字符串;
  5. 然后之后的客户端和服务端都用这个随机字符串进行加解密(对称加密)。image.png

    加密算法

    对称加密算法:
    双方持有相同的密钥,且加密速度快,典型对称加密算法:DES、AES
    非对称加密算法:
    密钥成对出现(私钥、公钥),私钥只有自己知道,不在网络中传输;而公钥可以公开。相比对称加密速度较慢,典型的非对称加密算法有:RSA、DSA