HTTP、HTTPS、TCP/IP总结
协议分类
HTTP属于应用层协议,TCP属于传输层协议,IP属于网络层协议,一个HTTP协议由IP协议包体包含了TCP协议内容,而TCP协议包体又包括了HTTP协议内容,就像一个洋葱。
HTTP请求历程
一个HTTP请求的完整历程,首先会根据URL解析请求的地址和端口,此时的地址拿到的一般是域名,因此还需要根据DNS服务器获取域名的真实IP。
NDS服务查询完毕后,此时浏览器会调用Socket库将HTTP协议里的内容包装成TCP或者UDP协议包。
光靠TCP协议还无法具备传输功能,因此TCP还需要借助IP协议来定位目标服务器在互联网中的位置,光靠IP依旧无法准确定位,因为一个IP可能有好几台设备使用,要明确要传输的目标还得在IP头部加上目标的MAC地址。
最后由网卡将数字信息转换为光信号经网线发送出去,将服务器通过交换机和路由器接收到请求包后像剥洋葱一样一层一层解析包中内容。
小结,一个HTTP请求总共要经历如下几层协议:
应用层:定义数据格式,并按照对应的格式解读数据。 –HTTP
传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序。 –TCP
网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发。 –IP
链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据。 –物理传输
此外 IP 中还包括 ICMP 协议和 ARP 协议。
1、ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
2、ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。
TCP为什么需要三次握手
面试中问烂的问题了,在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手。这个所谓的「连接」,只是双方计算机里维护一个状态机。
一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。
服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。客户端收到服务端发送的 SYN 和 ACK 之后,发送 ACK 的 ACK,之后处于 ESTABLISHED状态,因为它一发一收成功了。
服务端收到 ACK 的 ACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。所以三次握手目的是保证双方都有发送和接收的能力。
TCP为什么需要四次挥手
同样是面试中经常问的问题,简单来说就是当客户端发送FIN(断开连接)请求时服务器并不是马上断开连接,因为此时对方可能还处于数据的收发中,也就是说之前发送的数据可能还未接收完。
当客户端数据接收完毕后,会返回FIN和序号+1的回复表示已经接收完毕,可以断开连接了,此时服务收到这条回复才真的断开连接,借用一张图表示如下:
TCP为什么是可靠传输协议
通过上图可知,TCP是通过确认号(ACK)**和序号(SEQ)**,来保证数据顺序以及丢包重发,即某个带序号的包没有收到回复,那么TCP会重发该包直到确认送达。
追加内容-HTTPS总结
更新日期:2021-6-7 14:07 ,1202年了,基本上所有的网站都使用了HTTPS,已经少有网站使用HTTP了,在这里总结下为什么HTTPS传输是安全的。
为何需要HTTPS?
因为HTTP是明文传输,可以被中间人攻击。
如何保证传输安全?
所有请求加密传输,客户端请求服务器获取公钥 -> 服务器返回公钥 -> 客户端生成密钥发送给服务器 -> 最终所有通信都使用该密钥加密再传输。
由于密钥只有客户端和服务端持有,中间人即使截获也无法修改内容,因此传输过程是安全的。
但是这是理想情况,中间人可以截获服务器返回的公钥并返回自己生成的私钥给服务器,因此这个时候就要引进CA证书机构。
CA证书机构保证密钥传输安全
既然直接传输无法保证密钥安全,所以引进一个可信任的第三方机构来发放证书,证书中包括公钥,浏览器从证书获取公钥,且证书使用了数字签名来防止被篡改。
浏览器通过该机构的公钥将证书内容做HASH运算并比较运算结果来检测证书是否被篡改。
证书机构的公钥从何而来?如何保证证书机构的公钥是可信的?
浏览器和操作系统会预装可信任的CA机构的根证书,根证书中附带了CA机构的公钥(这就是为什么不要随便安装证书)。
总结,HTTPS = 加密传输+CA证书机构
关于TCP详细的文章推荐
在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤? - 小林coding的回答 - 知乎
https://www.zhihu.com/question/34873227/answer/1657140394
- 本文作者: reiner
- 本文链接: https://reiner.host/posts/cc861966.html
- 版权声明: 转载请注明出处,并附上原文链接