基础知识-互联网模型 1. 注意事项的解释(背)OSI: 开放系统互联 参考模型 Open System Interconnection上三层是为用户提供服务的, 下四层是实际传输数据的不管是本地访问还是网络访问,都要经历上三层, 比如我搜百度, 我输入百度俩个字, 是上三层, 回车搜索走的就是下四层, 会话层会对这个操作进行判断,是本地访问还是网络访问再如: word, 我敲字进去, 走的是上三层, 点击保存, 直接保存在磁盘里面, 不需要走网络访问(会话层能够判断出来走的就是本地)如果给B发送超过65535字节的数据包, 电脑B会死机ping xxxx -l 65536 , 但是会限制A发送这么大的数据包下四层传输的单位:传输层: 数据段(报文) 上面层给的数据如果很大, 会把数据进行拆分,拆成数据包网络层: 数据包(报文分组)(大小不能超过2^1665535Byte)数据链路层: 数据帧物理层: 比特位越上层的设备越智能, 能识别当层以下的所有协议, 越贴近用户,越下层的设备越傻瓜,越贴近于硬件数据链路层只认识MAC, 网络层认识MAC和IP, 传输层认识MAC,IP,端口号数据发送时,数据从上层向下层进行传输; 接受数据时,数据从下层向上层进行传输数据不能跨层传输, 每层之间通过逻辑的接口传递物理层负责实际数据传输,其他层只是逻辑对应比如数据链路层, 打上去的包头, 只有数据链路层可以看OSI模型只是理论模型, 不能对应实际协议或硬件(假模型,实际使用的时TCP/IP协议)2. 基本数据传输过程1 A主机发数据应用层输入搜索的网页表示层把数据转换为机器看得懂的二进制会话层判断是本地访问还是网络访问传输层把数据进行分组, 并且加上一个报头,报头里面包含源端口号和目标端口号网络层把数据加上一个包头, 包头里面包含源IP和目标IP(目标IP通过DNS/局域网查询得到)数据链路层把数据加上一个帧头和帧尾, 帧尾是用来给不同数据帧做区分用的, 帧头里面包含源MAC和目标MAC( ① 查A的MAC表(ip-mac) ②) ARP广播找到物理层把数据进行传输2 中间交换机接受数据直接进入数据链路层, 然后交换机拆开帧头, 解析目标MAC,先查询交换机自己的MAC表(MAC-接口), 没找到就进行泛洪找到目标以及目标所对应的接口, 写入自己的MAC表里面进入物理层继续进行传输3 B主机接受数据物理层把数据接受后, 传给数据链路层数据链路层识别帧头, 确认目标MAC地址, 拆掉帧头和帧尾网络层识别包头,确认目标IP, 拆掉包头传输层识别报头, 确认是哪个服务端口, 拆掉报头,并且把报文进行组装会话层向上进行传输表示层把数据从二进制转换为用户看得懂的文字/图片应用层接收到数据, 分配给具体的服务进行处理处理完毕原路返回, 源地址和目标地址反过来问题: 为什么已经确认了目标MAC地址是访问目标, 还需要确认目标IP地址是访问目标?因为传输过程中IP地址可能会变3. 通信电脑,交换机,路由器是怎么通信的?3.1 交换机通信原理协议和设备分层协议网络层: 设备: 路由器 协议: IP地址数据链路层: 设备: 交换机 协议: MAC地址交换机不认识IP, 因为下层识别不了上层,上层能够识别下层设备分层路由器: Router : 用于不同逻辑网段通信的. 会分割广播域交换机: Switch : 用于相同逻辑网段通信的. 不会分割广播域电脑A-交换机-电脑B电脑A封装数据(研究对象为A)① 电脑A封装数据传输层:Sport: 10001 (1W随机端口) 源端口Dport: 80 (用户双击电脑A上指定客户端,客户端中也包含目标端口)目标端口网络层:SIP: 源IP A(电脑A如何获取A的IP?人手工分配,电脑识别网卡获得)DIP: 目的IP B(电脑A如何获得B的IP?① 局域网: 拿到本机, 询问或查询 ② 公网: DNS获取B的IP)IP的获取可以通过用户, 因为用户直接搜索,通过DNS就能解析出IP了MAC地址不能通过用户, 因为比较难,不能通过用户间接获取数据链路层SMAC: 源MAC A(电脑A如何获得A的MAC? 厂商写在A的网卡里面了)(网卡既有IP地址,也有MAC地址)DMAC: 目标MAC B(电脑A如何获得B的MAC?①查询A的MAC地址表.②使用ARP广播 IP-MAC)② 电脑A查询未知MAC地址的方式:(顺序执行)1 查询的电脑A的MAC地址表(临时建立,断电会消失)(IP–MAC的表,IP可能会变,所以是临时存储)电脑A和其他电脑通信过(ping过), 才会建立这个表,windows查询这个表的方式: arp -a发qq没有建立MAC–IP表的原因: 走的是公网, 我们需要内网进行通信只有通过信, 才能记录在这个表里面, 然后此时我们已知B的IP,直接通过主机A的MAC表得到B的MAC, 但是如果没有通信, 只能采取方法2了2 重启后, 数据清空了,查表没有查到, 此时使用ARP广播(ARP:地址解析协议 Address Resolution Protocol )(IP-MAC 已知对方IP,通过发广播的方式然后知道对方的MAC)A知道B的IP, 但是不知道B的MAC, 发送ARP广播, B收到了, B知道找到的是它, 因此返回一个数据包, 包含所有地址, 此时A收到了, A知道了B的MAC, 并且把B的MAC地址和IP地址写入MAC地址表.知道对方的MAC,不知道对方的IP-使用RAP广播2) 交换机处理MAC地址(研究对象是交换机)(顺序执行)1 查询交换机MAC地址表(临时建立)(接口号–MAC)交换机是没有MAC地址的, 里面的MAC地址表:接口-连接设备的MAC组成的表, 这个MAC是连接设备的MAC; 如果电脑B和交换机通过信, 就会记录到交换机的地址表里面, 交换机就会在表里面查, 哪个口对应B的MAC, 如图是2口, 那么直接通过2口找到B2 重启后, 数据清空了查表发现是空的,那么,此时采用的是泛洪查询泛洪是指, 会给所有的口(除去发送数据的口,也就是交换机和A的口),都发消息,此时我们知道B的MAC地址, B收到消息后, 进行回复(包含三个地址), 交换机收到回复之后,确认了2口对应的就是主机B的MAC, 然后把2-主机B的MAC写入交换机的MAC地址表里面, 后续如果A/C再给B发消息, 交换机直接就可以查表找到对应B的接口, 把数据从接口发送给B,而不是再次泛洪总之: 交换机关注的, 就是从哪个口把消息准确发给目标主机补充:广播和泛洪的区别广播: 广播是网络层的广播, 广播的是IP地址(是拿IP查MAC)泛洪: 泛洪是数据链路层的泛洪, 泛洪的地址是拿MAC查接口广播地址和泛洪地址广播地址单网段广播地址: 192.168.166.255 知道源地址,不知道目标地址(ARP)全网段广播地址: 255.255.255.255 源地址不知道,目标地址也不知道(DHCP的Discover广播)广播域: 两种广播到达的范围是一样的, 都是以路由器为截断泛洪地址电脑B处理方式: 从下往上进行拆包交换机的MAC地址二层交换机(从下往上数,第二层就是数据链路层): 整个交换机只拥有一个MAC地址(交换机48个口根本分不过来,所以不是给接口用的,它只是给交换机用的), 此MAC不能用于网络通信, 仅用于交换机之间特殊运算使用.(不用管这个运算), 总之: 交换机上面的接口,既没有IP也没有MAC电脑和路由是同一种设备的原因, 因为电脑和路由的网卡是真实网卡(上面有IP,也有MAC是绑死的)三层交换机(从下往上数,第三层就是网络层): 此交换机每个网卡既有独立的IP地址,也有独立的MAC地址, 就可以看成48口的路由器补充:常见单词Source: 源头Destination: 目的地基本原则交换机既不识别一个接口对应多个MAC地址, 也不识别一个MAC对应多个接口路由器既识别一个网卡对应多个IP地址, 也能识别一个IP对应多个网卡网卡口VS网关口VS交换机上的接口只有电脑连着路由器的那个口是网关口, 其他的都是网卡口, 交换机的口只是单纯的接口积分问题电脑A和电脑C怎么通信, 电脑A和电脑D怎么通信电脑A和电脑C通信A拿着C的IP在自己的MAC表里面查询C, 找到了数据包就进入交换机,如果没有找到, 就进行ARP广播,最后找到了C的MAC,写入A的MAC表里面, 然后进入交换机,交换机S1进行查表, 表里面没有C的MAC, 因此进行泛洪, 通过S2发送泛洪请求, 此时C进行返回, 并且记录到S1和S2的MAC表里面A查询B的时候是查询请求, 会先查表再泛洪. A查询C的时候, S1发送给S2的是泛洪请求, 不会引发S2的查表过程, 直接泛洪找C(此时S1的MAC记录表里面记录的是3-C的MAC, S2的MAC记录表里面记录的是5-C的MAC)电脑A和电脑D情况1: S1的3口记录的是最后一个和它进行通信的主机的MAC, 假设之前S1和D进行通信过信, 那么3口指向的就是D, 直接就可以查表然后找到D,然后进行通信情况2: S1的3口没有记录D, 记录的是其他的主机, 那么此时就和查C的情况一样3.2 路由器通信原理拓扑图Fa 0/0Fa: faster 以太网0/0: 第一个0是, 模块0(路由器里面可以新加接口的东西), 第二个0是模块上的0网卡通信原理电脑A封装数据(研究对象)SIP: ADIP: B数据包到达R1(研究对象是R1)路由器处理未知IP的方式: 路由器绝不是通过广播查询未知IP地址的只有一个方式: 查询路由表: (路由器是靠网段来建立路由表的,而不是单个ip):查询指令: route print直连网段: 直连网段,不需要特殊配置,当给直连网卡设置IP地址的同时,直连网段就自动写入了路由表中非直连网段:① 静态路由: 由管理员手工命令配置路由器路径(管理员通过手工配置的方式, 告诉路由按照指定的路由器路径发送数据包)1 优点: 转发效率高, 消耗路由器资源少2 缺点: 消耗管理员的运算资源(不适合大型网络,不适合频繁变换的网络)静态路由的手工配置:A要给B发消息, R1直连的是 1.0 2.0 网段, 因此要找到配置3.0和4.0的网段, 因为路由只能识别相邻的俩个网段,我们需要配置 4.0-2.2(路由器只能识别相邻的网段, 其他的网段的配置为,相邻路由器最近的网段的接口),3.0-2.2, 然后R2继续设置, R2直连的是2.0 3.0 网段, 我们需要4.0-3.2, 1.0-2.1, 然后R3直连的网段是3.0 4.0, 此时A可以和B单向通信, 我们需要 2.0-3.1, 1.0-3.1, 这样电脑A和电脑B才可以双向通信手工配置的缺点:一旦新增一个路由器, 那么就要新增很多的配置适合大型网络,不适合频繁变换的网络② 动态路由: 由运算器运算生成路由路径1 优点: 适合大型网络, 适合复杂网络2 缺点: 动态路由协议众多, 学习和管理技术要求高人为配置一部分: 直接设置路由直连的是哪些网段就可以了缺点: 对应不同的复杂网络, 需要选择不同的协议(rip:按跳数来)补充: loopback:0, 也就是给一块网卡配置了多个逻辑网段(交换机的一块网卡,可以配置多个逻辑网段),逻辑网段内部也有交换机进行相连…计分问题2: 电脑B访问电脑A是否会出问题? 路由器只能识别相邻的逻辑网段, 并且相邻逻辑网段不能一致, 如果人为绕过相邻逻辑网段, 非相邻的逻辑网段一致,会发生什么状况(动态路由的情况)?现象: 路由器R2一会给A发数据,一会给C发数据,形成了一个环原因:路由器是按照网段来区分而不是IP路由器支持1个IP对应多个网卡, 1.0网段对应2.1和3.2的网卡口, 并且记录在路由表里面, 循环进行执行(负载均衡,一会给A发,一会给C发)路由表的详细解释:网络目标: 192.168.23.0, 表示一个网段, 接口: 192.168.23.1表示能够找到这个这个网段里面电脑的路由器接口目标网络记录的是整个网段的IP, 假设我们ping 166.24主机, 我们需要通过路由器的直连网卡接口达到交换机, 然后查询交换机的MAC表找 35主机, 找不到就泛洪路由器和电脑在网络层是一种设备,因此是电脑不能当路由器的原因个人电脑的网卡只有1个非直连网段需要手动配置, 技术不达标问题1:交换机不认识IP地址, 但是交换机怎么能够通过IP来进行逻辑网段的通信?交换机和电脑进行配合, 电脑判断出目标IP是不是同一个逻辑网段, 是就交给交换机,不是一个逻辑网段,就交给路由器3.3 对等网络通信原理(私有-私有,公有-公有)私有-私有,公有-公有,中间不能间隔着公网, MAC地址(数据链路层-交换机)是用于同网段通信,IP地址(网络层-路由器)是用于不同网段通信的补充:IPv4 地址耗尽问题怎么解决?方法一: 私有IP (不要钱)(可重复): 变相增加IP总数不同使用下面三组私有IP的局域网, 只要隔着公网, 里面的逻辑网段可以一致10.0.0.0 - 10.255.255.255172.16.0.0 - 172.31.255.255192.168.0.0 - 192.168.255.255小米的路由器: 31.0 , 所有的用户设置的都是31.0, 但是并没有发生IP冲突, 因为隔着公网方法二: 子网掩码: 节约IP地址, 减少浪费网关网关是一个路由器(路由器上的接口): 用于让当前网段下所有的网络设备, 跨网段通信用的电脑判断目标MAC是否是同网段,是就发给交换机,让交换机查表/泛洪去找, 电脑判断是非同网段, 就发给交换机-路由器,让路由器去查路由表找IP是用来跨网段通信的(路由器), MAC是用来同网段通信的(交换机)当存在多个内网线的时候给哪块网卡设置网关,就用的那根内网线网关还是个默认路由(路由是协议,路由器是物理设备): 静态路由的一个分支(兜底路由路径)假设访问百度从上往下查, 上面的直连网段不行, 只能到默认路由, 然后由默认路由继续查查局域网里面的ip,直接走直连网段的路由就可以找到, 直连网段能走,就走, 非直连网段才需要走默认路由(需要确认一下, 图中IPV4的地址和IPV4默认网关是否写对了)通信原理电脑 A 封装数据Sport: 10000以上的端口Dport: 80(点击客户端程序)SIP: 手工配置DIP: B(局域网,直接查/问)(公网:DNS)SMAC: ADMAC: R1-1 (人为设置网关)电脑A怎么知道目标MAC是R1-1?电脑A自己默认网关配置的就是R1-1口的IP, 然后电脑A拿着IP找R1-1的MAC, 先找A自己的MAC表, MAC表里面没有,就使用ARP寻找R1-1的MAC,找到后记录在A自己的MAC表里面, 目标MAC不能是B的原因, 根本发不了广播, 因为中间隔着路由器, 我们需要一个路由一个路由的走交换机 S1六个地址都不变的原因:交换机是数据链路层的, 是要拆的,但是会原封不动的还原,拆的时候看MAC过程: 交换机S1拿着R1-1的MAC地址, 查MAC地址表, 如果没有找到就进行泛洪,找到了交换机的2口对应R1-1的MAC, 然后记录在表里面路由器 R1R1-1口接收数据包数据链路层拆包(因为目标MAC确实是R1-1口), 拿着目标IP(B主机的IP)去路由表里面找, 没找到路由器就报错, 找到了就顺着R1-2口发出去R1-2口发出数据包源IP和目标IP没有变源MAC: R1-2, 目标MAC: R2-1, 源和目标的MAC变的原因: 因为跨了一个网段, MAC地址只能在同一个网段里面生效, 所以要重新封装(从1.0网段-2.0网段), 重新封装: R1识别出2.0是它的直连网段,通过查路由表,查B的IP对应的网卡口就是R2-1的口由此可见: 目标IP和目标MAC不一定一致, 每次经过一个路由(跨一个网段), MAC都会更改一次(之前是A-R1,是1.0网段,后面是R1-2 - R2-1 是2.0网段)IP是跨网段通信的, MAC是同网段通信的路由器-R2同样的过程, R2-1口接收数据, 在数据链路层把包头拆了,R2封装新的源MAC和目标MAC地址,IP不会变:SMAC: R2-2DMAC: B的MAC(查R2的路由表,找到了B的MAC)交换机 S2交换机拿着目标B的MAC,查自己的MAC表,如果没找到就泛洪, 找到了2口对应B的MAC, 然后把数据发出去主机B俩次拆包确认地址(MAC,IP), 确认目标端口是80,然后给应用层找到www服务再反转地址, 原路返回A - 交换机S1, S1拿R1-1的MAC地址去查自己的MAC表, 没找到就泛洪, 找到了 S1 的2口是R1-1的MAC地址对应的口S1-R1, R1在数据链路层检查, 发现目标MAC和自己R1-1的MAC一样,因此拆包,传给网络层, R1拿着目标IP(B), 去找自己的路由表, 没有找到对应的网卡口就报错, 找到了就传输给数据链路层, 因为跨网段通信了(1.0-2.0网段),所以要变更源MAC(R1-2)和目标MAC(R2-1)R1-R2, 同样在数据链路层拆包头, 然后通过目标IP查自己的路由表,确认了是从那个网卡口能找到B, 同样更改源MAC(R2-2), 目标MAC(B的MAC)R2-S2, 已知目标MAC是B, S2直接查自己的MAC表, 找不到就泛洪,确认B的MAC对应的接口S2-B, B在数据链路层, 检查目标MAC就是自己,拆, 在网络层检查目标IP就是自己,拆,在传输层确认目标端口是自己服务器上的哪个服务, 拆, 然后传给应用层,应用层传给对应服务B把六个地址进行反转, 然后原路返回3.4 非对等网络通信原理(私有IP–公有IP)不能用对等网络通信原理的原因: 私有IP是有可能一样的, 因此网络返回的时候, 不知道返回的是哪个IP的主机(网络是双向的)原理:电脑B封装SIP: 192.168.1.2 (私有IP)DIP: 百度网关路由的处理网关是一个路由器(用于让当前网段下所有网络设备, 跨网段通信的)网关还是一个默认路由(兜底路由路径)NAT网络转换(NAT表: 静态NAT转换,动态NAT转换,PAT转换 Port Address Translation 端口地址转换)静态NAT内网如果有100个电脑, 就必须有100个公网IP篡改后的原IP,使用路由拿公网IP来进行篡改动态NAT(之前使用的动态IP)篡改后的IP使用临时IP来进行篡改(因为网络计费方式过了,因此不现实)PAT转换篡改后的IP都是用的一个公网IP, 但是新增一个原端口号的列, 来区分是哪台源IP问: 为什么路由器认识端口(路由器是网络层)? 给当前技术打的补丁,路由器只能在NAT表下识别端口号3.4.1 原则: NAT网络是单向的原因: B作为源, 主动去访问百度,会建立NAT表(临时),并且能够从百度返回数据,百度作为源,不能找到电脑B, 因为私有IP是无法定位的(私有IP有可能一致)问题: NAT网络一定是单向的吗?不一定, 特定开发一个技术,从外网进入内网为什么要开发这个技术?普通用户, 从内网进入外网是常规操作, 外网向内网是我们技术人员远程办公的常用操作怎么实现外网向内网进行访问?网络穿透技术: ① SSH Secure Shell 安全外壳隧道(Windows)/端口映射(Linux) ② VPN条件:① 需要被穿透网络的路由器支持网络穿透技术② 需要被穿透网络的路由器的对外IP地址为公网IP(IP全球唯一,要钱)优点: 数据相对安全, 没有经过相关服务器缺点: 对使用者技术要求高利用第三方中转服务器(向日葵,todesk)优点: 简单缺点: 所有数据会经过中转服务器, 不安全积分问题:虚拟机的NAT模式,到底能不能访问局域网内其他电脑? 为什么可以访问公网?虚拟机的NAT模式,到底能不能访问局域网内其他电脑?现象: NAT模式下, 虚拟机可以ping通真实机, 但是真实机不能ping通虚拟机(里面可以ping通外面, 外面ping不通里面)虚拟机可以ping通真实机:虚拟机把真实机当成了NAT网络路由器, 被NAT网络路由器包裹(篡改)后, 可以访问外网,外网返回数据,查NAT表可以进行返回真实机不能ping通虚拟机:2) 247.41和166.35不是一个逻辑网段, 166.35里面的网关写的是公网的路由器,所以发给了路由器(公网路由器), 路由器查路由表也没找到,目标IP地址(虚拟机IP地址)是不存在的, 因此报错NAT是单向的修改166.35的默认网关, 修改成真实机:166.240, 对于真实机而言(此时相当于路由器), 相当于直连了俩个网段, 然后166.35继续ping虚拟机,ping不通. 这样才证明了NAT是单向的这句话, 虚拟机可以ping通真实机(使用NAT表), 但是真实机ping不通虚拟机(相当于公网访问私网, 需要网络穿透技术)为什么虚拟机在NAT模式能够访问公网?虚拟机把真实机当成的NAT路由器NAT网关允许二次包裹(第一次在真实机把IP篡改成166.240, 第二次在连接外网的路由器上再次把IP篡改成公网IP)