图 1 TCP/IP 五层结构及常见概念
一 应用层
应用层常见的概念有: HTTP 和 HTTPS.
HTTP 运行在 TCP 之上, 有如下缺点: 传输的内容是明文, 客户端和服务端无法验证对方的身份. 为了解决这两个问题, 提出了 HTTPS.HTTPS = HTTP + SSL/TLS, 相当于在 HTTP 和 TCP 之间加了 SSL/TLS(早期版本是 SSL, 后来逐渐升级为 TLS).HTTPS 通信过程:
图 2 HTTPS 的通信过程
HTTPS 通信过程中主要用到了非对称加密技术. 非对称加密有两个密钥: 公钥和私钥, 公开公钥, 私钥自己保管. 用公钥加密可以用私钥解密, 但是无法用公钥解密, 反之亦然. 其中 PKI 是非对称加密技术中的一种规范.
PKI(Public Key Infrastructure) :
PKI 有两个作用: 加密和签名. 假设 A 有一套公钥, 私钥, 将其中的公钥给了 B, 私钥自己保管.
加密: B 用公钥加, A 用私钥解, 即使 C 拿到了通信内容.
签名: A 用私钥加, B 用公钥解, 如果解密成功, 说明通信内容肯定来自 A, 用于数据的不可伪造性.
CA(Certificate Authority) 与 证书 :
在 A 将自己的公钥发送给 B 的过程中, 如果有人做了拦截, 替换为自己的公钥, 整个 PKI 体系就瓦解了. 为了解决这个问题, 提出了 CA 的概念, 即增加一个可信机构. A 将自己的公钥发送给 CA,CA 用自己的私钥加密生成证书返还给 A.B 与 A 建立 HTTPS 链接时, A 不是将自己的公钥发送给 B, 而是将自己的证书给 B,B 拿到证书后, 验证证书是否来自 CA, 如果来自 CA, 说明证书是可信的.
HTTPS 必须使用域名, 因为 CA 的证书是授权给域名的, 不是 IP. 如果确实需要使用 Https://ip 的方式, 需要在代码中过掉 CA 的验证过程, 否则无法正常建立连接. 比如下面这个例子, 我们点击继续前往后 (相当于过掉 CA 验证), 就可以使用 https://ip 的方式访问网站了.
图 3 获取谷歌域名的 IP
图 4 使用 https://ip 的方式访问谷歌
二 传输层
传输层常见的概念有: TCP 和 UDP.
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 :
图 5 获取淘宝域名的 IP
四 数据链路层
数据链路层常见的概念有: MAC.
封包传播过程中, 每进入一个局域网, MAC 地址更改一次, 所以服务端不能从封包中拿到客户端的 MAC.
参考链接:
1 http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
来源: https://www.qcloud.com/developer/article/1160851