对于计算机网络的理解

我的理解便是从生活中剥削出的知识体系,但这个不能用生活完全的去理解,毕竟编程思维跟生活区别还是很大的,但是生活中的例子能让我们先理解一个大概。

比如我说一个例子

我的同学,谭某,他这个人比较的贱,有很多仇家,有一天仇家a要干他,a在深圳小巷子里面,他在长沙xx公司的某一个座位上面,那么a会想不是广东省内,我要坐高铁去找他,不过我得先坐公交车地铁到高铁站(类似于局域网中的计算机发送消息时,会判断终点站是不是跟我在一块,如果不是我就会直接发送到路由器,当然得经过交换机)然后高铁经过很多个站,终于到达了长沙高铁站(类似于路由器经过静态路由或者动态路由到达了最终的路由器),然后a搭地铁或者公交到达了谭某的公司,成功的干了他一顿(然后最终的路由器转发到交换机,交换机转发到最终的计算机)。

用日常生活中栩栩如生的场景,来理解计算机网络世界里的抽象描述,会有事半功倍之奇效!

宏观图

看上去很简单,但是就好像一台飞机在你面前,你看到的只是模型,你看到没有细化的零件,没有复杂的操作驾驶舱,就比如里面还有这幅宏观图,里面有的协议就有很多,然后经过的路由器其实会比较多,处理的事情也多.

从百度的例子出发,梳理一下从局域网到服务器到底经历了什么?有什么细节。

步骤一(你的电脑连接局域网wifi做了什么操作)

前置知识

家用路由器构成图

家用路由器 = 路由器 + 防火墙 + 交换机 + NAT

DHCP

当你的电脑连接到局域网之后,会进行DHCP协议分配ip,也就是我们的家用无线路由器会进行分配ip,那么DHCP是什么?

一、什么是DHCP?

DHCP,动态主机配置协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。

DHCP服务器会从IP地址池中,挑选一个IP地址“出租“给客户端一段时间,时间到期就回收它们平时家里上网的路由器就可以充当DHCP服务器

一般我们的家用路由器就可以充当DHCP服务器

二、DHCP的四个步骤

dhcp工作一共分为四个阶段:

  • 发现阶段(DHCP客户端在网络中广播发送DHCP DISCOVER请求报文,发现DHCP服务器,请求IP地址租约)
  • 提供阶段(DHCP服务器通过DHCP OFFER报文向DHCP客户端提供IP地址预分配)
  • 选择阶段(DHCP客户端通过DHCP REQUEST报文确认选择第一个DHCP服务器为它提供IP地址自动分配服务)
  • 确认阶段(被选择的DHCP服务器通过DHCP ACK报文把在DHCP OFFER报文中准备的IP地址租约给对应DHCP客户端)。


简单的说:

1.广播给局域网的DHCP服务器

2.DHCP服务器收到你的请求,分配给你一个ip

3.你的电脑收到之后,接受了这个ip,进行了广播,告诉DHCP服务器

4.服务器收到确认,响应确认给你

至此你的电脑就有ip了

  • ipconfig/all:可以看到DHCP相关的详细信息,比如租约过期时间、DHCP服务器地址等
  • ipconfig/release:释放租约
  • ipconfig/renew:重新申请IP地址、申请续约(延长租期)
三、dhcp的总结与问题

其实我之前一直再想,如果租约到期了呢?是会进行什么操作?
客户端会在租期不足的时候,自动向DHCP服务器发送REQUEST信息申请续约

第二个问题是dhcp分配了租约,但是电脑重启了会有什么样子的操作,是会重新分配?

不会的,再DHCP SERVER中,这个分配出去的IP地址,还是已分配的状态,是不会分配给其它用户的,除非到期了,才会回收。
当电脑开机的时候,还会联系DHCP,若成功联系上DHCP SERVER则更新IP租约,这样租期又回到24小时了。(租期根据不同的路由器定,一般是24小时)

总结

其实也就是我们的家用路由器(dhcp服务器)会有一个注册表,存放着mac地址与ip地址还有时间,当然我们的客户端也有属于自己的那一份,需要客户端主动续期。

步骤二 (当我们访问百度服务器进行第一次通信局域网发生了什么?)

上面我们有了自己的局域网ip,那么可以进行通信了,那么当我们进行第一次通信的时候发生了什么?

当我们访问baidu.com的时候我们其实会进行域名解析,会先发送请求到dns服务器,进行第一次通信。
首先我们的计算机会判断dns服务器是不是跟我同一个网段,根据自己的子网掩码先计算自己的网段,然后用自己的子网掩码计算dns服务器的网段,一般都不是自己局域网中的,一般来讲话dns服务器都是代理商。

然后我们的计算机就会发送到网关,但是问题来了,我们的计算机因为是第一次通信,并不知道,路由器的mac地址,这个时候就会发送arp广播,然后交换机就会发送到192.168.2.8跟路由器网关192.168.2.1,然后这2台机器就会返回自己的mac地址给我们的电脑,然后进行缓存,下次通信的时候,就可以直接发送到192.168.2.1,如果arp缓存到期了或者其他原因导致没有请求ip的mac地址了,那么就会重新arp广播。

ARP

一、什么是ARP?

译为:地址解析协议,通过IP地址获取MAC地址。

arp协议在TCP/IP模型中属于IP层(网络层),在OSI模型中属于链路层。arp协议即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。它可以解决同一个局域网内主机或路由器的IP地址和MAC地址的映射问题

总结一句话我们的局域网通信,arp是基石。

获取成功后,会缓存IP地址、MAC地址的映射信息,俗称:ARP缓存

通过ARP广播获取的MAC地址,属于动态(dynamic)缓存
存储时间比较短(默认是2分钟),过期了就自动删除

相关命令
arp-a[主机地址]:查询ARP缓存
arp-d[主机地址]:删除ARP缓存
arp-s主机地址MAC地址:增加一条缓存信息(这是静态缓存,存储时间较久,不同系统的存储时间不同)

步骤三(域名解析)

上一步说到我们进行所谓的第一次通信的时候,其实是要访问dns服务器,具体访问哪个ip的dns服务器 其实是经历了这些下面的步骤,当我们敲击baidu.com的时候…

1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。2. 如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly,防止被恶意篡改。3.如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。4. 如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析5. 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址6. 此时LDNS再发送请求给上一步返回的gTLD7. 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器8. Name Server根据映射关系表找到目标ip,返回给LDNS9. LDNS缓存这个域名和对应的ip10. LDNS把解析的结果返回给用户,用户根据TTL值(TTL与DNS TTL有区别。二者都是生存时间,前者指ICMP包的转发次数(跳数),后者指域名解析信息在DNS中的存在时间。)缓存到本地系统缓存中,域名解析过程至此结束

浏览器缓存->系统缓存->路由器缓存->IPS服务器缓存->根域名服务器缓存->顶级域名服务器缓存->主域名服务器缓存。

当时我也不清楚路由器也有缓存,但是路由器的操作界面确实有dns服务器缓存

我们第一次请求本地并没有缓存

假设拿到了我们经历上面的步骤最终拿到了本地IPS服务器的时候,我们请求经历了哪些步骤?

首先会发送到网关 ,因为IPS服务器并不是局域网内的,但是会检查当前计算机有没有网关对应的mac地址,如果没有 arp广播获取mac地址,到网关对应的mac地址缓存起来。

当拿到网关对应的mac地址之后,(就拿家用的电脑连接Wi-Fi来说)发送到网关之后,也就是我们的家用路由器,家用路由器里面会有一个nat,这个东西会将我们的请求从私网变成公网ip,然后才可以真正的访问DNS服务器。

NAT

一、什么是NAT?

简单的说就是将私有网络的地址转为公有网络的地址,

就比如说我们的家用路由器,里面其实是有一个nat的软件的.

一台家用路由器可以允许多台设备同时连接上网

那么当设备通过家用路由器向网络发送请求后,返回的响应到达路由器时,路由器必须要知道该响应对应的是哪台设备发送的请求。我们向网络供应商(ISP)申请网络访问权限时,ISP会给路由器分配一个公网ip,路由器内部的设备只能使用内网ip。NAT的作用就是实现公网/内网ip以及端口的转换。为此,需要一张表,用于记录内外ip和端口的映射关系。

假设内网中有两台设备A和B,同时访问同一个外网ip的相同端口。那么在路由器处就会记录如下映射关系:

(remote ip_r : port_r)–(local ip_a : a_port)

(remote ip_r : port_r)–(local ip_b : b_port)

假设恰好a_port和b_port的值相同,那么来自远端的响应数据到达路由器时,路由器就无法确定该请求应该给A还是给B。对于这种情况,NAT采用一个三元组来进行区分:(remote ip_r : port_r)(nat port)(local ip_a : a_port),即通过增加nat port来进行区分。当A和B请求到来时,为两个请求生成两个尚未使用的端口:a_port和b_port,并记录如下关系:

(remote ip_r : port_r)(nat a_port)(local ip_a : same_port)

(remote ip_r : port_r)(nat b_port)(local ip_b : same_port)

即当A请求到达路由器时,路由器将请求的源ip换成ISP分配的公网ip,并将源端口换成a_port;而当请求B到达路由器时,路由器将请求的源ip换成ISP分配的公网ip,并将源端口换成b_port。当A和B的请求返回时,根据返回的目的端口(返回的目的端口就是请求的源端口)是a_port还是b_port即可确定该将响应给A还是B。

总结一句话:

nat能将局域网中的ip转换为可以访问互联网的公网通过端口区分不同的局域网中不同的机器

NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击(不过还是可以通过运营商查询具体的位置),隐藏并保护网络内部的计算机。

步骤四(过了NAT,我们的请求会去向何方?)

如果过了家用路由器,也就是经过nat之后那么请求就会真正的发往外面的世界,那么我们的请求是怎么经过外面的请求的呢?

其实就跟我们之前的例子差不多,高铁站每一站都是路由器,那么我们总结一下

我们要去长沙xx103(请求的服务器ip),我们得到深圳北站坐车(家用路由器),经过nat转换之后然后出发,经过广州南(网络节点中的路由器)宁乡(网络节点中的路由器)最后到长沙南(网络节点中的最终路由器)然后坐公交地铁(交换机)到家xx103里面(最终的服务器)

客户端->交换机->路由器->路由器…->交换机->服务器

不过这个只是请求

其实响应就是反过来,从长沙到深圳

客户端在跟交换机传输数据的时候 使用的是cd/csma协议传输的是以太网帧,而路由器到路由器之间使用的是ppp协议

也就是说坐公交车地铁使用的是深圳通,但是坐高铁使用的是高铁票

步骤五(dns响应之后我们获取了百度的ip,开始真正的发送请求给百度了)

经过步骤5我们的请求响应回来之后我们成功的收获了百度的ip,然后我们真的开始给百度发送消息了,

其实跟请求dns服务器差不多只是协议发生了变化,也是先判断是不是自己的局域网中ip,不是就发往路由器,经过nat 然后就是步骤5了.

计算机网络总结篇-我们是怎么访问百度的?相关推荐

  1. 计算机网络 - 面试篇

    计算机网络 - 面试篇 综合 OSI七层模型 讲一下网络五层模型,每一层的职责? 在浏览器地址栏输入一个URL后回车,执行的全部过程 tcp.udp.http.https等常用协议 Cookie 和 ...

  2. 计算机网络习题篇(一)

    参考: CCNA选择题一 CCNA选择题二 CCNA选择题三 CCNA(200-120)803题库V2.0-IP Address 36题 CCNAtest 640-801 题库翻译第2部分 计算机网络 ...

  3. 从实例入手学习使用vue+axios配置代理进行跨域访问百度音乐API

    场景 如果要使用axios直接进行跨域访问是不可以的,这是就需要配置代理了,为什么要配置代理呢? 原因就是因为客户端请求服务端的数据是存在跨域问题的,而服务器和服务器之间可以相互请求数据,是没有跨域的 ...

  4. Android 通过 “隐式意图” 打开 系统的浏览器 访问 百度页面

    在MainActivity中,通过"隐式意图"打开系统的浏览器访问百度页面: MainActivity页面: package cn.lwx.openbrowser;import a ...

  5. Python—实训day2—爬虫案例1:访问百度贴吧

    2 爬虫案例1:访问百度贴吧 假设我们要访问的贴吧是:动漫吧 头几页的URL地址为: https://tieba.baidu.com/f?kw=%E5%8A%A8%E6%BC%AB&ie=ut ...

  6. 网络编程知识预备(5) ——libcurl库简介及其编程访问百度首页

    本文为学习笔记,整合课程内容以及下列文章: 其中,libcurl函数库常用字段解读部分: 参考博文:原文地址 作者:冬冬他哥哥 目录 Libcurl库简介 Libcurl等三方库的通用编译方法 三方库 ...

  7. 解决从其它搜索引擎不能直接访问百度页面的问题

    由于最近baidu和360又开始互咬了,从其它搜索引擎搜索到百度的结果时又变不能直接访问了,会出现如下界面. 需要手动点击这个链接才能访问,让人非常不爽.因此我写了一个chrome扩展解决这个问题,原 ...

  8. 用java自动化访问百度测试_java+eclipse+selenium+百度搜索设置自动化测试

    在eclipse中新建一个项目baidutest:再在src文件夹中新建一个包com.baidutest.homework:再在包中新建一个java类baidusetting,并设置为静态类:最后在项 ...

  9. 计算机网络——基础篇

    文章标题 计算机网络系列文章 OSI 标准模型 TCP/IP ⽹络模型 应用层 传输层 网络层 数据链路层 物理层 物理媒介 双绞铜线 同轴电缆 光纤 陆地⽆线电信道 卫星⽆线电信道 个人博客网站: ...

  10. 关于chrome浏览器不能正常访问百度的解决方法

    关于chrome浏览器不能正常访问百度的解决方法 最近一段时间,使用chrome的时候,经常会出现不能正常访问百度的问题,搞得我每次都想怒卸chrome,回归foxfire.以下是几种解决方案. 对于 ...

最新文章

  1. mysql同一个表,两个数字取差值
  2. Make Them Equal 埃氏筛法(1200)
  3. linux下重启weblogic(关闭和启动)
  4. 1.6-1.7配置IP1.8网络问题排查
  5. java 虚类private 继承_Java经典面试36题和答案
  6. 微信小程序开发实战基础二、wxml模板,动态更新内联样式
  7. linux的驱动开发——简单驱动程序编写
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的课程评价系统
  9. 吴恩达深度学习1.4笔记_Neural Networks and Deep Learning_深层神经网络
  10. CDH秘籍(两):cloudera Manager存储监控数据
  11. Web移动开发基本概念
  12. 【博客管理】博客格式说明【置顶】
  13. java语句快捷键_Java中快捷键
  14. 目前,有哪些云计算平台,值得我们选择
  15. Linux下Intel网卡固件烧写工具
  16. 杰里之一拖八烧写器版本更新:1TO8_V3.0.25【篇】
  17. 背景建模之codebook算法
  18. 南邮 | 离散数学实验一:利用真值表法求取主析取范式以及主合取范式的实现
  19. iOS 9 Spotlight搜索 OC版
  20. 2023年商标注册流程

热门文章

  1. 《白雪歌送武判官归京》古诗鉴赏
  2. 大脑中的CD19表达与CAR-T治疗关系
  3. 什么是视频结构化?视频结构化有什么作用
  4. java课程设计 博客园_201521123098 JAVA课程设计
  5. 图像处理-图像边缘处理
  6. 【学生打卡签到系统】
  7. Web前端密码加密是否有意义?
  8. selenium对Alert弹框的多种处理
  9. Android的屏幕多样性支持
  10. 百度地图开发:根据指定手绘图纸照片行政区划自定义绘制对应区域边界生成geoJOSN的解决方案