网址访问过程

我们来看当我们在浏览器输入http://www.baidu.com/ 幕后所发生的一切。

1.当我们输入这样一个请求时,因为socket是通过IP和端口建立的,所以之前还有一个 DNS解析过程 ,获得IP地址,如果url里不包含端口号,则会使用该协议的默认端口号。
DNS的过程是这样的 :先从主机的高速缓存中查找,如果存在直接返回,如果不存在,则需要向本地域名服务器递归查询,如果本地域名服务器高速缓存中诶有这个IP地址,则本地域名服务器需要向根域名服务器进行迭代查询或者递归查询。
递归查询:如果主机所查询的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器替该主机继续发出查询报文,而不是让主机自己进行下一步的查询,因此递归查询的返回结果或者是IP地址,或者是报错,表示无法查询到这个IP地址。
迭代查询:当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出需要的IP地址,要么告诉本地域名服务器下一步需要向哪个域名服务器进行查询,然后本地域名服务器继续向其他的域名服务器查询。
这两种方式和forward,redirect的意思是一样的。
2.获得IP地址之后,先建立TCP连接,然后开始向web服务器发送请求。

下面我们具体分析发送的请求报文在网络中漫游的经历:
应用层
首先我们可以看到在应用层,根据当前的需求和动作,结合应用层的协议,有我们确定发送的数据内容,我们把这些数据放到一个缓冲区内,然后形成了应用层的报文data。(记住 http协议 的内容)
传输层  
这些数据通过传输层发送,比如 tcp,udp 。所以它们会被送到传输层处理,在这里报文打上了传输头的包头,主要包含端口号,以及tcp的各种信息,这些信息是直接得到的,因为接口中需要指定端口。这样就组成了tcp的数据传送单位segment。tcp是一种端到端的协议,利用这些信息,比如tcp首部中的序号确认序号,根据这些数字,发送的一方不断的进行发送等待确认,发送一个数据段后,会开启一个计数器,只有当收到确认后才会发送下一个,如果超过计数时间仍未收到确认则进行重发,在接受端如果收到错误数据,则将其丢弃,这将导致发送端超时重发。通过TCP协议,控制了数据包的发送序列的产生,不断的调整发送序列,实现流控和数据完整。
网络层(IP协议)
然后待发送的数据段送到网络层,在网络层被打包,这样封装上了网络层的包头,包头内部含有源及目的IP地址,该层数据发送单位被称为packet。网络层开始负责将这样的数据包在网络上传输, 如何穿过路由器 ,最终到达目的地址。在这里,根据目的IP地址,就需要查找下一跳路由地址。
路由选择协议
 
查找到下一跳IP地址后,还需要知道它的MAC地址,这个地址要作为链路层数据装进链路层头部。这时需要 地址解析协议ARP ,在主机ARP高速缓存中存放了一个本局域网里各主机和路由器的IP地址到硬件地址的映射表,并且这个映射表还经常动态更新。
具体过程:主机A先从高速缓存中获取,如果有就返回硬件地址,如果没有,在本局域网上广播发送一个ARP请求分组,请求分组里写的是主机自己的IP地址和MAC地址,请求另一个IP地址的MAC地址,同一个局域网上的所有主机都会收到这个分组,如果有一个主机B的IP地址与请求的IP地址相同,就收下这个分组,并向主机A发送ARP响应分组,同时在这个响应分组中写入自己的硬件地址。其他地址不一致的都不会理睬这个ARP请求。主机A收到响应分组后就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
链路层
将MAC地址及链路层控制信息加到数据包里,封装成帧,帧在链路层协议下,完成了相邻的节点间的数据传输,完成连接建立,控制传输速度,数据完整。
物理层
物理线路则只负责该数据以bit为单位从主机传输到下一个目的地。
下一个目的地接受到数据后,从物理层得到数据然后经过逐层的解包 到 链路层 到 网络层,然后开始上述的处理,在经网络层 链路层 物理层将数据封装好继续传往下一个地址。
 
请求报文通过物理线路到了目的主机之后,进行反向拆包,最终服务器得到数据,进行处理之后,进行响应,响应报文传输的过程和前面一样。


猜你喜欢

转载自blog.csdn.net/u013014724/article/details/77886228
今日推荐