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维护一个拥塞窗口,该窗口随着网络拥塞程度动态变化,通过慢开始、拥塞避免等算法减少网络拥塞的发生。
三次握手的过程
- 客户端发送同步包(标志位syn)给服务端,客户端状态进入同步已发送状态
- 服务端接收到客户端发送的同步包,返回一个确认包(标志位ack+syn),服务端进入同步已接收状态
- 客户端接收到确认包之后,再给服务端发送一个确认包(标志位ack),这样两边连接就建立了,就可以互相收发数据了
tcp握手是为了确认双方的数据收发能力,第一次客户端询问服务端,第二次服务端确认并发起询问客户端,第三次客户端确认。
tcp握手为什么是3次
两端握手其实就是互相通知一下,接下来要互相传输数据。
首先握手最少是两次,因为一次的话,客户端发出去之后,都不知道服务端有没有准备好,会有很多数据丢失。
而如果只有两次的话,可能存在客户端发了一次连接请求之后,自己就挂了,然后服务端收到连接请求,给客户端回一个,但是没有客户端的确认,那这样服务端其实就浪费性能,白白在那等待。
那为什么不能是4次或者更多呢?
4次握手的话,就是 1 客户端询问服务端;2 服务端ack;3 服务端询问客户端;4 客户端确认。
但其实这样的过程中,可以把服务端询问客户端,和服务端确认放在一起,所以3次就够了。
tcp四次挥手的过程
- 客户端发送一个FIN的连接断开请求;
- 服务端回一个ACK确认包,就关闭了客户端到服务端的数据传输,是个半关闭状态;
- 服务端再发送一个FIN包给客户端;
- 客户端收到后,回一个ACK确认包,然后客户端会在等待2个最大报文生存时间之后关闭。
等待2个最大报文生存时间是为了,防止客户端第4次挥手发的ACK包,服务端没有收到,如果服务端没有收到,那么服务端会重发一个FIN包。
tcp粘包拆包问题
问题由来
TCP传输的时候是字节流,为了提升传输效率,他会把要传输的数据放在缓冲区里,然后一起发送,这个时候就可能把业务上的一个包拆开发送了,这就是拆包;也可能缓冲区里多个包的数据合起来发送了,这就是粘包。
解决方案
- 自定义协议,请求头里设置消息长度
- 用特殊字符分割
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的处理过程
- 客户端请求服务端,服务端下发证书(公钥、证书时间、受信任网址等信息);
- 客户端校验证书的正确性,包括时间,是否过期,证书颁发者是否受信赖,如果证书可靠,那么会生成一个随机字符串,并用证书里的公钥对随机字符串进行加密(因为服务端有公钥对应的私钥,所以只有服务端才能看到这个随机字符串);
- 客户端将加密后的随机字符串发送给服务端;
- 服务端用(证书里公钥)对应的私钥,对加密后的随机字符串进行解密,这样就能得到这个随机字符串;
- 然后之后的客户端和服务端都用这个随机字符串进行加解密(对称加密)。
加密算法
对称加密算法:
双方持有相同的密钥,且加密速度快,典型对称加密算法:DES、AES
非对称加密算法:
密钥成对出现(私钥、公钥),私钥只有自己知道,不在网络中传输;而公钥可以公开。相比对称加密速度较慢,典型的非对称加密算法有:RSA、DSA