数据链路层

承接上文网络层·IP协议_清风玉骨的博客-CSDN博客

简介

数据链路层

        认识MTU

        ARP协议

其他重要协议或技术

        DNS

        ICMP协议

        NAT技术   

        NAT和代理服务器

大总结

        数据链路层 

        网络层

        传输层

        应用层

数据链路层

用于两个设备(同一种数据链路节点)之间进行传递

数据链路层_第1张图片

为了更好的理解我们还是以问题来一步步的深入

1.谈一谈局域网转发的原理(故事)

2.认识以太网的MAC报头,a.如何分离 b.如何分用

3.重谈局域网转发的原理(基于协议)

4.以太网的其他问题,重新理解数据转发的整个过程,贯穿协议栈(提出一个问题 引入下一个主题)

1.谈一谈局域网转发的原理(故事)

A:在同一个局域网的主机,是能够直接通信的,想象在一间教室里面,A对B说你的作业交了吗?

这时候教室里的其他同学同样也都听到了,但是由于是A对B说的,所以C、D、E等学生是不会理会的,相当于直接丢弃了,同时对于A来说,A认不认为是在和B在进行一对一通信呢?答案是肯定的,不仅A对B是如此,B对于A也是如此认为。因此在局域网通信中,其实有很多“吃瓜群众”的,只不过它们直接丢弃不理会罢了

2.认识以太网的MAC报头

以太网帧格式

数据链路层_第2张图片

详解介绍

数据链路层_第3张图片

mac地址查看

数据链路层_第4张图片

至于如何保持唯一参考IP划分也就明白了

3.重谈局域网转发的原理(基于协议)

数据链路层_第5张图片

延申1:在局域网中,网卡有一种模式:混杂模式,不放弃任何数据帧,直接向上交付局域网抓包工具的原理!所以HTTP中数据的截获也是很简单的,只有当HTTPS的出现,才有效避免了数据“裸奔”的现象

延申2:在局域网中,任何时刻,只能有一个主机发送消息如果多个消息被同时发送,会导致局域网中的数据发生碰撞,无效数据,这里奔跑的是光电信号哦。所以一个局域网,一个碰撞域,所有的主机都得遵守某些规定来减少碰撞发生的概率,碰撞发送光电错误想象一下向湖中投石子就能够理解了,你投石子,别人也可以投石子,当你们的波纹发送碰撞了之后也就产生了影响,原来的报文也就不是原来的报文数据了

为了解决这个问题我们有以下解决方法

1.令牌环 -- 之前提及过,其实就是锁的原理,当一台主机拿到这个令牌的时候,其他的主机是不能够发送消息的,当一台主机发送的时候同时也会把令牌也一起发送出去

2.以太网 -- 当发生碰撞的时候,会检测出来(CRC),然后它们就会触发休眠(双方同时)一段实际,这个时候其他的主机就不会和这两个发生碰撞了,这个时候发生碰撞的概率就会大大减少,这其中的算法我们称之为(主机的碰撞检测和避免算法)

基于这两点我们就可以大大减少发送碰撞的概率了,不过我们首先就得知道,我们不要高估局域网中传输量,也不要低估光电传输的速度(光),正常中发生碰撞的概率已经可以忽略不记了

基于网络碰撞同时也有了一种网络攻击策略:如果一台主机不断的向局域网发生垃圾数据,并且不执行碰撞检查和碰撞避免,就会造成网络问题了,不过不要做了(自己给自己的局域网做实验,不要危害公共场所),我们只需要知道技术策略上是可以实现的

问题:如何重新看待局域网

答:临界资源 — 碰撞检测+碰撞避免,任何一个时刻只有一台主机能够向临界资源中写入数据(临界区)

再提出一个问题:局域网能不能很大,为什么?

答:局域网太大,主机很大,任何时刻发生碰撞的概率就增加了

这一点在学校操场集会的时候就有体现了,当很多人在的时候(手机用的就是以太网,只不过是无线式的),我们就会发现手机很卡,这就是其中的原因了,碰撞概率大,导致一直在等待

交换机

为了解决当数据发生碰撞之后,数据会继续转发(每一个主机都会进行检验和),实际上当发生碰撞之后是没有必要继续发送了,因为数据已经发送错误了,这时候我们就有了很久很久之前提到的设备 -- 交换机(识别局部性碰撞,对碰撞数据不做转发)

数据链路层_第6张图片

这就是为什么大的局域网是需要配置交换机的原因

认识MTU

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
不同的数据链路层标准的MTU是不同的;

因为有了碰撞域,一台主机发送数据的时候,发送数据量长了好,还是短了好?为什么?

现在很显然这个问题我们是有答案的,肯定是数据量还是短了好,长的数据量相比短的更容易发送数据碰撞,从而导致数据出错,导致重传,不过显然这其实是有取舍的,显然这个长度定义为了MTU(最大传输单元),这个数值通常为1500字节,但是过短了话也不行,通常数据量低于46字节就会被自动填充再进行发送,因为以太网帧中的数据长度规定最小46字节,所以我们一个MAC帧的大小范围通常为 46字节~1500字节

MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.
 

将较大的IP包分成多个小包, 并给每个小包打上标签;
每个小包IP协议头的 16位标识(id) 都是相同的;
每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);
到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;

这些内容在上一章中已经详细提及,这里就捎带提及

分片演示如下图

数据链路层_第7张图片

注意当一个数据被分片发送到网络之中,其他的网络节点,路由器等设备也是有可能会对已经被分片的数据再一次分片,因为虽然通常分片不会超过1500字节,但是每一台设备是有着自己的限制的,可能会低于1500字节这时候就要求路由器自行进行分片、组装,技术上在上一章中提及,这里就不再赘述了,我们只需要知道是可行的

此相呼应起开头提到的,路由器是可以自行选择路径选择的,我们在IP协议中是有不可分片的标志位的,当一个数据不被允许分片的时候,路由器就得重新选择路径,路径不同,其中的差别就体现在稳定性、数据的吞吐量、传输速度等方面之上,这都是有这实际考虑的,存在即合理

对比理解MAC地址和IP地址

IP地址描述的是路途总体的 起点 和 终点;
MAC地址描述的是路途上的每一个区间的起点和终点;

        主机将数据交付给下一跳(下一跳的主机路由器等其他节点)前提一定是 该数据帧被路由过,因为网络层(IP协议)在链路层(MAC帧协议)的上层

查看MTU

数据链路层_第8张图片

MTU对于TCP协议的影响
 

TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);
TCP在建立连接的过程中, 通信双方会进行MSS协商;
最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU);
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值;
然后双方得知对方的MSS值之后, 选择较小的作为最终MSS;
MSS的值就是在TCP首部的40字节变长选项中(kind=2);

数据链路层_第9张图片

这也回答了为什么滑动窗口内会有一个个的报文段,而不是一整个,因为数据链路层无法传输大的数据包(分片不是主流)

数据链路层_第10张图片

ARP协议

虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议,是一个在局域网通信的协议

当数据进过漫漫路由到了目标网络,到了这里我们还剩下一个问题需要填补,关于如何知道对方MAC地址,来让路由器用来封装MAC帧,再把数据发送给目标主机,为此我们有了ARP协议,注意这个协议是介于数据链路层和网络层之间的协议,但是通常我们把它归纳为网络层(IP层)

数据链路层_第11张图片

这里可能会有疑问,路由器不是应该都知道目标主机的吗?其实不然,我们还需要考虑"新来"设备,因此我们需要一个过程,让路由器设备,认识主机D,获取主机D的MAC地址

ARP协议的作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系,即根据IP地址,得到目标主机的MAC地址

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;

ARP协议的工作流程
 

数据链路层_第12张图片

        源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
        目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
        每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址;

        打个比方就是,新学期,当在上课的时候,新来的老师由于不知道学生的名字,她交流习惯用名字来称呼对方,不过她是有学号名单的,于是她在教室里面叫了一个10号来让他回答问题,这时候张三(10号)就起来回答问题,同时老师也把张三和10相对应起来,写在了自己的本子上,并且在以后的课堂上,她既可以像之前那样先用学号叫人,然后知道了被叫学生的名字之后,就用名字来进行交流,同时把被叫的人的名字和学号再对应起来记录,也可以直接叫已经被记录下来的名字的学生来让他直接来回答问题

        这时候从外部来了一个人,传来了奖状要老师发布下去,不过因为上面只有学号,老师要么知道这个学号对应的学生名字是谁,要么就像之前那样进行"广播",来知道这个获奖的学生的名字再把奖状交给他

        在这个模型中,数据过来的IP地址就相当于上面的学号,为了和主机沟通,路由器必须得知道目标主机的MAC地址,为了知道目标主机的MAC地址它就直接向它目标网络发起喊话,即广播,来知道目标主机的MAC地址,然后再封装发送,MAC帧才是真正在网络中跑的哦,而且MAC帧协议里面填写的源地址和目标地址就是MAC地址

ARP数据报的格式

数据链路层_第13张图片

源MAC地址、目的MAC地址:在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的;
硬件类型:指链路层网络类型,1为以太网;-- 不会影响ARP协议正常工作,因为MAC地址一定存在,在出厂就有了,所以无论是什么硬件都必须得拥有IP和MAC地址相互转化的功能
协议类型:指要转换的地址类型,0x0800为IP地址; -- 一般都是固定的
硬件地址长度:对于以太网地址为6字节; -- 一个字节里面填6
协议地址长度:对于和IP地址为4字节; -- 同理
op字段:为1表示ARP请求,op字段为2表示ARP应答;

发送端以太网地址、发送端IP地址、目的以太网地址、目的IP地址,这几个字段才是我们要重点关照的,不过通过字面意思也很容易理解

数据链路层_第14张图片

如同在最开始的网络模型中,ARP是介于数据链路层和网络层之间的协议

数据链路层_第15张图片

ARP网络经过模型

数据链路层_第16张图片

可是上面的情况我们会出现两种可能!

1. 收到arp请求

2. 曾经向别人发起过Arp请求所以,别人可能会给主机9,进行ARP应答!

即你怎么知道这个ARP是请求还是应答?

所以当主机接受到了一个广播,所有的主机都得先看这个ARP报文中的OP字段,判断这个报文是ARP请求还是ARP应答!

所以真正的流程是,先看OP,再看目的IP,再判断向那边进行交付

因为知道了M1的主机信息,所以M9的ARP应答填写的内容就应该是这样的

这个时候其他的主机是不会理会这跳报文的,因为以太网的目的地址是填的M1,这个和上面的广播是不一样的,但是同样的主机1还是先看OP字段,判断是ARP应答还是ARP请求,然后再找到对方的MAC地址,这样就完成了一个ARP流程,知道了目标主机的MAC地址,然后就可以愉快的转发数据帧啦~

这么一来ARP的作用可不仅仅是找到目标主机的MAC地址了,我们把目标放大,指向一个个的子网,由路由器构建的子网环境,一个路由器也可以通过ARP请求来知道与自己直连的周边路由器的情况,同时这里的ARP得到的信息会被保留一段时间的,把信息保存在自己的缓存表之中,当有新的数据需要被转发的时候,它会优先查看缓存表,以此来避免浪费

在windows下我们可以直接看到被缓存的对应表

数据链路层_第17张图片

这种缓冲是分钟级别的,当一定时间到了就会被自动清理,然后重新请求更新缓冲表,这是有必要的,因为一台主机的IP地址是会变的,当你的主机物理层面上移动了,比如电笔记本从家里的路由器到了公司里面的路由器,IP地址会被重新分配,那么一来之前缓存的映射表是没有用的,需要重新更新,还有一种可能就是直接把电脑的网卡给换了(MAC地址变了),一旦路由器不自动更新缓存表的话,那么这台电脑可能永远都上不了网了

这也映照了前面提到的那句话,数据在数据链路层之前路径已经被路由了,因为路由器早就通过ARP请求形成了缓存表

还有一种特殊的情况,就是只知道对方的mac地址,不知道IP地址怎么办呢?

通常出现在网络管理员才可能遇到,我们同样有一个RARP协议,这个就是直接负责这方面的问题的,这里就不再赘述了,因为比ARP协议还要简单

补充一些新的网络攻击

网络踩点

网络踩点,打个比喻就是你知道你的主机下的IP地址和MAC地址,这时候你可以推测周围主机的IP地址,因为在一个局域网之中,这时候你去用ping工具去请求,这时候底层会触发ARP请求,那么你可以得到对方的MAC地址,再则你通过某些途径知道了对方主机人的身份,那么通过一些网络抓包工具,你就可以定向的抓取某一个人的网络信息了,这种在抓包之前的所有动作我们称之为踩点

ARP欺骗

数据链路层_第18张图片

所有因为有了这类的攻击,所以应用层中是有必要做加密的,http才显得不安全,必须使用https才能保证在网络通信之中的数据安全

同时这也延申了一种网络攻击手段,当你知道了某一台主机的MAC地址或者IP地址,你就可以像手枪一样指哪打哪,通过大量的ARP,来让对方主机缓存表更新错误的映射表,从而导致对方主机的下线,同时你甚至可以直接攻击某一个子网,来让大量的设备下线

总结

据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测、到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层

至此数据链路层结束,接下来补充一点其他的网络协议和工具之类的

其实到了这里我们的OSI模型之中所有基本内容已经结束,辛苦啦~

其他重要协议或技术

DNS

DNS(Domain Name System)是一整套从域名映射到IP的系统

我们需要知道的一点是,我们其实不需要域名就可以做到网络通信了,并且其实我们也只能用IP地址来进行网络通信,根本用不上域名,我们可以直接通过IP访问百度,但是实际上我们是直接在浏览器中输入 baidu 就可以直接访问的,不过由于商业化的影响,我们诞生了域名这个技术,随之而来的还要域名解析,这样的技术利于商业化

DNS背景

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆;
于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系;
数据链路层_第19张图片

最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的

如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.
其他计算机也需要定期下载更新新版本的hosts文件才能正确上网

早期的域名是直接读取本地的配置文件的,不过由于互联网的发展越来越大,域名的影响范围也越来越大,所以就有了组织来统一构建一个域名服务器,来保存域名和IP地址的映射表,当有人通过域名进行访问的时候,首先就得访问这个域名服务器,然后再通过它返回的域名对应的IP地址来进行网络通信,这种服务称之为 域名解析服务 美国标准哦~ 所以我们得有后手准备哦~,这是一种被内置的服务,影响大的我们有了域名服务器,

通常当你下载一个APP的时候,它会内置一个域名对照表的,当你用这个软件的时候,首先做的就是域名解析,这时候域名解析就是下载APP做到的

不过在早期域名在国内的推行并不是很友好,因为在早期,其实不是IP地址难记的原因,是根本就不会用键盘或者识字,所以在推行域名这方面其实也是有这一番故事可以了解了,比如为什么360一个杀毒公司为什么也有搜索器,其中最主要的体现就是,你在上网的过程之中,一般是不会直接输入url网址的,而是直接用搜索栏去搜索,比如你访问腾讯新闻官网,通常你不会去在你的浏览器的最上面输入qq.com,而是直接在搜索栏腾讯新闻,然后等他弹出来搜索结果之后再点击腾讯新闻网,所以其实搜索已经在很多方面就已经有了域名解析的功能

查看host文件

cat /etc/hosts

域名解析的服务是被内置的

数据链路层_第20张图片

关于域名解析服务的工作方式,其实也是一层一层的,就像是一张网一样,当在本地找不到的时候就会向上一级域名解析服务器去询问,再没有就再向上找,直到根域名解析服务器(美国哒~要注意哦),这是一个递增的行为方式,多叉树的数据结构

所以我们要做域名镜像,不然当根域名解析服务器直接被禁止使用的话就会导致很多很多问题的哦,想象一下就知道了这个服务看起来不起眼但是在功能上却是如此的重要,你知道百度的IP地址吗?显然普通人并不会知道,当一旦出现无法解析的情况,那么你就直接无法访问百度了,不仅仅是普通人有影响,对于那些互联网公司也是一种无法承担的后果,不过现在这种网络隐患其实已经可以不用考虑了,早在很多年前国内就对于这种隐患采取了很多方法去解决,我们现在只需要知道是有这么一种历史缘故的

域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称
 

www.baidu.com
域名使用 . 连接

com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
baidu: 二级域名, 公司名.
www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议

ICMP协议

ICMP协议是一个 网络层协议,是工作在传输层和网络层之间的一层协议

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因

ICMP功能

ICMP主要功能包括

确认IP包是否成功到达目标地址;
通知在发送过程中IP包被丢弃的原因;
ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

数据链路层_第21张图片

这个协议就是用来探测网络故障问题的原因的,当一个报文被丢弃了,它会直接被返回一个报文,来告诉发送端出了什么网络故障才导致数据丢包的

数据链路层_第22张图片

了解就好了,详细的报文格式想要去了解的话就可以了解

ping命令

数据链路层_第23张图片

注意, 此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址.
ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期).
ping命令会先发送一个 ICMP Echo Request给对端;
对端接收到之后, 会返回一个ICMP Echo Reply;

ping命令就是基于ICMP协议来实现的一种网络工具

一个值得注意的坑

有些面试官可能会问: telnet是23端口, ssh是22端口, 那么ping是什么端口?
千万注意!!! 这是面试官的圈套
ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息,ping是没有端口号的.
 

traceroute命令

也是基于ICMP协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器
数据链路层_第24张图片

原理很简单,因为这是一个ICMP协议,它只要把报文的跳数(TTL)设置为1,2,3以此类推,因为ICMP协议到达之后会被返回一个报文,里面就会包含一些信息

NAT技术 

IPv4协议中, IP地址数量不充足的问题,就是通过NAT技术解决的,是路由器的一个重要功能;

NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:
很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;

NAT IP转换过程

在前面一篇文章中,我们是提及过NAT技术的,并且在上一篇文章中是留下了一个问题的,即实际上我们只需要通过LAN口IP(下图中对应的子网IP)和WAN口IP的的不断替换实现了公网与私网的转化,实现了可以把数据包从一个客户端(私网IP)到服务器(外网IP)的功能,并且服务器是可以直接响应返回给路由器的,但是路由器怎么返回给客户端呢?

数据链路层_第25张图片

在理解转化过程之前,我们需要明确一点的是,我们访问服务器的目的,不是访问这一台主机,而是主机里面部署的服务,对应着一个具体的进程,一旦是一个进程就有了对应的端口号,知道这一点之后我们就可以理解下面的对应关系了

数据链路层_第26张图片

这里也有一个有意思的事件,当你从来没有访问外网的服务器的时候,外网的服务器是无法访问你这台内网的主机的,这是因为没有构建一个服务器到本地主机的一张映射表,所以就无法访问

这一套服务是由路由器内部维护的,我们一般不需要管它,通过这样的一台技术,我们只需要保证对端的入口路由器的IP地址是唯一的就行了,从而解决了IP地址不足的问题

NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

无法从NAT外部向内部服务器建立连接;
装换表的生成和销毁都需要额外开销;
通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;

不过显然是利大于弊的一种行为

内网渗透

其实就是利用NAT技术,来永久了形成一张NAT映射表,通常情况下,因为没有映射表外网是无法直接访问你内网主机的,但是通过内网渗透的方式,是可以把你的内网IP暴露在外网,这样外网就可以直接访问你这台主机了,就像访问外网服务器一样

一个例子,你有一台云服务器,你可以用你的主机直接访问这台云服务器,它们之间是形成了NAT映射表的,可以直接访问,然后你在云服务器上部署一些服务,专门为你转发数据到你的本地主机上去,最后你通过某些方式把你的云服务器暴露出去让别人知道,这样一来别人就像访问外网一样可以直接访问你的主机了,这其实就是内网渗透的基本工作流程

现在市面上有很多现成的提供内网渗透服务的软件,你可以直接使用它们的服务,来帮助你实现内网渗透

至于为什么有了公网还需要使用内网渗透技术呢?其实是需求决定一切,这里提供一种需求场景,接上面的例子,有人想访问你的内网主机,那么实际上它是需要先访问吗部署内网渗透服务的云服务器的,这时候它是需要通过提供给你云服务器厂商的一个入口路由器的,一些这些厂商完全可以建立一个登入验证身份的前提服务,他只有通过验证之后才会把数据通过内网环境转发给你的云服务器上,再通过云服务器转发到你的本地主机的

NAT和代理服务器

        路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.
        代理服务器看起来和NAT设备有一点像. 客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端

NAT和代理服务器的区别有哪些呢?

        从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行, 另外像迅游这样的加速器, 也是使用代理服务器.
        从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
        从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.

        从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上

 

正向代理和反向代理

代理服务器又分为正向代理和反向代理.

反向代理

数据链路层_第27张图片

正向代理

数据链路层_第28张图片

这就是正向代理和方向代理的区别,这时候我们再谈它的作用

代理服务器是一种应用比较广的技术.

: 广域网中的代理.
负载均衡: 局域网中的代理

反向代理 

数据链路层_第29张图片

        通常返回有两种方式,一种是勇敢反向代理服务器进行返回,一种是直接返回不通过反向代理服务器

        通常这个做代理服务器的配置都会比较高的,专门为分配流量而生,不提供任何服务,只负责负载均衡,达到几万的并发是没有问题的,这已经很强了

        目前这个提供反向代理服务的,已经有它的商业服务,比如 Nginx 就可以提供这种服务

        不过其实入口服务器前面也可以部署其他的设备,比如防火墙之类的,都是可以部署在入口服务器之前的

        正向代理

        网络加速器其实原理就是正向代理的典型例子,比如你玩某个腾讯游戏,这时候游戏的时候它的实际转发的服务器距离你的位置是比较远的,但是腾讯可能在你家附近部署了一台代理服务器,代理服务器就专门访问游戏服务器的资源缓存在这台代理服务器上,当你游戏的时候,你是直接访问你家附近的服务器,并且由于历史上有很多人曾经都用了这个加速器,用了这个代理服务器,那么你甚至可能都不需要访问游戏服务器了,直接访问这台代理服务器就行了,这么一来游戏就会快上许多,这就是运用了正向代理的一个实例

        外网代理

        仅仅在技术层面上讨论

        实际上由于地区的不同国内还是有些地方的服务器是可以直接访问的到外网的,比如香港等等,这个时候你提供某些途径得到这样的一台服务器再行使你的代理服务就可以访问啦,技术层面上可以通过加密的方式进行传输数据包,不然的话可能在域名解析的时候你的数据包就已经被掐掉了

数据链路层_第30张图片

通常你可以使用别人提供的代理服务,不过这类的都不是很稳定,用着用着就没了,代理地址直接被禁掉了,不过这方面上有方法下有对策,仁者见仁吧

一个类型面试题

浏览器中输入url后, 发生的事情
这是一个经典的面试题. 没有固定答案, 越详细越好. 可以参考
当你在浏览器地址栏输入一个URL后回车,将会发生的事情?-CSDN博客

这类的问题是很考验一个面试人的,这个问题要一层一层的去讲述,十分考验人的技术水平,大多数人通过这一个问题就可以看出他的知识面的如何的了,并且十分考验人的表达能力,这一点也十分重要,一个人的表达能力的水平也是非常的重要的
 

大总结

数据链路层

本篇

数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据;
以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
以太网帧格式;
理解mac地址;
理解arp协议;
理解MTU;

网络层

网络层·IP协议_清风玉骨的博客-CSDN博客

网络层的作用: 在复杂的网络环境中确定一个合适的路径;
理解IP地址, 理解IP地址和MAC地址的区别;
理解IP协议格式;
了解网段划分方法;
理解如何解决IP数目不足的问题, 掌握网段划分的两种方案. 理解私有IP和公网IP
理解网络层的IP地址路由过程. 理解一个数据包如何跨越网段到达最终目的地;
理解IP数据包分包的原因;
了解ICMP协议;
了解NAT设备的工作原理;

传输层

TCP协议-CSDN博客

UDP协议-CSDN博客

传输层的作用: 负责数据能够从发送端传输接收端;
理解端口号的概念;
认识UDP协议, 了解UDP协议的特点;
认识TCP协议, 理解TCP协议的可靠性. 理解TCP协议的状态转化;
掌握TCP的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性;
理解TCP面向字节流, 理解粘包问题和解决方案;
能够基于UDP实现可靠传输;
理解MTU对UDP/TCP的影响;

应用层

一个简单的协议定制-CSDN博客

HTTP协议初识·上篇_清风玉骨的博客-CSDN博客

HTTP协议初识·中篇_清风玉骨的博客-CSDN博客

HTTP协议初识·下篇_清风玉骨的博客-CSDN博客

应用层的作用: 满足我们日常需求的网络程序, 都是在应用层;
能够根据自己的需求, 设计应用层协议;
了解HTTP协议;
理解DNS的原理和工作流程;

至此网络七层模型结束,之后我们就进入其他的方面的话题了,多路转接

后会有期~

你可能感兴趣的:(网络基础,网络)