常见的教材第一章一上来就列出一大堆名词解释,还有特点啥的,看了就很头疼。学的时候也花了不少力气去记,但很快就忘了,说到底就是把知识孤立地记忆了。
所以首先从第一章开始就应该从整体出发,打造知识体系,搞清楚核心问题。先得知道计算机网络是什么,用来干什么,然后明白为什么要分层。在构建基础知识结构的时候,要把下面几个问题给搞清楚,这样理解后面就容易多了。
简单来说,计算机网络就是由通信设备和线路连起来,进行传数据,共享信息的网络(系统)。
计算机网络本质之一就是来传输数据,但它的任务绝不这么简单。还要看传输的数据能不能“发送”和“接收”,要怎么告诉其他主机看得懂你发的,万一接收的主机处于关机状态,又要怎么办?
这就好像写情书给喜欢的女孩子,虽然看起来很简单,但是做起来难。内容该怎么写,既要含蓄又不能太直白。写好了之后该怎么给她,是当着面给,还是偷偷地塞她桌肚里。万一被别人劫持了,你又该怎么办?
面对复杂的数据传输任务,人们因此对计算机网络分层。就是将庞大而复杂的问题,转化成小而局部的问题,方便研究和处理。
为了让复杂问题简单化,于是采用了分层这个办法。不同分层是因为分的逻辑不同,但OSI和五层协议少见,TCP/IP才是重点。
目前广泛使用的是TCP/IP四层协议,因为它简单又实用。但一般TCP/IP协议只有最上面的三层,最下面的没啥具体内容,但为了方便弄懂计算机网络,我后面还是得从下往上,把这五层都讲一下。
先从物理层开始,它比较简单,主要看的是计算机之间怎么传输数据(单位比特流),而不是只有像双绞线、同轴电缆或光纤这样的传输媒介,它们只是物理层的一部分。
在谢希仁书中物理层开头就给你一大块数据通信的基础知识,可能很多人就懵了。别担心,这不是对大多数人来说不是重点,只是帮你理解物理层。
传输媒体就是物理通路,就是我们常见的各种网线。分导引型和非导引型,常见的导引型传输媒体有双绞线、同轴电缆和光缆。
信道就是信息通道,也是传送信息通过的媒介,它是单方向的也是看不见的。它不是电路,电路包含发送信道和接收信道。
“复用”可以理解成是共用,采用这种技术是为了节省成本。原来是多条信道,现在合并成一条,节省空间和成本。常见的复用技术有频分复用、时分复用和统计时分复用。
总结一下,物理层通过传输媒介来发送和接收信息,里面传输的数据本质就是二进制0和1。单向发送信息的通道叫信道,为了节约成本会采用信道复用技术,就是把原来多条信道合并成一条大信道。
数据链路层传输数据的单位是帧,这一层分两种类型的信道。一对一主机连接的信道就是“点对点信道”,一对多连接的信道就是“广播信道”。
局域网就是广播信道的一种,常见的拓扑结构如下图。随着局域网的发展,出现了不同称呼的局域网,比如以太网就是局域网的一种。但是以太网发展太快,以至于后来它成了“局域网”的同义词。
计算机和外部连接主要靠的是适配器,以前是装在网卡里的,然后插在计算机里,现在是直接差在计算机里。
适配器里有MAC地址,这个地址指明了传输数据的目的地。MAC地址是物理地址,也是个身份标识,不会因为你把电脑从上海带到北京就改变的。但是你更换一个适配器,那么地址就变了。
一般计算机网络中传输的数据不是连续传的,而是一整块数据分割成一块或一组,这一小块数据就是分组(也叫IP数据报,这个在网络层会详细解释)。组分是从网络层传来的,所以在数据链路层就要用数据链路层的方式来处理。
上面说到不同主机之间连接有两大类,这两大类有区别,但几个基本特点是一致的:封装成帧、透明传输、差错检测和流量控制。
数据链路层拿到网络层传来的分组,然后就要在数据前加上用ASCII表示的首部(SOH)和尾部(EOT)专门字符。
但也会出现传的数据不是ASCII字符时,那么数据里会有SOH和EOT,这就要用透明传输的办法了。简单说就是数据里的SOH和EOT前加上转义字符ESC,要是传到网络层,那就传之前删除这个转义字符就好。
数据传输不可能不出错,所以需要CRC(循环冗余检验)的检错技术,这就是差错检测。
数据传输有时候就像人说话一样,正常对话应该是你一句,我一句。可是总有人会插嘴,打断你。放到数据传输里,也有数据一起传输导致发生冲突的情况,所以就需要流量控制这个策略。
流量控制就两种方式,一是“停止-等待流量控制”,另外一个是“滑动窗口流量控制”。第一个就像是你说一句话,我说一句话,这样互不干扰,才会让对话效率高。第二个就是发送方用一个窗口括住一组数据,同时接收方也有一个窗口来接收数据。对于接收方而言,只有放到窗口的数据才算是有效的,出去的就是无效的。
网络层传输单位是IP数据报,这一部分最重要的也就是这个IP和其他配套的协议,以及路由器输出数据的过程。
网络层主要提供的是将不同的网络(异构)连接起来,比如TCP/IP体系就是在网络层采用标准化协议。正是采用这种相同的网际协议(IP),或者说是相同的规则,才让不一样的主机连接一起。这就是虚拟IP网。
在互联网中有中间设备,因为两台主机之间不可能直接连接,所以需要中间设备连在一起,对于网络层来说,中继器是路由器。这可以理解成中间人,这就像你让A带句话给B,而A就是中间人。
不同层次有不同的中继设备,物理层的是集线器,数据链路层的是网桥或交换机,网络层是路由器,网络层以上是网关。
在网络层中路由器主要起着“选什么路”和“从哪转发”的作用。“选什么路”靠的是算法来实现的,“从哪转发”靠的是路由器将IP数据报从合适的端口发出去。
网络层中发数据,首先要有数据和地址。在网络层传输的单位是IP数据报,前面加个首部(IP地址),然后就传到数据链路层。这里顺便说下IP地址和MAC地址的区别。IP地址是IP数据报的首部,MAC地址是MAC帧的首部。网络层及其以上是用IP地址,数据链路层及其以下是硬件地址。
我们常见的IPv4,IPv6这样的是IP地址的版本,对应的就是第4,第6版本。也有1,2,3,5版本,但是没发布。IP地址是有限的,IPv4不够用了,于是IPv6就发明了。
现在有了数据和地址,但还不能发数据,因为还需要找出相对应的硬件地址。地址解析协议ARP就是来解决这个问题的。ARP就是解析出在数据链路层用的硬件地址,让IP数据报通过去。
由于传输数据存在效率低下和出错的情况,于是人们在网际层用忘记控制报文协议ICMP来提高数据交付的机会。最常见的应用就是PING,在DOS系统里用PING测试两台主机之间的连通性。
运输层传输单位是TCP报文,不同于网络层呢个,运输层的范围比它更大,提供了主机进程之间的通信。在运输层中最重要的是两个协议:TCP和UDP。
运输层实现的是主机间进程的通信,它们按照相同的协议进行数据传输,而接收方在剥去报文首部后又可以把它交到目的进程中。
此外运输层还要借助服务访问点TSAP来传送数据,这个服务访问点类似IP地址,MAC地址,是传输的目的地。
这两个都是运输层的协议,分别是用户数据报协议TCP和传输控制协议UDP。按照不同的协议传输的数据单位也是不一样的,TCP协议传输数据的单位是TCP报文段,而UDP传输数据的协议是UDP用户数据报。
二者最大的区别就是TCP是可靠传输,传输前要链接,因此负载就大,还要进行数据的检验,流量控制等操作。而UDP是不可靠传输,传输前不需要连接,所以直接把数据传过去。
发送方发出字节流,TCP协议给它加上首部然后通过服务访问点TSAP(类似端口)传输到下一层。从一台主机发送到另一台前要进行TCP3次握手,发送结束后4次挥手。然后接受方收到数据剥去首部,将字节流传到进程里。
如果传输过程中出现拥塞情况,TCP会用4种算法来处理:慢开始,拥塞避免,快重传和快恢复。
IP地址对人来说不好记,尤其是我们要访问总打开的主机(服务器),比如某乎、某度、某宝,要我们自己一个一个数字输入去访问这就反人性。为了方便人们更好地访问,于是发明了域名系统DNS就是来将IP地址转化成主机名字。
“域”就是地域的意思,域名系统就是根据地区分配的主机名字。每个域名都由标号序列组成,各标号之间由“.”隔开。而且域名是有等级的,最右边的级别最高。
实际工作中域名采用的是“域名解析”的方法,也就是把域名映射成IP地址,或者把IP地址映射成域名。
首先得明白万维网不是一种特殊的网络,而是互联网的一种服务,里面藏了各种各样的信息。把它比作一个文档,里面藏了文字,视频,图片等数据。
万维网一般由资源统一定位符URL、超文本传输协议HTTP和超文本标记语言HTML组成。分别解决了用户要访问什么地址,根据什么规则访问和访问的大概内容是什么的问题。
一般我们都是通过在浏览器输入URL访问某个网站的,首先浏览器向域名系统DNS发送请求解析,DNS解析成IP地址。然后浏览器和服务器建立TCP连接,建立之后发送HTTP请求,服务器就把响应文件传给浏览器。最后TCP释放,而浏览器解释响应的文件,将Web呈现给用户。
计算机网络本质就是一个传数据的系统,为了让传输简单点,才实现分层解决问题的。
字节传到传输层,传输层要依据规则(TCP/UDP协议)给字节前加上首部,做成TCP报文段或UDP数据报,最后通过接口传到网络层。
网络层给这个数据加上首部做成IP数据报,然后依据网际协议IP找到发送的地点,也就是IP地址,最后通过接口传到数据链路层。
在数据链路层接收的数据加上首部和尾部传给物理层,物理层接收到后就在传输媒体上传输电磁波(0和1表示),最后找到接收的主机。接收的主机再层层剥离,最后以字节的形式出现在接收方的主机屏幕上。
我最初在学习计算机网络的时候,也是和大多数人一样,觉得抽象,看过就忘。然后就使劲地看,结果看得越多越难受。后来“松鼠病”犯了,找各种资料,资料满满一个盘,可自己什么都不知道。
后来看别人怎么学习,自己找到了问题,就是孤立地记忆了,脑中没有知识大纲,各种知识混在一块。为了打造基础知识结构,我直接买了一本王道的计算机考研辅导,里面就把知识结构拎出来了,一目了然。快速刷完这个基础知识结构,再把谢希仁的书看一看,基本也就没问题了。
经典教材:谢希仁:《计算机网络》和《计算机网络:自顶向下》(这本书不难理解)
入门教材:《图解TCP/IP》,《图解HTTP》
哈工大计算机网络和操作系统一直都是口碑不错的视频,这里面还包括了网络编程,网络安全,非常全面,强烈推荐!