WEB页面请求的过程
需求:学校网络里的电脑访问到Google网络中的web服务器中
1、电脑通过物理网线接入校园网中
2、电脑运行DHCP协议,从本地的DHCP服务器获取一个IP地址(DHCP服务器一般由网关路由器充当)
获取过程:
1)电脑作为DHCP客户端,会先发送一个DHCP请求报文----DHCP–discover包(广播包)
传输层:SP(源端口号):68 DP:67
网络层:SIP:0.0.0.0 (代表自己没有IP地址) DIP:255.255.255.255(广播地址)
数据链路层:SM:自己的MAC DMAC:全F
数据包先通过传输介质,来到交换机上。交换机收到数据包先关注数据帧中的源MAC地址,将源MAC地址和进入接口的对应关系记录在本地的MAC地址表中。之后,再看目标MAC地址,因为目标MAC地址是广播地址,所以,交换机将执行泛洪动作,将该数据包发于所有和自己连接的设备(发送设备除外)。
因为路由器和交换机连接,路由器将收到该广播帧。先看二层MAC地址,因为是广播帧,所以,将解二层封装看三层;因为三层的目标IP地址是255.255.255.255,所以,路由器将解三层封装,根据三层封装中的协议号(17)判定将该数据交给UDP模块进行处理,UDP解四层封装,UDP模块基于目标端口号67,判定此数据寻址的是DHCP服务,将交于DHCP服务进行后续处理。则此时DHCP服务器收到了DHCP客户端的请求。
(DHCP传输层用的是UDP协议,UDP协议号是17)
2)DHCP服务器将响应DHCP客户端的请求,回复DHCP-offer包。----单播/广播
这个包中将携带可分配网段中的一个可用IP地址(图中可分配网段为68.80.2.0/24,所携带的可用IP地址为68.80.2.101),其中还会包含网关68.80.2.1和DNS服务器68.87.71.226信息。
3)DHCP客户端进行反选,回复DHCP-Request包—请求的是DHCPoffer中的IP的信息。—广播包(可能收到多个DHCP-OFFER,通过广播包的形式,一方面告诉请求IP的DHCP服务器,需要获取他的IP地址;另一方面,告诉广播域中其他的DHCP服务器(如果有)自己所请求的IP地址并不是他们的,可以将地址进行释放)
注:DHCP客户端如果收到多个DHCP-offer,则将选择第一个收到的进行请求。
4)DHCP服务器将发送DHCP-ACK进行最终的确认。—单播/广播(不同厂商不一样)
3、电脑此时已经具备访问谷歌服务器的基本网络条件,则将在浏览器中输入www.google.com的URL(统一资源定位符)
4、因为输入的是域名信息,但是访问服务器需要IP地址信息,所以,电脑将触发生成一个DNS请求,发给DNS服务器。
DNS:域名解析协议
DNS协议请求查找的方法:
1、递归查找—电脑向本地DNS服务器发送查找请求(电脑向本地DNS服务器请求百度的IP地址,本地DNS在自己的地址表中查找百度的IP地址,如果有则直接回复百度的IP地址;如果没有,本地DNS服务器则向下继续查找别的DNS是否有,如果这个DNS也没有,则这个DNS继续向下查找,直到找到,找到后再一层一层往上传输,原路返回,直到本地DNS收到百度的IP地址,本地DNS服务器再将百度的IP地址发送给电脑。)(本地递归查找一般是用UDP的53号端口)
2、迭代查找—本地DNS服务器发送的查找请求(比如说电脑向本地DNS服务器请求百度的IP地址,本地DNS在自己的地址表中查找百度的IP地址,如果有则直接回复百度的IP地址,如果没有,这时候本地DNS回给电脑回复一个IP地址,但是这个IP地址不是百度的IP,而是另一台DNS服务器,这个DNS服务器再在本地地址表中查询是否有百度的IP地址,如果有则回复给电脑,如果没有,则再给电脑回复另外一台DNS服务器的IP地址…………)(迭代查找用的是TCP的53号端口)
传输层: UDP DP :53
网络层:SIP:68.85.2.101 DIP:68.87.71.226
数据链路层:SM:自己MAC 目标MAC:???(现在还不知道)(目标MAC是网关MAC,因为电脑和DNS服务器不在一个广播域,所以要网关路由器帮忙转发信息)
5、为了获取网关的MAC地址,电脑需要先以网关IP:68.85.2.1作为请求IP,发送一个ARP请求包。
源IP:68.85.2.101 目标IP:68.85.2.1
源MAC:自己的MAC 目标MAC:全F(广播的形式)
工作过程:
首先,主机通过广播的形式发送ARP请求,通过IP地址请求MAC地址。因为是广播帧,所以,广播域内所有的设备均会收到这个请求,设备收到后,先将数据包中的源IP和源MAC的对应关系记录在自己本地的ARP缓存表中。然后,再看请求的IP地址,如果请求的不是自己的IP地址,则将直接丢弃数据包。如果请求的是自己的IP地址,则进行应答。之后,再进行通讯时,将优先查看本地的ARP缓存表,若有记录,则按照记录中的MAC地址添加;若不存在记录,则再发ARP请求获取。
通过ARP请求,电脑将获得网关的MAC地址
6、则DNS请求包将正常封装
传输层:UDP DP :53
网络层:SIP:68.85.2.101 DIP:68.87.71.226
数据链路层:SM:自己MAC 目标MAC:网关的MAC
7、网关收到电脑发送的DNS请求的数据包,先看MAC地址,目标MAC是自己的MAC,则将解二层封装,看三层。基于三层的目标IP地址去查看本地的路由表。如果存在可以匹配上的路由条目,则将按照路由条目的指示来进行转发。如果不存在,则将直接丢弃该数据报。(但是在当前情景中网关会通过缺省路由发给公网中的ISP)
**8、通过路由器的转发,该请求包将来到本地的DNS服务器上。**如果本地的DNS服务器的缓存中存在该域名对应的IP地址,则将直接返回给电脑。如果没有,则将向DNS根服务器发起迭代查找请求,最终获取到该域名对应的IP地址,返回给电脑。(迭代查找时使用的是TCP的53号端口)
9、电脑将通过DNS协议获得www.google.com所对应的IP地址信息。之后,将触发本地电脑到目标服务器的HTTP关系的建立。
因为HTTP协议是基于TCP协议来进行工作的,所以,需要先完成电脑和目标服务器之间的TCP会话连接。(三次握手)
当TCP会话建立之后,客户端(电脑)和服务器将建立双向的会话通道,将可以相互发送信息。
10、客户端----服务器:发送Http请求----获取网页信息----发送GET请求
11、服务器----客户端:收到GET请求后服务器将会给客户端 返回网页信息(200 OK)----至此,小明的电脑上将获取到谷歌web服务器的页面信息。
三次握手没有建立的情况下,双方不能传输数据。三次握手和数据可靠传输是两件事情,必须保证面向连接没有问题,数据才能可靠传输。
如果双方是客户端(C)、服务器(S)模型—CS模型,一般都是客户端先发送同步请求包进行第一次握手
如果两端不是客户端、服务器模型,谁先发送数据都无所谓,只是一方发送之后,另一方就抑制了第一次握手能力
三次握手:
第一次握手:主机向服务器发送同步请求包(syn+req)(syn标记位置1)
同步请求:请求两端为相同的状态(A主机准备给B发送数据,B服务器做好准备接收的状态)(主机请求服务器的端口开放)
第二次握手:服务器给主机回复(ACK+syn+req,(ACK标记位置1)(ACK确认标记位) ACK是确认的意思)(确认的同时又发送了一个同步请求包)(服务器请求主机的端口开放)
第三次握手:主机给服务器回复ACK包(ACK标记位置1,因为通信是双向的,所以也会把SYN请求标记位置1)