网络分析 之 浏览器访问网站的通信过程

 

        当浏览器访问一个网站时,浏览器会使用DNS协议去查找他具体的地址。知道了目标地址,浏览器就开始打包它的请求。对于普通的浏览请求,往往会使用HTTP协议;DNS,HTTP,HTTPS所在的层我们称为应用层。

        经过应用层封装后,浏览器会将应用层的包交给下一层去完成,通过socket编程来实现,我们称为传输层。传输层有两种协议,一种是无连接的协议UDP,一种是面向连接的协议TCP。TCP协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个进程

        传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络层的协议是IP协议。在IP协议里面会有源IP地址,即浏览器所在机器的IP地址和目标IP地址,也即电商网站所在服务器的IP地址.

客户端电脑MAC:192.168.1.101的MAC 网关的MAC:192.168.1.1的MAC

MAC头

客户端电脑IP: 192.168.1.101 网站服务器IP:106.114.138.24

IP头

浏览器端口 : 123456 网站应用端口:443

TCP头

POST.URL,HTTP1.1 正文格式json

HTTP头

 

客户端:

        操作系统既然知道了目标IP地址,就开始想如何根据这个门牌号找到目标机器。操作系统会判断,这个目标IP地址是不是本地人。如果是外地人就要去网关。而操作系统启动的时候,就会被DHCP协议配置IP地址,以及默认的网关IP地址192.168.1.1

       操作系统通过ARP广播协议,获取到网关的MAC地址,于是操作系统将IP包交给MAC层,将客户端电脑MAC,网关的MAC打包进去。网卡再将包发出去。由于这个包里面有MAC地址,因而它能够到达网关。

 

链路 设备 :

        网关收到包之后,会根据自己的知识,判断下一步应该怎么走。网关往往是一个路由器,到某个IP地址应该怎么走,这个叫作路由表

        如果 用 的 是 家用 路由器,当我们 家里的包发出去 的 时候,源地址 都被家用 路由器NAT成为了 运营商地址

        路由器有点像玄奘西行路过的一个个国家的一个个城关。每个城关都连着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的地址MAC进行通信。城关与城关之间是一个国家,当网络包知道了下一步去哪个城关,还是要使用国家内部的MAC地址,通过下一个城关的MAC地址,找到下一个城关,然后再问下一步的路怎么走,一直到走出最后一个城关

 

        最后一个城关知道这个网络包要去的地方。就会使用ARP协议找到目标服务器的MAC地址。通过这个MAC地址就能找到目标服务器

 

服务器端:

        目标服务器发现MAC地址对上了,取下MAC头来,发送给操作系统的网络层。发现IP也对上了,就取下IP头。IP头里会写上一层封装的是TCP协议,然后将其交给传输层,即TCP层

        当网络包平安到达TCP层之后,TCP头中有目标端口号,通过这个端口号,可以找到网站的进程正在监听这个端口号,假设是一个tomcat,将这个包发给电商网站

 

 

该过程 的 数据包 封装 过程 如 下图

 

 

 

 

1 当到达了目标机器所在的网关时,网管会使用Arp协议发送广播来得到目标机器的mac地址。但是如果在这之前目标的IP

地址就已经改变了,那会不会旧有问题了

         对于IP层来讲,当包达到最后一跳的时候,原来的IP不存在了。比如网线拔掉了,或者服务器直接宕机了,则ARP就找不到了,所以这个包就会发送失败了。对于IP层的工作就结束了

        但是IP层之上还有TCP层,TCP会重试的,包还是会重新发送,但是如果服务器没有启动起来,超过一定的次数,最终放弃

       如果服务器重启了,IP还是原来的IP地址,这个时候TCP重新发送的一个包的时候,ARP是能够得到这个地址的,因而会发到这台机器上来,但是机器上面没有启动服务端监听那个端口,于是会发送ICMP端口不可达

       如果服务器重启了,服务端也重新启动了,也在监听那个端口了,这个时候TCP的服务端由于是新的,sequence number 根本对不上,说明不是原来的连接,会发送RST

       但是有一个 非常特殊的方式,就是虚拟机的热迁移,从一台物理机迁移到另外一个物理机,IP不变,MAC不变,内存也拷贝过去,sequence number 在内存里面也保持住了,在迁移的过程中会丢失一两个包,但是从TCP来看,最终还是能够连接成功的

 

 

2 IP地址和MAC地址的关系

         IP 是有远程定位功能的,MAC是没有远程定位功能的,只能通过本地ARP的方式找到。IP和设备并不总是对应的,这对通信就产生了问题,但是MAC地址不同,MAC地址和设备起码在一个局域网内是唯一的。所以局域网使用MAC地址通信没有问题

 

 

3 MAC地址可以修改吗

       MAC地址,也叫硬件地址,长度是48比特,由16进制的数字组成,分为前24位和后24位。

       前24位叫作组织唯一标志符,是由 IEEE的注册管理机构给不同厂家分配的代码,用于区分不同厂家。后24位时厂家自己分配 的,称为扩展标识符。同一个厂家产生的网卡中MAC地址后24位是不同的

       也就是说,MAC本来设计为唯一性的,但是后来的设备越来越多,而且还有虚拟化的设备和网卡,有很多工具可以修改,

就很难保证不冲突了。但是至少应该保持一个局域网内是唯一的

        MAC的设计,使得即便不能保证绝对唯一,但是能保证一个局域网内出现冲突的概率很小。这样,一台机器启动的时候,

就能够在没有IP地址的情况下,先用MAC地址进行通信,获得IP地址

         好在MAC地址是工作在一个局域网中的,因而即便出现了冲突,网络工程师也能够在自己的范围内很快定位并解决这个问题。这就像我们生成的UUID或者哈希值,大部分情况下是不会冲突的,但是如果碰巧出现冲突了,采取一定的机制解决冲突就好

 

 

4 当网络包到达一个城关的时候,可以通过路由表得到下一个城关的IP地址,直接通过IP地址找就可以了,为什么还要通过

本地的MAC地址

           在网络包里,有源IP地址和目标IP地址,源MAC地址和目标MAC地址。从路由表中取得下一跳的的IP地址后,应该把这个地址放在哪里呢?如果放在目标IP地址里面,到了城关,谁知道最终的目标在哪里呢?所以要用MAC地址所谓的下一跳,看起来是IP地址,其实是通过ARP得到MAC地址,将下一跳的MAC地址放在目标MAC地址里面

 

5 为什么需要MAC地址

           之所以需要MAC地址,是因为网络中用于连接各个设备的交换机使用了内容寻址寄存器(CAM). 这个表列出了它在每一个端口的所有连接设备的MAC地址。当交换机收到了一个指向特定MAC地址的流量,它会使用这个表,来确定应该使用哪一个端口发送流量。如果目标的MAC地址是未知的,这个传输设备会首先在它的缓存中查找这个地址,如果没有找到,那么这个地址就需要在网络上额外的通信来进行解析了

 

 

 

参考 资源:

极客时间

wireshark 数据分析实战

 

 

 

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值