本篇呢:主要是对自己最近提升自己知识储备能力的一个分享,虽然说吧,我们大学学习《计算机网络》这门可能,自从步入到 JAVA 的开发过程中,接触微服务、消息中间件、缓存中间件等。始终没有 GET 到当初学它有什么卵用?让我来带领你进入你未知的时间,打开你未知的大门,收获未知的技能。
1、一次完整的HTTP网络请求过程
同样这个也是面试几乎都会问到的技能之一,虽然看起来很简单,但其实都是连锁反应,问完就可以无缝衔接 三次握手、四次挥手 的知识点上。
从我们在浏览器的地址栏输入 http://blog.csdn.net/seu_calvin 后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了 域名解析
(根据域名获取 IP 地址)、TCP的三次握手
、建立TCP连接后发起HTTP请求
、服务器响应HTTP请求
、浏览器解析html代码
,同时请求html代码中的资源(如js、css、图片等)
、最后浏览器对页面进行渲染并呈现给用户
。下面分别介绍一下每个过程。
- 域名解析
- a、Chrome浏览器会首先搜索浏览器自身的DNS缓存,大概能存储1000条, 如果在 a 中未找到,那么会搜索操作系统的 DNS 缓存
- 如果 还未找到,会尝试读取 操作系统的 hosts 文件,找到对应的 ip 地址
- 如果 c 中未找到,浏览器首先会找 TCP/IP 参数中设置的 本地DNS 服务器,如果要查询的域名包含在本地配置的区域资源中,则完成域名解析,否则根据本地的DNS 服务器会请求根 DNS 服务器。
- 本地DNS会把请求发至13台根DNS,根DNS服务器收到请求后会返回负责这个域名(.net)的服务器的一个IP,本地DNS服务器使用该IP信息联系负责.net域的这台服务器。这台负责.net域的服务器收到请求后,如果自己无法解析,会返回.net域的下一级DNS服务器地址(blog.csdn.net)给本地DNS服务器。以此类推,直至找到。
2、TCP/IP 协议的三次握手 和 四次挥手。
学 三次握手 和 四次挥手之前,首先你应该对 报文 格式有一定的了解,
请求报文:主要有几部分构成,第一个 就是 16位源端口号、16位目的端口号