文章目录
一 表象
1.1 输入url -> 跳转页面
我们浏览页面,通常分成两步:
- 输入url:填入网址
- 跳转页面:点击跳转
- 结果:要么页面显示出来,要么会失败,失败后大家最常见的就是404,其实不止这一种状态码
1.2 状态码
状态码一共有五种,分别以1-5开头:
- 1XX
- 服务器正在处理请求
- 2XX
- 成功码 请求处理成功
- 3XX
- 重定向 需要附加操作来完成请求
- 4XX
- 失败码 客户端错误 服务器无法处理请求
- 5XX
- 失败码 服务器错误 服务器处理请求出错
二 实际过程
- DNS域名解析
- TCP连接
- 发送HTTP请求
- 服务器解析并返回HTTP报文
- 浏览器解析渲染
- 连接结束
2.1 输入url - > 解析url(应用层)
拿百度来说,我们输入的是www.baidu.com,这个是符合人类命名习惯的域名,但是计算机可不认识,因此需要把域名解析成计算机认识的地址,此处用到的解析协议是DNS(域名解析),可以将域名解析成对应的ip地址,这样计算机就知道这个资源在哪了
2.2 建立连接(传输控制层)
知道资源在哪之后,我们发送我们的消息,要建立连接啊,这个过程有点类似于现在的快递,知道收货人地址后,要建立物流连接。不同于快递的是,我们此处使用的tcp协议,会使用三次握手的方式来建立连接
2.3 发送连接数据(网络层)
三次握手中,请求是以数据的形式发送的,这个数据以什么格式发送才能被网络认识呢?这里我们在网络层使用了ip协议,将数据封城ip数据包的格式传输
2.4 请求在网络中游走(数据链路层)
封装成ip数据包后需要再真实的数据链路中游走,在路由器之间传递时使用OPSF协议,寻址时使用了ARP协议(将ip地址解析为MAC地址)
2.5 服务器处理请求
2.6 服务器发回响应
2.7 显示网页(应用层)
网页的显示,都使用了HTTP协议(超文本传输协议)
三 访问过程中用到的协议或手段解析
3.1 DNS(域名解析系统)
是解决上网时机器命名的一种方法,我们想要访问别人,首先要知道别人家的地址,DNS就是将域名解析成计算机可以认识的ip地址
3.2 TCP(传输控制协议)
TCP是一种面向连接的,可靠的数据传输协议,TCP保证可靠的方式如下:
- 分割数据:将数据分成一个个TCP认为合适大小的数据块
- 标记顺序:将这些数据块排好序打上序号,确保传过去后按照顺序排好
- 丢弃重复:接收端,TCP会丢弃掉重复的数据块
- 流量控制:TCP接收端和发送端都有一个缓冲区,当发送数据速度超过缓冲区大小,会自动发送端放慢发送速度,防止包丢失。此处使用的协议是可变大小的滑动窗口协议
- 拥塞控制:网络拥塞时,减少数据发送
- ARQ:自动请求重传,每发完一个分组,就停下来等待接收端的确认,如果接收端反馈没收到数据,则重发一次
- 超时重传:每次发送使用计时器计时,如果在时限内没有收到接收端的确认,则默认数据没送到,再发一次