网络层一般有两种服务:
因为第二种做法不用提供可靠传输服务,网络中的路由器就比较价格低,而且易于维护,因特网采用的就是这种服务,它采用的就是IP协议。
这种服务的好处是节省成本,那么复杂的网络处理功能都交给了更上一层的运输层,他们的位置在各个主机,是处于整个互联网的边缘,那么中间的因特网核心就只用完成简单的分组交换功能。IP协议之上,要保证传输可靠,就有了TCP协议。
IP协议(Internet Protocol)直译网际协议。对上是传输层,对下是数据链路层。IP协议就是给因特网上的每一个主机/路由器的接口分配全世界范围内唯一的标识符,就是地址。
这里需要区别MAC地址和IP地地址。关于MAC地址,也就是媒体介入控制地址,他也是唯一的,但是他是针对于设备-设备,而异构网络很复杂,IP协议是解决网络和网络之间的通信,加上小的网络内部划分可能就没必要更多的协议来通信,就更加方便。
目前IP协议的地址有IPv4和IPv6两个版本,在2011年,IPv4地址已经分配完毕了。IPv4的地址编址方法经历了三个阶段,分类编址、划分子网、无分类编址。
分了ABCDE,只有ABC给网络中的各设备接口用,D和E是保留不往外分配的。基本是都是前几位网络号、后面分配,然后就有很多的不同IP地址的组合可以用。
A类指派范围:1.0.0.0到126.0.0.0
B类指派范围:128.0.0.0到191.255.0.0
C类指派范围:192.0.0.0到223.255.255.0
引入子网掩码,可以表明分类的IP地址有哪几个作为了子网号,这样本来后面全都是IP的号,就可以继续利用子网掩码再进行细分。子网掩码用连续的1来对应网络号和子网号,0对应主机号,然后子网掩码和IP地址相与操作就可以得到这个IPv4的地址所在的子网的网络地址。
C类空间太小,没有得到充分利用,后来又提出了无分类编址(当然也提出了IPv6)来解决问题。无分类编址采用:
网络地址 + " / " + 网络前缀数量
的格式,比如”128.14.35.7 / 20“
就代表,这个IP地址,前面20位都是网络号,剩下12位是主机号,这样的话就能把整个IP地址分的更多,而不是分各种类别,各个块里限制的比较死。
和其他协议的报文首部格式一样,IP协议的功能也在这里体现。
网际控制报文协议(Internet Control Message Protocol)
这个协议是为了更有效地转发IP数据报,提高交付成功的机会。主机或者路由器使用ICMP协议发送差错报文和询问报文,ICMP报文被封装在IP数据报里发送。
差错报文分为五种:1.终点不可达;2.源点抑制;3.时间超过;4.参数问题;5.改变路由。(都是目的主机或路由器反馈给源主机或路由器的)
询问报文有两种:1.回送请求和回答;2.时间戳请求和回答。(都是源主机或者路由器向目的主机或路由器的)
分组网间探测(Packet InterNet Groper)也就是,常说的PING命令。这个命令没有经过运输层的TCP或者UDP,直接使用了网际层的ICMP,来发送请求和回答报文。用来测试主机或者路由器的连通性。
跟踪路由TraceRoute命令,比如windows的tracert命令。这个命令也是应用层直接使用了网际层的ICMP协议(Unix系统并是使用了UDP协议),发送请求和回答报文以及差错报告报文,用来测试IP数据报从源主机到目的主机要经过哪些路由器。
关于IP数据报的转发,主要是设计到路由器的一些路由选择协议、ARP(Address Resolution Protocol)地址解析协议,根据IP获取MAC地址的过程。其中直接交付、间接交付的区别就是有没有经过路由器转发,路由器可以隔离冲突域、广播域等等。
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。NAT 可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上。NAT路由器在将内部网络的数据包发送到公用网络时,在IP包的报头把私有地址转换成合法的IP地址。
ipv4本来都要用光了,但是有了NAT,让ipv4又挺了20年。
RFC1918规定了三个保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。这三个范围分别处于A,B,C类的地址段,不向特定的用户分配。
这些地址可以在任何组织或企业内部使用,和其他Internet地址的区别就是,仅能在内部使用,不能作为全球路由地址。对于一个封闭的组织,如果其网络不连接到Internet,就可以使用这些地址,而不用申请。
对于有Internet访问需求、内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。依据这种模型,NAT网关夹在中间做一个转换,数量庞大的内网主机就不再需要公有IP地址了。
一般使用私网ip作为局域网内部的主机标识,使用公网ip作为互联网上通信的标识,在整个NAT的转换中,最关键的流程有以下几点:
如果一个内部主机唯一占用一个公网IP,这种方式被称为一对一模型。此种方式下,转换上层协议就是不必要的,因为一个公网IP就能唯一对应一个内部主机。
显然,这种方式对节约公网IP没有太大意义,主要是为了实现一些特殊的组网需求。比如用户希望隐藏内部主机的真实IP,或者实现两个IP地址重叠网络的通信。
它能够将未注册的IP地址映射到注册IP地址池中的一个地址。
不像使用静态NAT那样,你无需静态地配置路由器,使其将每个内部地址映射到一个外部地址,但必须有足够的公有因特网IP地址,让连接到因特网的主机都能够同时发送和接收分组
这是最常用的NAT类型。NAT重载也是动态NAT,它利用源端口将多个私网ip地址映射到一个公网ip地址,它也被称为网络地址端口转换NAPT(Network Address Port Translation)(Port-Level NAT)(多对一)。
通过使用PAT(NAT重载),只需使用一个公网ip地址,就可将数千名用户连接到因特网。其核心之处就在于利用端口号实现公网和私网的转换。
面对私网内部数量庞大的主机,如果NAT只进行IP地址的简单替换,就会产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分响应应该转发到哪个内部主机。
此时,需要NAT设备根据传输层信息或其他上层协议去区分不同的会话,并且可能要对上层协议的标识进行转换,比如TCP或UDP端口号。
这样NAT网关就可以将不同的内部连接访问映射到同一公网IP的不同传输层端口,通过这种方式实现公网IP的复用和解复用。
这种方式也被称为端口转换PAT、NAPT或IP伪装,但更多时候直接被称为NAT,因为它是最典型的一种应用模式。
也就是说,我们利用端口号的唯一性实现了公网ip转换为私网ip的这一步。PAT(NAT重载)能够使用传输层端口号来标识主机,因此,从理论上说,最多可让大约65000台主机共用一个公有IP地址。
优点:
最大优点就是节省大量的IP资源
缺点:
NAT最大的弊端,破坏了IP端到端通信的能力,因此无法进行端到端的ip跟踪。
同时,NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但有些应用层的协议比如FTP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。
DNS(Domain Name System)域名系统
我们知道计算机之间的通信,其实都是基于IP地址的,可是我们访问的时候往往使用的网址髌骨是ip地址,这是因为IP地址太难记了啊!
那么输入网址如何访问IP,其实就是DNS服务器在帮助我们做地址解析。
因特网采用的是层次结构命名树作为域名,各层分量用点隔开,总共组成一个域名。格式如下:
xxx . 三级域名 . 二级域名 . 顶级域名
各级的域名是由上一级管理机构管理,顶级域名则由一个机构:因特网名称与数字地址分配机构ICANN管理。
用来解析域名的域名服务器也可以划分为四种类型:
本来每次访问一个域名,都需要依次查询,但是为了效率,利用了缓存来解决这个问题, 浏览器、操作系统、本地DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。所以实际上的过程并不是直接那些服务器工作的。
比如:如果我现在要访问 www.baidu.com ,那么过程是这样的:
其中,显然1、2、3,都是缓存直接优先查找,交给下一级操作,找到了就直接返回,主机到本地域名服务器的查询过程,采用的是递归查询;
4 5,6 7,8 9是三个来回过程,本地向不同级别的其他服务器查找的过程,都是本地服务器发出的请求,是迭代查询。
Windows的命令:
ipconfig/displaydns -查看被缓存的域名解析
ipconfig/flushdns -清空DNS缓存
问题:根服务器在哪里?
按照百度百科的说法是原有的13台加上为ipv6新建的25台,在世界各地选址的。
显然,域名和IP的对应过程是一个DNS解析过程,那么解析的服务器本人是可能被绑架的。
攻击者劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致用户对该域名地址进行访问的时候,由原来的IP地址转入到修改后的IP地址。结果就是让正确的网址不能解析或者是被解析到另一个网址的IP,实现获取用户资料或者破坏原有网址正常服务的目的。
又称域名服务器缓存投毒,是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。它和DNS劫持的不同之处,在于污染针对的是DNS缓存,是在查询信息到达目标DNS服务器前,经过的节点上做手脚,也就是说,这个假的数据包并不是在网络数据包经过的路由器上,而是在其旁路产生的,因为是UDP协议,最快返回的会被认为是答案,那么最后会先返回一个错误答案。
需要说明的是,传统来理解,这个查询过程需要快速,并且可能要访问很多个服务器去查询,所以是采用UDP协议进行传输的,比TCP快。
但也不一定,比如报文长度和DNS污染各种各样的攻击出现,UDP的不可靠因素太大,所以加上了TLS版本(像https一样),所以其实是基于TCP协议了。