前情回顾:在第三章,我们复习了传输层最重要的一个协议——IP协议,重新回顾了IP协议的作用、IP地址的基础知识以及路由控制的基本知识。
这几天醒来的第一件事就是打开电脑把前一个晚上的博客发布出来,刷牙洗脸之后就开始想今天的博客该怎么办。还能怎么办呢?花时间看书,理解和复习书上的东西,边看边想到时候应该怎么写出来,一天看下来差不多了就动手在电脑上敲出来,没有半点捷径可走。
有时候会想这样是不是很笨,效率低得要死,常常一篇博客下来感觉也没写出什么东西。想了想,好处还是有的:1.看书的时候多了思考,不像以前那样一目十行;2.有空的时候就会想着多看书而不是做其他消磨时间的事儿;3.在看完书之后,脑子里面常常会思考博客该怎么写,思考的过程也就是温习的过程。不知道别人是怎么复习的,反正我就是这么一个人——不诉诸文字就无法思考,如果这样坚持下去真能够进步很多也说不定。
反正现在也是在做自己喜欢的事儿,还有进步的可能,这还有什么可以要求更多的呢?
——————————————————————————闲聊结束————————————————————————————————————
在实际的通信中,仅凭IP是远远不够的,还需要众多支持IP的相关技术才能够实现最终的通信。下面会陆续介绍IP的各种辅助技术,具体包括DNS、ARP、ICMP、DHCP、NAT等,而其余的类似IP隧道、IP多播、IP任播、质量控制(QoS)以及网络拥塞的显示通知和MobileIP技术就不一一详细说明了。
第四章:那些为IP补漏的协议们
第一节:人性化的发明——DNS
我们平常在访问某个网站时几乎从来都不会使用IP地址,而是用一串英文字母和点号组成的字符串,例如www.baidu.com(如果我们要记如125.216.123.22之类的IP地址才能浏览网页,也太反人类了)。可是传输层IP协议在进行通信的时候使用的都是IP地址,那是什么帮我们完成从网址到IP地址的转换呢?答案就是,DNS(Domain Name System),域名系统。
首先,我们来看看域名的分层结构图:
最顶端是根节点。根节点下面有若干个子节点,其中包括我们经常接触的.com、.edu、.gov等。这些子节点又会作为父节点分支处更多的子节点,像一棵倒立的树一样延伸出去。
下面,我们来回忆一下DNS查询的流程是怎样的。首先,为了将域名解析为IP地址,会向DNS服务器进行查询处理。接收这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回。如果没有,则域名服务器再向上一层根域名服务器进行查询处理。因此,从根开始对这棵树按照顺序进行遍历,直到找到指定的域名服务器,并由整个域名服务器返回想要的数据。
当然,无论是解析器(进行DNS查询的主机和软件)还是域名服务器,都会将最新获取到的信息保存在缓存里一段时间。这样,可以减少每次查询时的性能消耗。
第二节:数据链路层的渴望——ARP协议
有了DNS之后,我们已经解决了域名解析转换成IP地址的问题。然而,在底层数据链路层,进行实际通信时却有必要了解每个IP地址所对应的MAC地址。
ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。(不过ARP只适用于IPv4,不能用于IPv6。IPv6中可以用ICMPv6替代ARP发送邻居探索消息)简而言之,ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。
从一个IP地址发送ARP请求包以了解其MAC地址,目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。(ARP请求包还有一个作用,那就是将自己的MAC地址告诉给对方)
顺便提一下RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。
第三节:辅助IP的ICMP
架构IP网络时需要特别注意两点:确认网络是否正常工作,以及遇到异常时进行问题诊断。ICMP正是提供这类功能的一种协议(我们经常使用的ping指令以及tracert指令都是基于ICMP协议所实现的)——处女面的时候就遇到这一题。
ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。有了这些功能以后,我们就可以获得网络是否正常、设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。
ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。具体的内容就不详细探讨了,后面总结常见面试题的时候可能会进一步讨论。
第四节:实现即插即用的DHCP
想象一下,如果我们拿着一台MAC到星巴克装X,还要跟让店员告诉我们要怎么设置IP地址,而且还要注意不能跟别人重复以防止IP地址冲突,这是一件多么败坏土豪兴致的事情。于是,为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP(Dynamic Host Configuration Protocol)协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。也就是说,DHCP让即插即用变得可能。
使用DHCP之前,首先要架设一台DHCP服务器。然后将DHCP所要分配的IP地址设置到服务器上。此外,还需要将相应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。一般来说,有wifi功能的路由器都能充当DHCP服务器。
DHCP在分配IP地址有两种方法。一种是由DHCP服务器在特定的IP地址中自动选出一个进行分配。另一种方法是针对MAC地址分配一个固定的IP地址。这两种方法可以并用。
第五节:私有地址与全局地址的转换——NAT
NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除了转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(Network Address Ports Translator)技术,由此可以实现用一个全局IP地址与多个主机的通信。(看到这里是不是突然虎躯一震、菊花一紧呢?没错,平时使用的路由器就是用到这个协议,能让我们用一个IP地址多台电脑上网。)
关于NAPT是如何实现一个IP地址多个主机进行TCP/IP通信的,我们会在后面的博客中详细讲述。不过这里可以先说这么一句:在使用TCP或UDP通信当中,只有目标地址、源地址、目标端口、源端口以及协议类型(TCP或UDP)五项内容都一致时才被认为是同一个通信连接,此时所使用的正是NAPT。
网络层的内容算是大概过了一遍,明天我们会进入更加重要,面试中考察点最多的传输层。虽然今天的内容看起来比较少,但是却省略不少东西,因为在没有图的情况下的确不太好说明。不过大家如果看到可以翻开相关的参考书籍或者百度一下,进一步了解详细内容。
—————————————————————————忍不住,说几句———————————————————————————————
今天是第三天了,30天里的第3天,完成了十分之一,也就是10%。
1.今天一天都比较累,尤其是晚上跟同学出去吃个饭,回来特别困。以为自己撑不下去了,到了十一点才刚开始码字就想着睡觉,实在没多好的状态,不过最后还是咬牙坚持下来。有的时候,除了方法和激情,还需要一点点坚持。最后还是坚持写完了,强迫自己去思考去总结去措辞,这真不是一件简单的事情。虽然我常常跟同学吹嘘我写东西很随意,一挥手就是几千字。但经常写技术博客或者写评论的童鞋肯定也很清楚,有的时候没灵感或没状态却要坚持写完是多么地痛苦。
2.你的评论,是我最大的助力。大家多交流交流吧。
3.现在是2013年10月21日1:23:50,五个小时后就要爬起来坐一个多小时地铁,走三十分钟路到公司上班(实习)。很辛苦么?还好吧,想到去到公司就能发布一篇博客就觉得还好。意义都是要自己去寻找的,人生永远都是小马过河,别人所说的一切终究都只是建议。