1.浏览器进行地址解析,然后DNS域名解析。
- 浏览器进行地址解析,会补全如源端口:80等信息
dns域名解析分为以下步骤
1.先查看浏览器dns缓存表中是否有域名对应的ip地址
2.如果没有,查看操作系统的dns缓存中是否有对应的ip地址
3.如果没有,就直接到本地区的dns服务器发起请求
4如果还是没有。就直接到root server服务器上发起请求解析
2.通过ip寻址和ARP协议,找到目标服务器ip地址, 根据tcp协议三次握手建立连接。
IP寻址:根据目的ip与子网掩码进行按位与操作,判断是否在同一个网段,如果是在同一个网段则交由交换机进行转发,交换机进行转时查寻mac地址转换表
根据mac映射端口,如果不在同一个网段,发送数据报到网关。第一步先查找本机ARP缓存表,基于ARP协议将ip地址转换为mac地址,如果在缓存表中找不到则发送给交换机,交换机发送询问网关mac的广播数据报,要求网关返回mac地址,网关mac返回后会更新ARP缓存表,将http数据发送给网关。
路由器接受分用数据报,并封装数据报,根据NAPT协议将局域网ip和端口映射为公网ip和端口,根据路由技术(路由算法)找到通往目的主机最近的路,路途中的设备进行分用,封装,直到抵达目的主机
根据tcp协议客户端与浏览器进行三次握手建立连接
三次握手步骤:1、主机A发送syn到主机B请求建立A->B的连接,此时主机A的状态为syn_sent。2.主机B回复ack+syn,收到主机A的连接请求,并要求建立B->A的连接,此时主机B的状态为syn_rcvd.3.主机A回复第二步的syn的ack。主机A的状态为established,建立A到B的连接,主机B接受到第三步ack,建立B->A的连接,主机B的状态置为established。
3.发送Http请求等待响应。
浏览器会对请求体进行封装,封装格式为
请求行:GET baidu.com /HTTP/1.0 (请求的方法,url,请求协议)
请求头:以键值对方式如 cookie: session-id=18adahb1y
空行
请求正文
4.服务器处理请求 (以tomcat举例)
服务器通过解析url找到contentpath根据contentpath找到对应的那个项目资源,根据servletpath找到对应的servlet,根据配置文件实列化servlet调,servlet用service方法进行处理资源,tomcat封装响应体,通过socket发送给客户端。
5.返回响应结果给客户端
在返回的响应体中需要关注content-type字段和状态码, content-type的值不同决定浏览器处理的方式不同,如果时text/html则以网页的方式显示,如果是text/plain方式则以文本方式显示到客户端等
常见的类型有:
常见的状态码
6关闭tcp连接,四次挥手
1.主机A发送fin到主机B,请求关闭A到B的连接。
2.主机B回复ack,主机B的状态置为close_wait状态。
3主机B发送fin请求关闭B到A的连接
4主机A回复ack(第三步的fin),状态置为time_wait状态,主机B收到第四步数据报,状态置为close,主机A经过2msl(超时等待后)状态置为closed。
7浏览器解析html;
浏览器通过解析htnl生成dom树。