文章目录
数据链路层
IP进行路径选择,查路由表的过程就是在做路上决策,一跳到下一跳。
你为什么要将数据包给F->G
这些路径中的节点呢?是由目的IP决定的,是由路由查找完成的。我要去深圳,所以我得先去北京。那我怎么去呢?也就是:
-
如何把数据包进行交互呢?
是由数据链路层解决的,由这一跳到相邻的那一跳。为什么这么干是IP决定的,怎么干是数据链路层决定的。
凡是能够跳转到下一跳,一定是直接相连的节点。
所有的直接连接的的节点,一定是在同一个网段或者局域网中。
网络就是无数个局域网,通过横跨各个局域网的路由器相连接的。
路由转发的本质就是一个数据包从一个局域网不断经历各种局域网最后到达目标主机的过程。
局域网通信的问题
在同一个局域网,两台节点能够直接通信吗?
局域网的资源会被共享,当发出目标IP地址,所有的主机都会解包将他和自己的mac地址进行对比,如果不是就不会向上交付,而是就会将数据进行丢弃,只有和地址相同的主机会接收数据,从而达到局域网通信的效果。
数据帧(以太网帧)
- 如何分离报头和有效载荷?分离和封装
去掉目的地址源地址和类型(标识数据报什么类型,易碎物品轻拿轻放),剩下的就是有效载荷。所以是定长报头的形式进行解包,在有效载荷前后加上确定的东西就是封装的过程。
- 如何将自己的有效载荷交付给上一层?
通过的就是类型,0800可以交付给上层,0806就是交付给同层的ARP和RARP。
- 局域网中如何发送到路由器?
局域网中所有主机都要对报文(数据帧)进行解包,发现目的地址和自己的mac帧是一样的,解包之后将数据上传,不一样就直接丢弃(上层并不知道)。
以太网是应用最广泛的局域网技术。
路由表在路由的时候,一定经历了一次解包和重新封装的过程,解包得到IP地址,在网络层进行路由查找,决定你去到哪里之后再进行封装。所以MAC地址是一直变化的。
数据帧是尽快发送,所以数据帧是有上限的1500.
Mac地址通常是全球唯一的,在网卡出厂的时候就确定了,不能修改。Mac地址上一站在哪里,下一站你应该去哪里,所以在一条一条的过程中一直在变化。
ARP地址转化协议(IP->MAC)
根据路由表,结合目的IP,根据目的网络进行查找。当数据包到达入口路由器时,只知道他的IP地址,并不包含主机B的Mac地址,只知道IP地址,在局域网中广播,所有人都收到了。不建议这么干,避免主机B下线之后,IP重新分配给的那台主机进行信息打扰。
老师叫张三站起来,老师怎么知道他的名字的呢?
- 那么如何在局域网中,通过IP地址获得该主机对应的Mac地址?
这种协议就是ARP协议,地址转化协议,IP地址转化为Mac地址。不知道Mac地址就无法封装Mac帧。
需要有在一个局域网中发现指定一台主机的Mac地址的能力,进而实现想和那个主机通信就和那个主机通信。就是由ARP协议决定的。
例子:学号(IP)对应名字(Mac帧)
原理:现在群里面根据学号广播,解包之后IP地址不是就丢弃,是就接收,然后发送ARP响应报文,添加上Mac地址,然后完成交流。IP地址如何得知的呢?在到达入口路由器表的时候,有局域网下的IP。或者在有限的局域网中,遍历所有主机获取他的IP。
ARP请求时,Mac交付给ARP协议,处理的是管理数据,不需要再向上交付了没有有效载荷的存在。
ARP数据报格式
28字节是ARP,其他部分都是MAC帧的封装。
硬件类型:指的是链路层网络类型,1为以太网。
协议类型:0800为IP地址。
硬件地址长度:以太网为6字节。
协议地址长度:IP地址4字节(0800)
op:为1表示ARP请求,为2表示ARP应答。
目的以太网地址:如果是ARP请求,不知道,填全F让他填。
目的IP地址:网络层发起的时候IP经过ARP进行填充这个字段,虽然各层之间是解耦的,但是总要有发起的一方。
模拟:
- ARP请求过程
入口路由器A(IPA,MAC-A),先进行ARP协议请求,进行ARP报文字段填充,默认的自动填写,目的主机的Mac地址由于不知道,所以填写全F;
然后添加报头(以太网首部),目的以太网地址是不知道,填全F,叫广播。再填MACA,实现ARP请求要进行封装,所有的主机都可以收到,包括目的主机B,所有的主机都必须处理这个数据帧,发现是全F广播并且0806代表ARP请求,所有的主机都解包之后将ARP报文,向上交付给自己的ARP协议,(所有同学都想自己是不是10号同学),如果先看目的IP地址是否一样,不是的话就直接丢弃,是在ARP中丢弃了,
但是,任何局域网中的主机既可能向别人发起ARP(得到的是ARP应答),也可能被被别人发送ARP(得到的是ARP请求)。主机B知不知道是请求还是应答呢?所以先看的是op字段,如果op字段是1,说明是请求,再看目的IP是不是自己,是自己就开始进行应答了。因为要请求还是要应答,接下来所要才去的操作是有很大的区别的。
- ARP应答过程
构建应答之后封装然后发送到网络中,所有的主机依然可以收到,包括自身在内,发现目的数据帧不是自己就全部丢弃,就是正常的单向发送,接到报文之后看到是以太网目的地址是自己并且是0806代表ARP,然后就解包向上交付。同理,主机A接收到ARP应答(先看op字段),再看获取发送端的Mac地址,然后就可以封装IP报文了,然后就可以实现一对一的交流了。
-
为什么不从B的ARP应答的数据帧的以太网首部获取MacB呢?
没有和IP对应,MAC帧都是给IP服务的,所以没有价值,ARP里面就都有,才有价值。
-
在路上的任何路由器都可能进行ARP,不止在入口路由器和目标主机之间。
路由器会对IP地址和对应的Mac地址对应的缓存起来,arp -a
,第一次广播之后,下一次就可以查看缓存映射关系就行了。路由器中也不是永久保存,是有时间限制的,避免其中一台主机更换网卡之后更换了Mac地址之后因为没有历史映射关系不能再连接路由器了。
局域网添加映射关系
#!/bin/bash
sb_net='172.17.0.';
cnt=1
while [ $cnt -le 255 ]
do
echo "ping $sb_net$cnt"
ping -c1 $sb_net$cnt &
let cnt++
done
DNS(了解)
是一整套从域名映射到IP地址的系统,因为IP地址不好记啊,浏览器自动实现。
- 为了让网站的域名各不相同,所以出现了域名分级,有一级不重复即可:
com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.
baidu: 二级域名, 公司名.
pic : 三级域名www: 只是一种习惯用法,是万维网的缩写. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.
不想要英文,要更贴近用户,中文域名搜索,3721,域名解析or搜索引擎(周鸿祎vs李彦宏),搜索引擎既可以进行域名解析又可以搜索其他内容。浏览器兵家必争之地.
更靠近前端的东西叫输入法,信息啥的都被记录了,资源字段足够多(搜狗)
-
最原始的做法是在本地电脑中配置hosts这个文件,像哈希表一样记录了ip 和域名之间的映射关系,随着网站的增多,手动添加肯定不行.就有了DNS服务器,当你访问某个域名的时候,就会自动访问一下DNS服务器,进行查询,之后将结果返回.如果本机电脑DNS服务器配置有误,或者DNS服务器挂了,就会出现能聊QQ但是无法浏览网页.
设置自动获取的话,就是自动和路由器保持一直,路由器获取了,在他局域网下的主机就也能获取到.基于DHCP协议,就可以在组网的时候自动获取到一个IP地址.
DNS服务器有很多,如果你想注册个网站,在DNS服务器中添加新的域名和网站IP的映射关系,需要在根域名服务器进行注册(在美国)
浏览器输入URL之后发生什么事了?
浏览器域名解析后,应用层(http响应和应答),tcp保障可靠性,网络层IP.
ICMP(了解)
是一个网络层协议,IP协议并不提供可靠传输,丢了就是丢了也不说。
ICMP如果丢弃了,最后一个路由器就会将丢弃的信息返回给A,根据类型编码返回错误信息。ICMP大概分成两类,通知发送方错误原因,用于诊断查询。
ping命令基于ICMP是在网络层不是传输层的内容,也就不需要端口号。
NAT技术
解决IP地址不足的问题,是路由器的一个重要功能。
全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的
- 请求能出去,那怎么回来呢?
出去的时候先将源IP源端口都给维护起来,在局域网中是唯一的存在,IP地址一样说明是同一台主机,但是端口号一定是不一样的也就是两个进程,这样保证了请求的唯一性。
路由器将源IP替换成WAN口IP之后,在全局世界中也具有唯一性。
应答时,将响应返回给路由器,NAT技术就是将这两个唯一性建立映射关系,互为键值。目标IP和源IP进行调换,然后根据转换表返回。这样就可以将响应报文返回给客户端了。
源IP+源端口<->WAN口IP和端口
所以所有的家用路由器,构建虚拟子网和转化表,所以局域网之间是可以存在IP地址相同的主机,因为转化表的存在,使得每个主机的请求在全网中具有唯一性,方便请求的发出和返回。
虚拟机就是计算机中的另一条计算机,将电脑当作一个路由器,由他建立IP地址分配,别人也认为虚拟机发出的请求都是由那台电脑发出的。这就是NAT技术版本的虚拟机。
服务器反向访问私有IP是不存在的,在从来没有访问过得情况下,路由器里面没有映射表,所以无法确定私有IP的主机。也算是一种保护机制,外网无法访问你的主机。公网IP是唯一的,但是内网IP是全球有很多重复的。
NAT技术的缺陷
无法从NAT外部向内部服务器建立连接;
装换表的生成和销毁都需要额外开销;
通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;
NAT&&代理服务器
学校上网时还是要给学校交网费的,校园网。但是应该是交给运营商的啊!为什么要统一交给学校吗?
我们在访问的时候是直接访问学校里面的代理服务器的,再将请求转发给server,这些工作都是在内网中完成的,好处:
-
便于对同学们进行认证,不让校外的人访问,避免资源浪费。
-
如果两个请求之间的内容是一样的,所以代理服务器就将内容进行保存,下次访问一样的内容就在内网中直接返回就行了,加速内网服务。局域网中的是十分的快的。
-
小白访问非法网站,收到server的攻击的可能性更高。所以代理服务器可以堆访问内网的请求进行筛查。
-
如果将所有主机全部暴露,会造成饥饿问题。有代理的话可以实现负载均衡!不做业务处理只做业务转发,反向代理主机。
-
安全,不会将公司内部内网主机暴露给外面而遭到攻击。
正向代理服务器vsNAT技术
路由器往往具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备通信的过程。
代理服务器将请求转发给服务器,服务器返回接货后,代理服务器有吧结果返回给客户端。
- 区别:
内网IP访问公网必须得有NAT技术,代理服务器可以没有。
NAT技术是为了解决IP不足的问题,代理服务器更加贴近具体应用,比如通过代理服务器进行翻墙,迅游加速器也是使用的代理服务器。
底层上,NAT工作在网络层直接对IP地址进行提花,代理服务器在应用层。
适用范围,nat一半在局域网的出口设置,代理服务器可以在局域网做,广域网也可以。
部署位置:NAT一半集成在防火墙,路由器等设备上,代理服务器是一个软件程序,需要部署在服务器上。
代理服务器是应用比较广的技术:
翻墙:广域网中的代理。负载均衡:局域网中的代理
翻墙原理:
中间人可以在任何一跳跳的过程中对报文进行抓取。
DNS将域名解析转化为IP时,就会向IP进行发起请求,如果访问的是外网IP运营商就会不让你建立连接。
如何骗过运营商?建立连接和返回内容都会被运营商拦截
- 提供一台机器可以被我和外网访问,(港台地区),部署代理服务Nginx.
- 自己一定要安装客户端A,你的浏览器由费德勒劫持,所有的请求都必须通过它,它来进行访问,会将你的想要的请求进行改写,http套在了一个他给你的http访问A机器的内个IP,请求,运营商会对你的请求正文进行分析,所以他还会进行加密操作来掩盖你想要的外网的内容,从而交给代理服务器。
- 代理服务器解密拿出内部你想的外网IP,然后请求外网资源返回给代理服务器
- 回去的时候,加上合法报头之类的然后返回时先让客户端收到,去掉报头然后再交给你的浏览器,进行http协议的解析,从而拿到内容。
-
为何无法绑定自己的公网IP呢?
因为代理服务器的存在,Tecent云服务器给你的公网IP是虚拟的,都没有所以根本没法绑定。
的内个IP,请求,运营商会对你的请求正文进行分析,所以他还会进行加密操作来掩盖你想要的外网的内容,从而交给代理服务器。
- 代理服务器解密拿出内部你想的外网IP,然后请求外网资源返回给代理服务器
- 回去的时候,加上合法报头之类的然后返回时先让客户端收到,去掉报头然后再交给你的浏览器,进行http协议的解析,从而拿到内容。
-
为何无法绑定自己的公网IP呢?
因为代理服务器的存在,Tecent云服务器给你的公网IP是虚拟的,都没有所以根本没法绑定。