渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(2)
前情回放:《每天一博客》系列来到第二天,在上一篇,我们简单地了解了OSI七层模型和TCP/IP协议栈分层的情况。只要能够了解七层模型每一层的作用以及与TCP/IP协议栈的对应关系,我们就已经形成了对互联网协议轮廓的大致印象。如果还能够在脑海里构造出那个科幻式的比喻,或许能够加深对计算机网络的感性认识。
舍友跟我打赌说我肯定不能坚持一个月三十天每天都坚持写一篇技术博客,我说少写一篇我就给你买个泡面。为了泡面,必须要坚持下去!
上一篇提出的问题没人回答,希望这一篇的评论里能够看到。我的问题是:为什么要学习TCP/IP协议栈,学来有什么用?(能够举例说明就更好啦)
——————————————————————————————闲聊技术——————————————————————————————————
首先,我们再来回顾一次OSI七层模型和TCP/IP协议的对比图。在看图的时候,不妨在脑子里回想一次根据OSI模型进行通信的完整过程,并且对比记忆TCP/IP协议分层情况。
从下往上看,首先TCP/IP的第一层是网络接口层。TCP/IP中对于OSI参考模型的数据链路层及以下部分(物理层)未作出定义,因为TCP/IP以这两层的功能是透明的为前提。然而,数据链路的知识对于深入理解TCP/IP与网络起着重要的作用。但是,由于时间和进度的关系,我只是浏览、阅读一遍,留个大概的印象。功利性地说一句,一般面试中也极少有涉及这方面的问题。
所以,再看到第二层——网络层。在这一层,我们可以看到TCP/IP中的“一半”,那就是IP协议。
第三章:IP即网际协议
第一节:IP相当于OSI参考模型的第三层
我们先来回顾一下,网络层的作用是什么呢?实现终端节点之间的通信,这种终端节点之间的通信也叫“点对点”(end-to-end)通信。
可能还是有点突兀,我们还是先从网络层与数据链路层的关系说起吧。数据链路层提供直连两个设备之间的通信功能,例如PC机到路由交换机、两个路由之间。对比之下,作为网络层的IP则负责在没有直连的两个网络之间进行通信传输。
以一段从深圳到上海的旅途为例说明两层之间的关系好了。假定一个人想从深圳出发旅游一直到上海,那么他从网上查了相关资料,定了一份详细的行程表——在深圳坐火车到厦门,然后从厦门坐飞机到杭州,最后搭大巴到北京。每种交通工具都必须购票,而这些票都只有在特定区间内才有效,例如火车票只能到厦门,而要去杭州就必须再去买飞机票。
刚才说到的“区间内”就如同通信网络上的数据链路。而整个全程的行程表的作用就相当于网络层。如果我们只有行程表而没有车票,就无法达成交通工具到达目的地。反之,如果除了车票其他什么都没有,恐怕也很难到达目的地。因为你不知道该坐什么车,也不知道该在哪里换乘。因此,只有两者兼备,才能保证到达目的地。与此类似,计算机网络中也需要数据链路层和网络层这个分层才能实现向最终目标地址的通信。(附图仅做装饰所用)
第二节:IP地址的基础知识
IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成。而与此相关的,就是IP地址的分类。
IP地址的分类分为四个级别,分别为A类、B类、C类、D类。它根据IP地址中从第1位到第4位的比特咧对其网络标识和主机标识进行区分。
■A类:A类IP地址是首位以“0”开头的地址。从第1位到第8位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0是A类的网络地址。A类地址的后24位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。
■B类:B类IP地址是前两位为“10”的地址。从第1位到第16位是它的网络标识。用十进制表示的话,128.0.0.1~191.255.0.0是B类的网络地址。B类地址的后16位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。
■C类:C类IP地址是前三位为“110”的地址。从第1位到第24位是它的网络标识。用十进制表示的话,192.168.0.0~239.255.255.0是C类的网络地址。C类地址的后8位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。
■D类:D类IP地址是前四位为“1110”的地址。从第1位到第32位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255是D类的网络地址。D类地址没有主机标识,常被用于多播。
说到这里,必须还要说一下广播地址和私有地址。
广播地址——用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为1,就成为了广播地址。
私有地址——10 .0 .0.0~10 .255.255.255(10/8) A类
172.16 .0.0~172. 31.255.255(172.16/12) B类
192.168.0.0~192.168.255.255(192.168/16) C类
另外还有关于CIDR(无类型域间选路)和VLSM(可变长子网掩码)的知识,这里就不细说了。
第三节:路由控制
发送数据包时所使用的地址是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送到对端目标地址,在数据送送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
路由表的形成方式有两种:手动配置和自动配置——前者也叫静态路由控制,后者叫做动态路由控制。为了让动态路由及时刷新路由表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息。这里提到的路由协议包括OSPF、RIP等,有兴趣的同学可以翻翻计算机网络的教材复习一下。
路由表的聚合可以有效地减少路由表的条目。能够缩小路由表的大小是它最大的优势。路由表越大,管理它所需要的内存和CPU也就越多,并且查找路由表的时间也会越长,会导致转发IP数据包的性能下降。如果想要构建大规模、高性能网络,则需要尽可能削减路由表的大小。
———————————————————————————————————————————————————————————————————————
最后总是忍不住多说几句闲话:
1.现在已经将近凌晨一点钟,本来还想写多一章的,但是时间比较晚不想熬夜,身体才是最大的本钱嘛。不过进度是有点慢,看来还是得多花点时间,而且在看书或写博的时候要更加专注提高效率才行。
2.不知不觉又坚持了一天,虽然只完成了十五分之一,连百分之10都不到,不过还是很开心。与此同时也要提醒自己,不要让这种节奏给断了。
3.虽然偶尔会觉得这样一边复习一边写博客会不会进度太慢,担心这样做是不是无用功,但是我喜欢这个过程——看书的时候更加专注了,写完博客之后也蛮有成就感,该理解的理解了,该记住的也记差不多。每个人都有合适自己的做事方法,我觉得把所思所想所做诉诸文字就是我的最佳方法了。