网络体系结构
五层协议体系结构
应用层 HTTP,SMTP,FTP
运输层 TCP,UDP
网络层 IP
链路层
物理层
TCP/IP体系结构
应用层 HTTP,SMTP,FTP
运输层 TCP,UDP
网络层 IP
网络接口层
UDP(User Datagram Protocol,用户数据报协议)
特点
- 面向无连接
- 不可靠
- 数据报文段传输
- 传输效率快
- 所需资源少
- 首部字节 8个字节
TCP(Transmission Control Protocol ,传输控制协议)
特点
- 是面向连接
- 可靠
- 字节流传输
- 传输效率慢
- 所需资源多
- 首部字节20-60
三次握手
图片来源:https://mp.weixin.qq.com/s/t7ZYT6wBBbFYVBPOSztpRg
- 第一次握手:建立连接时,客户端发生SYN(Seq=x)包到服务器,并进入SYN_SEND状态,等待服务器确认。
- 第二次握手:服务器收到SYN包,打开客户端连接,发送一个 SYN-ACK 作为答复,Seq =y,ACK=x+1
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=y+1)
举例:
- 小明给小红打电话,接通了后,小明说喂,能听到吗,这就相当于是连接建立。
- 小红给小明回应,能听到,你能听到我说的话吗,这就相当于是请求响应。
- 小明听到小红的回应后,好的,这相当于是连接确认。在这之后小明和小红就可以通话/交换信息了。
四次挥手
在连接终止阶段使用四次挥手
图片来源:https://mp.weixin.qq.com/s/t7ZYT6wBBbFYVBPOSztpRg
- 客户端发送一个FIN,用来关闭客户端到服务器的连接,并进入FIN_WAIT_1状态
- 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1
- 当客户端收到服务器发送的 ACK 响应后,客户端就进入 FIN_WAIT_2 状态,然后等待来自服务器的 FIN 消息
- 服务器发送 ACK 确认消息后,一段时间(可以进行关闭后)会发送 FIN 消息给客户端,告知客户端可以进行关闭。
- 当客户端收到从服务端发送的 FIN 消息时,客户端就会由 FIN_WAIT_2 状态变为 TIME_WAIT 状态。
- 客户端发回ACK报文确认,并将确认序号设置为收到序号加1
- 在等待一段时间后,连接关闭,客户端上所有的资源(包括端口号和缓冲区数据)都被释放。
举例:
- 小明对小红说,我所有的东西都说完了,我要挂电话了。
- 小红说,收到,我这边还有一些东西没说。
- 经过若干秒后,小红也说完了,小红说,我说完了,现在可以挂断了
- 小明收到消息后,又等了若干时间后,挂断了电话。
HTTP(Hypertext Transfer Protocol,超文本传输协议)
Get 和 Post 区别
- Get:
请求数据在URL后
传输数据就会受到URL长度的限制
不安全 - Post:
请求参数在请求体中
由于不是通过URL传值,理论上数据不受限
相对安全
HTTP请求格式
图片来源:https://www.cnblogs.com/lmh001/p/9928517.html
HTTP响应格式
响应行(状态行): HTTP 版本、 状态码、 状态消息
响应头: 消息报头, 客户端使用的附加信息
空行: 响应头和响应实体之间的, 必须的。
响应实体: 正文, 服务器返回给浏览器的信息
图片来源:https://www.cnblogs.com/lmh001/p/9928517.html
HTTP1.1版本新特性
- 长连接的通信方式,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
- 管道网络传输,即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
- 支持断点续传,通过使用请求头中的 Range 来实现
一次完整的HTTP请求
- DNS解析,查找过程:浏览器缓存、本机 hosts 文件、网络中 DNS 查询
- TCP连接
- 发起HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
Http与Https的区别
- HTTP 以http://开头,而HTTPS 以https://开头
- HTTP是不安全的,HTTPS是安全的
- HTTP默认端口80,HTTPS默认端口443
- HTTP无法加密,而HTTPS对传输数据进行加密
- HTTP无需证书,而HTTPS需要CA机构颁发的证书
Https请求过程
- 服务器把自己的公钥注册到CA;
- CA用自己的私钥将服务器的公钥数字签名并颁发数字证书;
- 客户端发起请求,拿到服务器的数字证书后,使用CA的公钥(CA的公钥已事先置入到浏览器或者操作系统里)校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;
- 客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端;
- 服务端收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key;
- 服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;
- 客户端使用随机Key对称解密密文,得到HTTP数据明文;
- 后续HTTPS请求使用之前交换好的随机Key进行对称加解密。
对称加密
密钥只有⼀个,加密解密为同⼀个密码,且加解密速度快,典型的对称加密
算法有DES、 AES等;
非对称加密
密钥成对出现(且根据公钥⽆法推知私钥,根据私钥也⽆法推知公钥),
加密解密使⽤不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称
加密速度较慢,典型的⾮对称加密算法有RSA、 DSA等