TCP/IP五层结构及常见概念
应用层
HTTP运行在TCP之上,有如下缺点:传输的内容是明文,客户端和服务端无法验证对方的身份。为了解决这两个问题,提出了HTTPS。HTTPS = HTTP + SSL/TLS,相当于在HTTP和TCP之间加了SSL/TLS(早期版本是SSL,后来逐渐升级为TLS)。
HTTPS必须使用域名,因为CA的证书是授权给域名的,不是IP。如果确实需要使用Https://ip的方式,需要在代码中过掉CA的验证过程,否则无法正常建立连接。比如下面这个例子,我们点击继续前往后(相当于过掉CA验证),就可以使用https://ip的方式访问网站了。
HTTPS通信过程:
传输层
TCP,UDP是协议,通过操作系统的socket实现,应为TCP,UDP协议使用范围比较广,所以socket封装了常用的接口,listen,accept等接口。除了TCP,UDP,scoket还可以实现其它协议,只是不常见。
网络层
封包传播过程中,IP是不变的,所以服务端可以从封包中拿到客户端的IP。
域名与IP :
最开始,网络中使用IP作为设备地址,后来为了便于记忆,产生了域名的概念。但是你要知道,使用域名浏览网页或者编写程序,到了真正访问网络时使用的是IP,域名到IP的转换过程由DNS完成。
设备联网时,ISP(Internet Service Provider)会给设备分配IP,下发DNS地址。默认情况下,我们使用运营商提供的DNS,但是国内运营商为了利益会各种劫持,比较恶心,推荐两个比较好的公共DNS:
- 谷歌公共DNS:8.8.8.8
- 国内相对好一点的公共DNS:114.114.114.114
通过ping命令,可以查看域名对应的IP
数据链路层
封包传播过程中,每进入一个局域网,MAC地址更改一次,所以服务端不能从封包中拿到客户端的MAC。
相关概念
对称加密,非对称加密
加密算法分为两种:
- 对称加密:加密与解密使用相同的密钥,速度快,安全性低
- 非对称加密:加密与解密使用不同的密钥,速度慢,安全性高
PKI(Public Key Infrastructure),CA(Certificate Authority),证书
假设A有一套公钥,私钥,将其中的公钥给了B,私钥自己保管。
PKI :
PKI基于非对称加密原理,有两个密钥:公钥和私钥,公开公钥,私钥自己保管。
PKI有两个作用:
- 加密:B用公钥加,A用私钥解,即使C拿到了通信内容,也看不到明文。这里有一个缺点,A发给B的数据是用A的私钥加密的,任何拿到公钥的人都可以看到明文,你能想到解决方案吗?想不到的话,可以看一下HTTPS是怎么做的。
- 签名:A用私钥加,B用公钥解,如果解密成功,说明通信内容肯定来自A,用于数据的不可伪造性。
CA 与 证书 :
在A将自己的公钥发送给B的过程中,如果有人做了拦截,替换为自己的公钥,整个PKI体系就瓦解了。为了解决这个问题,提出了CA的概念,即增加一个可信机构。A将自己的公钥发送给CA,CA用自己的私钥加密生成证书返还给A。B与A建立HTTPS链接时,A不是将自己的公钥发送给B,而是将自己的证书给B,B拿到证书后,验证证书是否来自CA,如果来自CA,说明证书是可信的。
参考链接:阮一峰: 数字签名是什么