TCP,全称Transport Controll Protocol
,传输控制协议。
UDP,全称User Data Protocol
,用户数据报协议。
OSI七层网络模型、TCP/IP四层模型、TCP/IP五层模型
OSI七层网络模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP四层模型:应用层、传输层、网络层、网络接口层
TCP/IP五层模型:应用层、传输层、网络层、数据链路层、物理层
TCP、UDP位于哪一层
二者都是传输层协议。
TCP 与 UDP 的区别
- TCP是面向连接的,UDP是无连接的
- TCP是可靠的,UDP是不可靠的
- TCP有拥塞控制机制,UDP没有
- TCP是面向字节流的,UDP是面向数据报文的
- TCP只支持点对点通信,UDP支持一对一,一对多,多对多
- TCP协议下双方发送接受缓冲区都有,UDP并无实际意义上的发送缓冲区,但是存在接受缓冲区
- TCP报文首部不同,TCP首部20个字节,UDP首部8个字节
TCP如何保证可靠性
- 数据包校验防止发送过来的数据是错误数据
- 确认序列号,对失序报文进行重排
- 丢弃重复数据包,防止数据冗余重复
- 确认应答机制,接收方接受数据之后会发送一个确认
- 超时重传机制,发送方发出数据后会启动一个定时器,超过该定时器时间依旧未收到对方确认,便会重新发送该数据
- 流量控制确保接收方收到的数据在自身缓冲区中不会溢出
- 拥塞控制,保证数据在网络中传播的可靠性,降低丢包的概率,提高TCP的可靠性
TCP 和 UDP 各自的适用场景
对实时性要求比较高,且允许数据丢失的情况,选择UDP,比如实时视频通话、游戏。
不允许数据丢失,及大多数情况适用TCP。
报文格式
UDP报文:
TCP报文:
TCP 和 UDP 分别对应的常见应用层协议
基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH
基于UDP的应用层协议:DNS、TFTP、SNMP
HTTP1.0 和 HTTP2.0 的区别
- 长连接,
Connection: Keep-Alive
,以便其他请求复用,只要任意一端没有明确提出断开连接,则保持TCP连接状态 - 多路复用
- HTTP1.0 基于文本格式,而 HTTP2.0 基于二进制格式
- 头部压缩
HTTP 和 HTTPS 的区别
- HTTP是明文传输,HTTPS使用SSL加密传输
- HTTP在三次握手后即可传输报文,而HTTPS三次握手后还要进行SSL握手
- HTTP端口是80,HTTPS端口是443
SSL通过先非对称加密的方式传输密钥,再用密钥对传输数据进行对称加密,来解决窃听风险。之所以要两种加密方式混用,是因为对称加密比非对称加密要快,因此数据传输使用对称加密,而非对称加密可以实现交换密钥。
客户端如何校验证书合法性
发送端数字证书分为两部分,一部分是公钥等信息,另一部分是数字签名。将第一部分的信息通过哈希算法计算出哈希值,再用私钥加密,即是数字签名。
客户端收到证书后,根据公钥解密数字签名得到哈希值,再与自己计算的哈希值比较,相同则说明合法。
由于中间人无法得知私钥,即便篡改了证书也无法修改正确的哈希值,因此无法伪造。
HTTPS抓包
其实就是中间人攻击的原理。需要将抓包用的证书添加到浏览器,作为中间人。
GET 和 POST 的区别
- GET用于获取资源、读取数据;POST用于修改和写入数据
- GET把参数包含在URL中,POST通过request body传递参数,因此POST能发送的数据更大,GET有URL长度限制
- POST多几个首部字段,如content-type,POST能发送更多数据类型,GET只能发送ASCII字符
- GET会将静态资源缓存起来,POST不会,因此POST更安全
- POST在真正接收数据之前会先将请求头发送给服务器进行确认,服务器返回100 Continue响应,然后才真正发送数据,因此GET比POST快
常见请求头和响应头
请求头 | ||
---|---|---|
Accept | 指示客户端可以接受的内容类型,例如text/html,application/json等 | |
Accept-Charset | 可接受的字符编码类型 | Accept-Charset: utf-8 |
Connection | 客户端(浏览器)想要优先使用的连接类型 | Connection: keep-alive |
Cookie | ||
Content-Length | 以8进制表示的请求体的长度 | Content-Length: 348 |
Content-Type | Content-Type: application/x-www-form-urlencoded | |
Host | 服务器的域名以及服务器所监听的端口号 | Host: www.baidu.com:80 |
User-Agent | 浏览器的身份标识字符串 | User-Agent: Mozilla |
响应头 | 说明 | 示例 |
---|---|---|
Access-Control-Allow-Origin | 指定哪些网站可以跨域源资源共享 | Access-Control-Allow-Origin: * |
Content-Length | 响应消息体的长度,用8进制字节表示 | Content-Length: 348 |
Date | 此条消息被发送时的日期和时间 | Date: Tue, 15 Nov 1994 08:12:31 GMT |
Last-Modified | 所请求的对象的最后修改日期 | Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT |
Set-Cookie | 用于在客户端设置 Cookie,通常用于会话管理或跟踪用户状态 |
FTP 和 SFTP 的区别
FTP,File Transfer Protocol,文件传输协议
SFTP,Secure File Transfer Protocol,安全文件传输协议
- SFTP通过提供加密的连接和安全的数据传输来提高安全性,而FTP的安全性较低
- FTP使用TCP/IP协议,而SFTP是SSH协议的一部分
- FTP使用21端口,而SFTP通过SSH协议的22端口
MQTT 和 HTTP 的区别
- MQTT以数据为中心,而HTTP是以文档为中心的
- MQTT生成的消息大小较小,因为它使用二进制格式。HTTP生成的消息大小更大,因为它使用ASCII格式
- MQTT是轻量级和发布/订阅模型,HTTP是基于请求/响应模型