1.根据域名到DNS中找到IP
2.根据IP建立TCP连接(三次握手)
3.连接建立成功发起http请求
4.服务器响应http请求
5.浏览器解析HTML代码并请求html中的静态资源(js,css)
6.关闭TCP连接(四次挥手)
7.浏览器渲染页面
一、解析DNS域名
1.浏览器查找自己的DNS缓存,如果有直接返回,如果没有进行步骤二
2.操作系统查找自己的DNS缓存,如果有直接返回给浏览器,如果没有进行步骤三
3.操作系统查找自己的本地host文件,如果有返回给浏览器,如果没有则进行步骤四
4.操作系统向本地域名服务器发起请求,查找本地DNS缓存,如果有,返回给操作系统,然后操作系统返回给浏览器,如果没有进行步骤五
5.操作系统向根域名服务器发起请求得到顶级域名服务器的IP,然后根域名服务器向顶级域名服务器发起请求得到权限域名服务器的IP,顶级域名服务器再向权限域名服务器发起请求得到IP,本地域名服务器返回给操作系统IP,同时将IP缓存起来,操作系统将IP返回给浏览器,同时将IP缓存起来。
二、过程中使用到的协议
该过程中使用到了ARP,IP,SOFP
ARP(地址解析协议):他主要解决的是同一个局域网内主机或路由器IP地址和MAC地址之间的映射问题。
工作过程:当源主机要发送数据的时候,他会查看自己的ARP高速缓存中是否有目的主机IP地址对应的MAC地址,如果与,则直接发送,如果没有,他就会向本网段所有主机发送ARP请求分组,接到请求的主机查看目的IP与自己的IP是否相等,如果不等就忽略,如果相等,就把源主机的IP和MAC写入自己的ARP高速缓存,如果之前有就覆盖掉,然后把自己的MAC写入ARP相应包,源主机接到ARP响应包后把目的主机的IP和MAC地址写入ARP高速缓存,并且利用此信息发送数据。
路由选择协议
1.内部网关协议
1)RIP协议
RIP基于UDP的应用层协议,他认为一个好的路由是他通过的路由器少,RIP允许一条路径最多可以包含15个路由,16个即为不可达了。
工作过程:假设路由器R0向R1发送一个报文段
首先修改R0发来的RIP报文中所有的项目,把吓一跳字段的地址改为R0,把所有距离字段值加1,
对于修改后的RIP报文的每一项进行如下步骤,
步骤一、首先看原来的路由表中是否有目的网络N,如果没有直接加入到路由表中,如果有进行步骤2
步骤二、然后看吓一跳,如果吓一跳的地址是R0则用新的项目替换原来的项目,如果吓一跳不同则进行步骤三
步骤三、对比距离,如果距离小于源路由器的项目,那么更新,否则什么都不做。
首先将R0发来的路由更新信息的距离都+1,下一跳都改为R0
Net1在源路由表中没有所以直接写入,Net2中吓一跳相同,直接覆盖原路由表中的Net2那一行,Net3的吓一跳不同,所以选择路径最小的。
2)OSPF(最短路径优先)
OSPF是网络层协议基于IP,当路由的链路状态发生变化时,他会使用洪泛法向本自治系统中所有路由发送自己的的链路状态(链路状态就是自己和那些路由相邻)
2.外部网关协议
BGP
BGP是不同自治系统路由器之间交换路由信息的协议,他只是力求寻找能达到目的网络的比较好的协议,而并非最佳路由。
BGP发言人:每一个自治系统的管理员都需要至少有一个路由器作为BGP发言人,BGP发言人一般是边界路由器,当然也有不是边界路由器的情况。
BGP交换路由信息:BGP发言人如果想和别的自治系统的BGP发言人交换信息(到达某个网络所要经历的一系列AS),他需要先建立起TCP连接,连接建立成功后在此链接上交换BGP报文,建立BGP会话,使用TCP是因为可以提供可靠的服务,也简化了路由选择协议。
三、HTTP报文格式
Http请求报文结构
http报文结构由请求行,请求头,空行、请求正文组成(Get请求,没有请求正文)
请求行:请求方法、url、版本号
请求头:Host:接收请求的服务器地址,可以是ip也可以是端口号
User-Agent:发送请求的应用程序名称
Connection:指定与连接相关的属性,Connection:Keep-Alive
Accept-Charset:指定可接收的编码格式
Accept-Encoding:指定可接收的数据压缩格式
Accept-Language:指定可以接收的语言
空行:表示请求头结束
请求正文:可选,get就没有请求正文
Http响应报文结构
http响应报文由状态行、响应头、空行、响应正文四部分组成
状态行:协议版本、状态码、状态描述,之间用空格分开
响应头:Server:服务器应用程序软件的名称和版本号
Content-Type:相应正文的类型(是图片还是二进制)
Content-Length:相应正文的长度
Content-Charset:相应正文的使用编码
Content-Encoding:相应正文使用的数据压缩格式
Content-Language:相应正文使用的语言
空行:表示响应头结束
响应正文