首先说一下几个前提

  • 本机已经指定了DNS服务器,知道DNS的IP
  • 本机有路由且指定了网关(能上网)
  • 那台主机没禁ping
  • ....


网络通信的大概描述(可能不准确,帮助理解)

  • 当前的网络通信几乎都是构建在TCP/IP等协议之上的,所以简述一下这两个协议的关键内容
  • IP协议,其中的关键字是IP地址,IP地址可以作为某一台主机在网络通信时的标识,可以用IP来标识这台主机,所以IP地址可以解决不同​主机​之间通信的问题
  • TCP协议,其中的关键字是端口,端口是用来标记主机之上的进程的,由于当代的计算机都是多任务的,比如,你可以使用QQ聊天,或者使用浏览器看片,如果只有IP地址,没有端口,那么,可能正聊着天呢,结果画面就来了(例子只是帮助理解,不要较真),端口就是解决这个问题的,他可以与某个进程绑定,内核从tcp/ip协议栈读到的数据能发送到正确的进程
  • arp协议,其实任何网络(可能不准确)通讯,都是转换为一小段一小段的通信,你访问 ​,其实是将报文发送给别人,让后别人在帮你转发给下一个人,不断的转发,最后发送到,然后他也是类似的,把他想给你的信息,通过别人,经过层层转发,最终他的报文信息发送到你手里,而每一个小段内的通讯,是如何进行的呢?先来讲讲这个
  • 其实也就是局域网通讯或者叫做本地通讯,我们不讨论的太深入,假如我们至知道与我们在同一个网络内的某个主机的IP地址,那么可以与他直接进行通讯吗?答案是不可以,因为在本地通讯中还有个东西需要介绍,那就是MAC地址,此处不深入介绍,你只要知道本地通讯必须要有对方的MAC地址才行
  • 那么如何得到对方MAC地址呢,就是通过arp协议
  • arp协议是怎么得到对方的MAC地址呢?我举个例子大概说一下
  • 假如你是老师,你有知道你们班学生的名字,但是不知道他到底是谁,你怎么才能知道呢?
  • 肯定同学们都得在教室里,然后你大喊一声,谁是​张三?​然后​张三​站起来说,我是。(不考虑arp欺骗),此时你为啥要大喊,因为你想让所有人都听见,这样张三就有可能听见老师想认识认识他,然后张三给老师使了个眼色(别人看不见),老师瞬间明白,他就是张三
  • 然后你好好看看他,记住了那个站起来的人就是张三
  • 以上就是arp协议的内容
  • 在这个例子中,你知道张三这个名字,这就相当于你知道某个主机的IP地址,最后你知道了张三长啥样,相当于你知道了那个IP地址对应的MAC地址,你大喊一声,相当于广播,而张三给老师个眼色,相当于单播,目前只有老师知道谁是张三
  • 抓包结果如下:
  • 此时我们已经有了对方的IP地址和MAC地址,所以终于可以进行通讯了


  • 路由?简单的说就是地图,任何的网络通讯都需要路由(别说一台机器的多块网卡之间的通信,我怕有人跟我较真~),路由主要分为三种,简单介绍一下
  • 主机路由
  • 定义了与某个主机(IP地址)通讯需要将数据报文从哪个网卡发出去
  • 网络路由
  • 定义了与某个网络内主机通讯需要将数据报文从哪个网卡发出去
  • 默认路由
  • 定义了与任何主机通讯需要将数据报文从哪个网卡发出去


  • 网关,路由里可能会有网关的信息
  • 网关又是个啥,为啥需要网关,那你知道海关是啥吗,为啥需要海关?
  • 先说海关,按照我们的理解,海关是检查东西的,检查完之后,他根据你提供的信息,把你的东西放到某个港口,在发送出去,而网关很像,他可以知道你想把数据发送到哪去,然后根据不同的路由规则,替你​转发​你的数据
  • 注意,如果你想把你的东西从​山西​发到​北京,​你会走海关吗?那比不会,因为根本不需要,网关也是,​只有你跨网络通讯时,才会用到网关​,你本地通讯,直接找到那个人,把东西交给他就可以了,难道你想把​绿帽子​送给​室友​,还会出去找​海关​帮你送吗?懂了吧


由于配置的不同,会有多种情况

  1. 指定的DNS服务器与我主机的IP在同一个网络
  2. 指定的DNS服务器与我主机的IP不在同一个网络


DNS与我在同一个网络

  • 大概过程
  • 由于我是 ping magedu.com,ping的并不是一个IP地址,所以,我需要DNS server将此域名解析成IP地址,才能进行网络通讯
  • 然后我在ping 那个IP
  • 详细过程
  • 由于DNS server与我在同一个网络,而且我知道DNS 服务器的IP地址,假如,我不知道DNS服务器的MAC地址,所以我需要先使用arp协议向DNS 服务器所在的网络(如何知道DNS服务器所在的网络?此处就不介绍了,要不然根本介绍不完~好吧,​是我懒的写了​)发送一个广播,这样我们就得到了 DNS服务器的MAC地址了,然后就可以和他进行通信了
  • 我们使用DNS协议与DNS server进行通讯,最终能得到 对应的IP地址,DNS通讯过程如下,详细过程此处不过多介绍
  • 此时,我应该判断一下,这个IP地址跟我是否处于同一个网络,很显然,不在,因为我是172.16.0他是140.143.(此处没掩码,但是也很明显,我们并不在同一个网络),所以是跨网络通讯,因此,必须要有 ​网关 ​和 ​路由,​那么,我的数据包是如何被网关转发的呢?网关其实很清楚自己的职责(不详细介绍),他收到​ MAC地址指向自己的报文​,​而IP地址不是指向自己的​,他就会根据路由规则进行转发,因为我们指定的IP地址,才是我们真正期望与之通讯的,这点很重要,所以,网关在进行转发的时候,不会修改 IP地址的指向
  • 你想,如果你想写封信给远在他乡的 某#空,你肯定不希望,海关把你的信 发送给警察叔叔吧,就是这个意思
  • 网关会将你的数据报文转发给下一个网关,等等等,最终到了对应的那台主机
  • 然后也是用类似的方式,将报文发送给你
  • 最终我们得到了这个报文,即得到了 ping 的响应报文
  • ping magedu.com 这期间究竟发生了什么事?_ip地址
  • 真不错 马哥没有 禁 ping 。。。/xyx
  • 以上,我们描述了当DNS server与我们在同一个网络内时,ping magedu.com 的全部过程,主要是 偏网络的,没有很详细的讲DNS协议及ICMP协议,接下来聊聊DNS server不与我们在同一个网络的


DNS不与我在同一个网络

  • 我觉的你已经qing车熟路了,我此处就简单介绍一下
  • 首先, 我ping 的是 一个域名,他不是个IP地址,所以需要找DNS服务器
  • 我指定了DNS服务器是114.114.114.114,判断这个IP地址是否跟我在同一个网络,发现不是
  • 所以,我如果想与114.114.114.114进行通讯,就需要网关和路由(只要是网络通讯,就一定需要路由,不要较真儿,我上边说过特殊情况是啥)
  • 我知道网关是谁,我知道他的IP地址,但是不知道它对应的MAC地址是啥,所以需要arp协议,得到网关的MAC地址
  • 好的,现在 网关的IP地址有了,网关的MAC地址有了,DNS的IP地址有了,所以我需要通过DNS 协议,让网关帮我转发,去请求DNS server,然后他将对应的IP地址给我
  • 现在有了对应的IP地址了,我们需要用ICMP协议跟这个IP地址进行通讯
  • 看一下这个IP地址是否跟我在同一个网段,显然不在
  • 是不是又需要网关,不过还好,刚才我们已经通过arp协议得到了网关的MAC地址了,这个MAC地址能缓存一阵子,所以我还记得网关的MAC
  • 所以,我终于发送ping 包,让网关帮我转发,经过层层转发,这个ping包终于发送到了 对应IP地址那个主机上,他处理完这个 ping请求之后,将 ping的响应报文,经过层层转发,最终终于回到我的机器上,并显示。
  • 这就是一个完整的过程,所有抓包入下:


总结

  • 其实网络通信很简单,都是有路子,有流程的,专业的讲就是遵循协议的,是死的。
  • 如果通讯时给的是域名,那么一定需要DNS服务器(别较真儿说你有hosts文件)
  • 有了IP之后,在判断是什么样的通讯,是本地通讯(局域网通讯)还是跨网络通讯
  • 如果是局域网通讯,那么不需要网关,通过arp协议得到其MAC地址即可通讯
  • 如果是跨网络通讯,那么需要网关,让网关帮忙转发即可
  • 所有的网络通讯一定需要路由,别较真,我介绍过特殊情况
  • 如果你不清楚网络通讯的过程,请一定要抓包,这样你几乎能看清所有的通讯过程


多次提到magedu.com,希望各位不要生气,他们没给我钱


勘误

  • 第一次写,难免有错误,有纰漏,如有发现,希望能及时指出,我们共同进步
  • 学习的过程就是多动脑,多动手,共勉!
  • 转载请标明出处,谢谢
  • 我是蜗牛冲上天,关注我,一起探讨技术