通信的基础
IP协议的实现,成功实现了主机间通信的功能,但是这里仍有许多问题需要解决,单纯使用IP的网络必须使用对应的IP地址才能访问对应的服务器,IP地址又从哪里获取,IP是否重复,内外网络IP地址的转换等等。由此,需要更多的协议来协助IP协议完成数据传输的告诉公路。
域名访问服务 DNS
每个主机都有对应的IP,但是对于人类来说记忆每个服务器的功能和它的IP地址无疑是一个很麻烦的事情,无序的数字记录起来很困难。于是就有了DNS(Domain Name Service)服务。
DNS实现
域名服务的实现原理很简单。
用户在web代理上(通常为一个浏览器)输入所需访问的域名信息,主机查询本地是否有该域名对应的IP地址信息,若不存在,向域名服务器发起DNS请求,请求该域名对应的IP地址信息,域名服务器查询到对应的IP地址信息后,回复给主机,主机构造目的地址为域名地址的报文发送给域名对应服务器,开始数据的交互。
地址解析服务 ARP
主机接入网络后,对于一个已被授予IP地址的主机,它需要确认自己的IP地址是否被使用,当其需要寻找目的主机时,又要去请求对应主机的MAC地址才能正确发送给对端的数据报文,同时,主机处于在线的情况下, 需要固定时间进行保活,防止自己使用的IP地址被占用等。
因此,需要一个协议来帮助主机来解析对端地址、确定自己使用的地址是否重复。这个协议就是ARP(Address Resolution Protocol)
ARP的使用
ARP的二层协议标识是0x0806,其工作在2层(数据链路层)和3层(网络层)之间,来完成IP和MAC的转换。一个带有IP地址的主机上线后,会发送一条ARP广播请求,请求其本身是否有对应的MAC地址存在,若存在则证明当前网络中存在使用同一个地址的主机,若不存在则可以正确使用这个IP地址;而当主机需要访问一个已知的IP地址时,同样会发送ARP请求,请求该地址对应的MAC,来完成报文的转发。
连通性检查——ICMP
我们有了IP协议,可以完成数据的传输,但是仅仅使用IP协议,当网络存在异常时,只知道数据无法正常传输,但是无法得知当前的网络状况,通过ICMP协议可以帮我们检查当前的网络。在windows和linux上执行“ping”命令就是在发送ICMP报文。
DHCP (Dynamic Host Configration Protocol)动态地址配置协议
在实际网络环境中,允许静态配置的方法接入网络的情况很少,大多都由网络运营商对IP地址进行分配。通过使用DHCP(Dynamic Host Configration Protocol)协议来进行IP地址的分配。
DHCP地址分配。
未分配地址的主机不具有IP地址,所以它会向其所在网络发送DHCP广播请求,请求网络中的DHCPserver 为其分配地址(也可通过中继的方式跨网络获取IP地址),DHCPserver收到请求后,向主机提供分配给主机的地址信息
NAT (Network Address Translator) 网络地址转换
由前述可知,现有的IP地址对于需要接入网络的设备而言,是远远不够的。在使用了可变长子网的方法来扩充可用的网络地址后,有没有什么途径来完成使用内网地址去访问公网IP地址的方法呢。
NAT协议提供了这样一种方法。将内网的IP地址和外网的IP地址形成一种映射关系
如上图所示,所有的内部网络设备在需要访问外部网络时,需要有一个中间设备(通常为网关)完成内网地址和外网地址的信息转换。
NAT使用 三种方式完成地址转换:
1.静态转换(1对1)
静态转换的方式,即内网、外网的IP地址采取1对1的方式进行转换,内网内的IP地址想要访问外部信息
,中间设备将数据包的源地址更换为对应的公网IP地址,将报文转发出去。使用这种方法,内外网仍是占用了一个公网IP地址,并没有减少对有限的IP地址的占用问题。
2.多地址动态转换(多对多)
使用多地址转换的情况下,内网IP地址进行公网访问时,中间设备会在一组已指定的公网地址中选择一个来完成地址转换,所以此种情况下内网地址访问公网时所用的IP地址是不固定的。
3.端口复用(多对1)
端口复用状况下,内部主机去访问公网时,不再使用IP地址替换来完成公网访问,而是将内网的IP地址与公网的IP地址的某个端口建立映射关系,中间设备收到了某个外网发来的信息,依据端口号,来发给指定的内网主机。现在网络中的NAT一般用本种方式完成地址转换。
小结
TCP/IP协议族,是以太网的最重要构成部分,在错综复杂的网络环境中,仅仅依靠IP的寻址和TCP的传输来完成网络通信是远远不够的,因此需要更多的网络协议来帮助主机加入网络、传达消息。