TCP和UDP的区别
两种协议都是工作在传输层,目地都是在网络之间传输数据。
TCP:
- 基于连接,连接的建立需要经历三次握手确保连接的可靠性,连接断开需要经历四次挥手,确保彻底断开。
- 传输数据时,TCP会将拆分的数据包通过发送缓冲区发送出去,当对方接收到数据包时会进行数据包的确认,假如数据包有缺失会要求发送方重传,保证包不丢失。
UDP:
- 基于非连接,简单包装一下数据包,就直接从网卡把数据包发送出去。数据包之间没有状态上的联系,所以数据包在网络传输过程中可能会产生一些丢包现象,稳定性若于TCP。但由于UDP的机制简单,所以性能损耗少,资源占用也少,传输速度快。在一些游戏,直播,视频通话等等一些场景下,UDP是上擅长与TCP的。
TCP数据传输流程
TCP协议会为每个连接建立发送缓冲区,对建立连接后的数据第一个字节序列号为0,后面每个字节序列号增加1,从发送缓冲区取部分数据组成发送报文,在其TCP协议头中会附带序列号和长度,接收端在接收到报文后,会进行回复确认(ACK=序列号+长度),如此能够保证发送数据不丢失。
TCP的三次握手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
-
客户端在和服务端建立连接时,首先会向服务端发送一包SYN包,此为第一次握手。
-
当服务端接收后回复一包SYN+ACK包表示接收到连接请求,此为第二次握手。
-
当客户端收到服务端的SYN+ACK包后,会向服务端发送一发ACK包,表示客户端我已收到你的回复。此为第三次握手。
三次握手保证了客户端与服务端确定了可靠的网络连接
TCP协议的四次挥手
- 当客户端需要关闭连接,会向服务端发送一包FIN包,表示要断开连接,此为第一次挥手。
- 服务端接收到后,会进入关闭等待状态,并回复客户端一包ACK包表示我已接收到关闭连接的请求,此为第二次挥手
- 接下来服务端会发送一包FIN包到客户端,表示我要关闭连接了,此为第三次挥手
- 客户端收到FIN包后回复ACK包,表示我已收到服务端的FIN包,你可以关闭连接了,服务端接收到FIN包后,直接关闭连接,此为第四次挥手。而客户端发送完ACK后也进入超时等待,最后关闭连接。(客户端第四次挥手需要超时等待是为了防止最后一发ACK包丢失的情况)
四次挥手断开连接保证了客户端和服务端都断开了连接
OSI七层模型
物理层:主要是为设备提供原始的电信号传输(按比特来传输,即二进制传输,通过电流强弱来进行识别),常见的例如网线,集线器
数据链路层:将物理层传输的电信号(比特bit流)转换为帧进行传输,并提供链路管理(例如可靠连接链路的建立),流量控制等功能,例如网卡,交换机等。
网络层:在网络间建立逻辑链路,并转发路由数据包,例如路由器
传输层:建立连接并进行数据包的传输,例如TCP,UDP协议
会话层:会话管理,访问身份验证,例如服务器严重用户登录
表现层:提供数据格式转换服务,例如图片编解码
应用层:为应用程序提供网络请求服务的接口,例如HTTP,FTP协议等
HTTP和HTTPS的区别
HTTP是超文本传输协议,数据在网络上进行传输时,是明文传输的,所以如果数据被劫持会导致数据泄漏。而HTTPS在HTTP的基础上实现了数据的加密,即数据在网络上传输时,数据是加密的,所以即使被劫持也不容易查看到原始数据报文。实现上,HTTPS增加了一个SSL加密层。具体为当客户端请求服务器时,服务器会将证书下发到客户端(即公钥),客户端通过证书生成一个随机加密字符串,然后再传输给服务器,服务器利用私钥解密出随机字符串。后面客户端和服务器进行网络传输时,即使用这个随机字符串进行加密(对称加密)。如此保证了数据传输时的安全性。HTTPS由于增加了SSL/TLS加密层,所以性能上略逊于HTTP,同时,HTTPS由于数据加密了,不利于爬虫进行爬取,不容易被搜索引擎发现。
HTTP2.0
- 优化了HTTP1.x的线头阻塞问题,1.x由于请求在TCP连接中是串行的,要是前面的请求存在阻塞将会导致后面的请求都阻塞(因为HTTP是基于请求-响应模型的,上一个请求未响应,下一个请求只能阻塞)
- Headers头部信息允许压缩,1.x只允许压缩请求体。同时能够互相缓存头信息,减少了数据量的传输。
- 数据传输时,采用新的二进制传输框架进行数据的编解码传输,提升了效率。
- 允许服务端主动发送数据给客户端
- 一个TCP连接中允许存在多个请求,即共享一个TCP连接,提高了并行处理的能力,同时个别请求阻塞并不影响别的请求的处理,提高了效率