前言:写这篇播客的目的,是因为自己最近在补习http请求和tcp协议的相关知识.虽然这些知识,在平常的日常开发中,并不能帮助你敲更好的代码.但是在某些特定情境中,可以让你更好的理解,为什么要这样做.这样做有什么好处.所以写这篇播客,来记录一下,我学习的路程.
我叫佑子,一名无名的前端copy机.下面正文开始
TCP协议
1.TCP协议是什么?
TCP(Transmission Control Protocol 传输控制协议) 是一种面向连接(连接导向)的,可靠的,基于IP的传输层协议
TCP使用校验,确认和重传机制来保证可靠传输
而HTTP协议 就是建立在TCP/IP协议之上的一种应用
2.一次完整的HTTP服务过程是什么
当我们在web游览器的地址栏中输入:www.baidu.com,具体发生了什么?
- 对
www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址 - 根据这个IP,找到对应的服务器,发起TCP的三次握手
- 建立TCP连接后,发起HTTP请求
- 服务器响应HTTP请求,游览器得到html代码
- 游览器解析html代码,并请求html代码中的资源(如js,css,图片等) (先得到html代码,才能去找这些资源)
- 游览器对页面进行渲染呈现给用户
- 服务过程完毕,关闭TCP连接,四次挥手 注: 1.DNS怎么找到域名的?
DNS域名解析采用的是递归查询的方式,过程是,先去DNS缓存 -> 缓存找不到就去根域名服务器 -> 根域名又会去找下一级,这样递归查找之后,找到了,给我们的web服务器
3.TCP三次握手理解(双方确认)
TCP是一个端到端的可靠面相连接的协议
HTTP基于传输层TCP协议不用担心数据传输的各种问题(当发生错误时,可以重传)|根据这个IP,找到对应的服务器,发起TCP的三次握手(tcp三次握手四次挥手)
首先
- 游览器向服务器发起请求,说要建立链接
- 服务器说;我同意了,你确定要建立链接吗
- 游览器说:确定 到此,TCP连接已经建立
可能到这里,有些小伙伴不理解,问什么还需要游览器发送一次确定,才可以建立连接.
如果没有第三次握手,假设游览器再第二次握手的时候,已经发起建立连接,而游览器在这时候,不需要建立连接了,关闭了.然而服务器不知道这回事,一直在这里占用TCP连接,对客户端是没有什么影响,但是特别占用服务器的性能.所以需要第三次握手来确定一下
4.关闭TCP连接四次挥手的理解(客气挽留)
关闭连接(四次挥手)
这和有礼貌的好友道别一样:(a:客户端b:服务端)
- 一开始A想要回家离开,但是呢?怕B还有事情要交代,那么呢?只好先向B打招呼,我要走了,请求停止交谈(此时,a到B的连接没有断开,依旧可以进行通信);
- 同意A的请求,说好的,但是我这里可能还有一些话(数据)没说完。我检查看看,你等等,等我说完你再走。
- B确实没啥要补充的了,就告知你我可以散伙了
- A说好的,知道了,88;(B得知A走开了,关闭了自己的连接)
完整的一次http请求流程才算结束