浏览网页的详细过程
2016-07-26 15:54
218 查看
浏览网页的详细过程
当我们在浏览器中输入一个网址之后,我们只看到返回了我们所需的信息,而浏览器背后有着怎样的故事,让我们一起来看一看!请求、应答过程
连接输入一个请求的时候,按下回车,浏览器自动的将我们请求的地址封装成了HTTP报文,HTTP报文就是一串字符串,然后通过socket发送到服务器对应的IP和端口上去。如果URL不包含端口号,则使用协议的默认端口号。
若我们输入的是域名的话,就需要使用DNS解析,把域名转换为IP。
DNS查询方法:递归与重复
请求连接成功
请求连接成功建立后,开始向web服务器发出请求,这个请求一般是GET或POST命令,GET 路径/文件名 HTTP/1.0
应答
web服务器收到请求,进行处理。从它的文档空间中搜索子目录,如果找到该文件,web服务器把该文件内容传送给相应的web浏览器。
为了告知浏览器,web服务器首先会传送一些HTTP头信息,然后传送具体内容,HTTP头信息和HTTP体信息之间用一个空行分开。
关闭连接
当应答结束以后,web浏览器与web服务器必须断开,以保证其他web浏览器能够与web服务器建立连接。
常用的HTTP头信息:
HTTP 1.0 200 OK :web服务器应答的第一列,列出服务器正在运行端HTTP版本号和应答代码
MIME——Version:1.0 :指示MIME类型的版本
Content_type :指示HTTP体信息的MIME类型,如content_type:txt/html指示传送的数据是HTML文档
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
客户端数据包流动过程
应用层根据当前的需求和动作,结合应用层协议,确定发送的数据内容,把数据放到一个缓冲区内,形成应用报文data,交给下层处理。
传输层
报文封装传输层报头,如TCP协议,主要包含端口号以及TCP的各种控制信息。利用这些信息,比如TCP首部中的序列确认号,根据这些数字,发送的一方不断的进行发送等待确认序号,根据这些数据段后,会开启一个定时器,只有收到一个确认才会发送下一个。如果超过时间仍未收到确认再重发数据,通过TCP协议,控制了数据包的发送序列的产生,不断调整发送序列,实现流控数据和数据完整。
网络层
待发送的数据传输到网络层,封装网络层包头,含有目的IP和源IP。网络层开始负责数据包的传送,选择路由器,到达目的地。根据目的IP地址,查找下一跳路由的地址,首先查找本机路由表
查找过程:
根据目的IP,得到目的IP的网络号,若在同一内网,则直接发送,若不是,则查找路由表,找到下一跳,若找不到,路由表中有默认网关,IP用默认网关地址传送数据。数据包中含有一个最大路由跳数,超过这个数字,就会丢弃该包。路由器收到数据包之后,只查看网络层的包裹数据,传输层的数据对他来说是透明的。查找到下一跳IP地址之后,还需要知道MAC地址,数据包继续流向下一层。
链路层
将MAC地址及链路层的控制信息加到数据包中,形成Frame,Frame在链路层协议下完成相邻节点间的数据传输,完成连接建立,控制速度。
物理层
物理层负责数据以bit为单位从主机传输到下一个目的地。
服务端接受数据:从物理层向应用层拆封装,与客户端过程相反。
相关文章推荐
- Oracle中游标返回多条数据的情况
- CSS3之transition和animation动画
- 打造Android微信朋友圈下拉刷新控件
- Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)
- C# 遍历文件夹下所有子文件夹中的文件,得到文件名
- Summer day 13 & 14
- LeetCode之查找第一个未出现的正整数
- laravel简单的流程
- 女人当自强 不要男人又何妨
- Android插件化(一)
- 什么是repo
- Java中的线程Thread总结
- 数组专题
- POJ 1423 Big Number
- tomcat7安装
- linux中ACL的学习
- 总结 XSS 与 CSRF 两种跨站攻击
- 1.2 文本域(含可编辑表格实现)
- zabbix一键安装方式
- opencv学习资料