最近需要用到网络的一些知识,所以重新温习了一下计算机网络的知识。本人是通信科班出生,所以学习的是通信网,但是后来读了计算机网络的一些经典书籍之后,发现通信网与计算机网络所介绍的内容之间差别并不是很大,而书的质量差别非常大,好的书能让你把平时碰到的一些问题进行更深入的理解,而差的书你读了之后感觉跟没读过一样,完全云里雾里(不幸本人大学期间的教科书就是这种)。关于网络方面的经典书籍可以参考水木社区网络技术版的精华区(x-16-7),当然本博客的程序员技术练级攻略一文中也介绍了几本网络方面的经典书籍,与水木上的大同小异,读者可以根据自己的需求作选择。
好了,开始本文的主要内容,本文主要使用TCP/IP体系结构,内容适合网络新手,只涉及一些容易忽视的基本概念,不涉及协议细节,请高手绕道。
首先上一张协议栈的总体框图,框图中展示了每个层次的数据单元、工作于该层次的设备名称以及数据单元如何层层封装往下层传递的。
1. 概念上的细节问题
- 大写的K等于2的10次方即1024,同样大写的M表示2的20次方,大写的G表示2的30次方,例如1KB表示1024个字节。而小写的k表示1000,而非1024,例如1kB表示1000字节。当然很少有1mB和1gB这种写法。
- 带宽这个概念在计算机网络和通信领域有着很明显的差别。我是学通信的,所以带宽在我看来就是指信号所占据的频带宽度,以赫兹(Hz)为单位。后来发现在计算机网络领域,带宽通常指信道的数据传输速率,单位为bps。其实本质上信道的最大传输速率与信道的频带宽度之间存在着一定的关系,但是真实的传输速率还与具体的调制方式等因素有关。
- OSI体系结构具有七层,这个大家肯定很熟悉,然而TCP/IP体系结构具有四层。OSI是国际标准,TCP/IP是非国际标准,但比OSI使用广泛,被认为是事实上的国际标准。TCP/IP通常不是单指TCP和IP这两个协议,而是表示整个TCP/IP协议族或TCP/IP体系结构,所以很多书名会出现TCP/IP。
- 以太网(Ethernet)是一种计算机局域网组网技术,并不等同于局域网,目前局域网组网技术大多采用以太网。严格来讲以太网是指符合DIX Ethernet V2标准的局域网,但是目前把IEEE 802.3标准也认为是以太网标准。以太网有10BASE5、100BASE-T(平时接触最多),1000BASE-SX等多种,所以以太网的物理传输介质不一定都是双绞线,也可以是同轴电缆(在竞争中惨败,几乎已绝迹)或光纤(吉比特以太网及以上大量采用)。
- 以太网交换机又称为第二层交换机,是工作在数据链路层的设备,本质上是一个多接口的网桥。但目前市售的交换机很多都混杂了网桥和路由器的功能,所以要具体情况具体分析。
- 在网际层以上使用的中间设备叫做网关,但是由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关(通常我们认为网关就是网络层使用的路由器)。
- 网际层和传输层是工作在操作系统内核中的,网络接口层是工作在网络适配器中的,通过驱动来跟操作系统打交道。平时我们接触到的都是应用层的应用程序,其一般通过套接字接口与操作系统打交道。
- 域名中的标号可以是英文字母、数字或连接符(-),字母不区分大小写。我们平时在Windows系统的网络连接->TCP/IP属性里配置的DNS地址指的都是本地域名服务器(或称为默认域名服务器)的地址。ISP或大学或公司都可以拥有一个本地域名服务器。
2. 网络接口层
网络接口层对应OSI七层模型中的物理层和数据链路层,与硬件沾边比较多。平常计算机上使用 的网络适配器(拨号,以太网或无线)就是用来实现这层功能的。当然在科研领域,会使用软件无线电来提高科研效率或进行算法验证,这时候就使用软件来实现这两层的功能(GNU Radio+USRP用的比较多)。搞计算机的人对网络接口层无需太多关注,这是通信的领地,尤其是无线通信和移动通信。这里顺便提一句,很久以前有个叫香农的人,写了一条香农公式,挖了一个大坑,然后研究通信的人就前赴后继,乐此不疲地去跳坑。香农就是信息领域的开创者,同时也是自控领域的开创者,牛得不行了。物理层主要的工作是让比特洪流变成能在信道上传输的波形;数据链路层主要实现封装成帧、差错检测和透明传输这三个功能。现在的确认和重传机制都放在了传输层来实现(TCP)以提高效率。
数据链路层的协议主要分为点对点协议和使用广播信道数据链路层协议(CSMA/CD(以太网)、CSMA/CA(无线局域网))。点对点协议主要有PPP协议,我们在家上网通常要创建一个PPPoE连接,这个PPPoE就是对PPP协议进行封装后的协议,主要实现宽带上网的主机与ISP路由器之间的通信。
需要强调的是,使用网络接口层设备(集线器、网桥、以太网交换机等)进行连接,仅仅是把一个网络扩大了,其仍然属于同一个局域网,同一个局域网里的主机或路由器的IP地址中的网络号必须是一样的。
3. 网际层
网际层在OSI模型中对应网络层,网际层协议的数据单元是IP数据报(也称为数据包、分组或包)。IP数据报在网络中传送时(经过若干个路由器),其源地址(IP地址)和目的地址(IP地址)是不会变化的,但是MAC帧在不同网络上传送时,其源地址(MAC地址)和目的地址(MAC地址)要发生变化,变化主要发生在路由器上。
大名鼎鼎的ping和traceroute(Linux命令,Windows中为tracert)使用的就是网际层协议ICMP,这个在笔试面试中经常出现,大家可以了解一下其中的原理。据说当时Van Jacobson试图查找一个路由问题,搞得两天两夜不眠不休,于是决定自己写个utility来帮助调试,进而就有了traceroute。
网际层中最重要的设备要数路由器了,路由器中最重要的就是路由选择协议和查找转发表算法。路由选择协议有IGP和EGP之分,IGP供AS内部使用,EGP供AS之间使用,写到这里我突然联想到前段时间看到的文章:联通电信互联问题增加互联网企业成本,这两大ISP在边界路由器上肯定做了很多手脚。路由选择协议的层次结构如下图:
路由选择协议
在很多学校和企业中都是使用NAT路由器(安装了NAT软件的路由器)来解决专用网内部访问因特网的,当你的IP地址属于专用地址(10/8,172.16/12,192.168/16),而你又能上因特网时,你们学校或单位八成使用的就是NAT路由器,其实大部分的NAT是NAPT。专用网内部的主机不能充当服务器用,所以如果你在学校的实验室或公司内部架了台Web服务器,只能供学校或公司内部交流,外网的用户是访问不了的。
4. 传输层
5. 应用层
在使用套接字接口时,肯定会与套接字描述符打交道。套接字描述符(socket descriptor)是一个整型,用来映射操作系统分配给进程的系统资源(存储器空间、CPU时间、网络带宽等)。
本文只是对计算机网络中一些易忽视和混淆的概念进行了阐述,其中不免有错误,还请读者指正。
(全文完)