对于非计算机专业出身的程序猿,了解计算机操作系统,编译原理,计算机网络的通信,对于自身编程的提高是非常有帮助的。那么今天就来简单介绍一下计算机之间是怎么进行通信的。
1.什么是计算机网络?
计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
要想让两台计算机进行通信,必须使它们采用相同的信息交换规则。我们把在计算机网络中用于规定信息的格式以及如何发送和接收信息的一套规则称为网络协议或通信协议。
2.如何理解计算机网络的设计模型?
为了减少网络协议设计的复杂性,网络设计者并不是设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而是采用把通信问题划分为许多个小问题,然后为每个小问题设计一个单独的方法。分层模型是一种用于开发网络协议的设计方法。本质上,分层模型描述了把通信问题分为几个小问题(称为层次)的方法,每个小问题对应于一层。每一层都是为了完成一种功能。为了实现这些功能,需要大家都遵守共同的规则。大家都遵守的规则,叫做"协议"(protocol)。
开放系统互连基本参考模型 OSI/RM(Open System Interconnection Reference Model)是国际化标准组织ISO( International Organization for Standardization)制定的一套网络互连模型。该体系结构采用的是七层模型框架,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。然而OSI由于历史遗留的问题,在网络模型上并没有得到广泛的应用。得到广泛应用的是更为人们所熟知的非国际标准的TCP/IP体系结构。TCP/IP体系采用的是四层的模型,分别是网络接口层、网络层、运输层、应用层。不过在一般的书籍材料中,往往采用的是结合OSI和TCP/IP的一种五层模型来描述计算机网络通信的系统模型,自上而下分别是应用层、运输层、网络层、数据链路层、物理层。越顶层的越接近用户、越底层的越靠近计算机硬件。
3.五层模型简介:
应用层:应用层是体系中的最高层,最接近用户,应用层直接为用户的应用进程提供服务。其中,最为人们所熟知的应用层协议有超文本传输协议HTTP(HyperText Transfer Protocol)协议、文件传输协议FTP(File Transfer Protocol)协议。
运输层:运输层的任务主要是负责向两个主机中进程之间的通信提供服务。运输层主要使用两种协议:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram Protocol)。
网络层:网络层主要负责将传输层产生的报文段封装在不同主机间进行传送。
数据链路层:数据链路层将网络层下交的数据报文组装成MAC帧,在两个相邻的结点间进行传送(主机和路由器,路由器和路由器)。
物理层:顾名思义就是利用物理传输媒介如双绞线、光纤等提供比特流的传输。
4.1 物理层
通信的目的就是为了传送信息,人类接触到的声音、文字、图像都是信息,是我们人类所能理解的。然而对于计算机而言,计算机并不能理解这种模拟信号,对于计算机,它能够理解的只有数字0和1.我们在计算机网络中传递的信息,就是这些信息的一种电气表示。这里对于物理层我们只做简单的介绍。由于本人是电信专业毕业,所以这里不再多赘述这方面的内容,感兴趣的可以去看看《通信原理》这门课程。我们这里就只需要知道,它是用于将数据链路层下发的MAC帧发送出去就足够了。
4.2 数据链路层
当我们需要在一条物理线路上传输数据时,除了需要一条物理线路,还需要有一些必要的通信协议来控制这些数据的传输。将这些实现协议的硬件(网络适配器)和软件加在一起,便构成了数据链路。数据链路层使用的信道主要有两种:点对点信道和广播信道。
4.21 什么是帧?
帧是数据链路层的协议数据单元。封装成帧就是将一段数据(网络层下发下来的IP数据报)在其前后分别添加首部和尾部。首部中包含了发送者和接收者的信息。其中就包括MAC地址。数据链路层把网络层交下来的数据构成帧,以帧的形式发送到链路上,以及把接收到的帧剥掉首部和尾部把剩下的数据取出并上交到网络层。
4.22 什么是MAC地址?
数据在信道中传输,怎么才能到达指定的主机?这时就需要像一个送信地址一样的地址指明这台主机在哪里。在局域网中,这个地址就是硬件地址,又称为物理地址或者MAC地址。MAC地址是一种包含48位的二进制全球地址。MAC地址被固化在了计算机的网络适配器中。地球上每一个MAC地址都是唯一的。一台主机无论到了地球哪个位置,它的MAC地址都是固定不变的,除非更换了主机中的网络适配器。(想要找到指定的MAC地址,还需要ARP协议,我们将在后面介绍)
4.3 网络层
网络层主要负责将传输层产生的报文段封装在不同主机间进行传送。网际协议IP是TCP/IP体系中最重要的两个协议之一,它还与其他的四个协议相互配套使用。地址解析协议ARP(Address Resolution Protocol)、逆地址解析协议RARP(Reverse Address Resolution Protocol)、网际控制报文协议ICMP(Internet
Control Message Protocol)、网际组管理协议IGMP(Internet Group Management Protocol)。
4.31 什么是虚拟互联网络?
由于用户的需求是多种多样的,没有一种单一的网络能够适应所有用户的需求。因此需要将不同的网络相互连接起来。将网络互相连接起来需要使用一些中间设备,网络层使用的中间设备称为路由器。使用路由器参与互联的计算机网络都使用相同的网际协议IP,这样就将形成了一个虚拟互联网络。
4.32 什么是IP地址?
整个因特网是一个单一抽象的网络,IP地址就是给因特网上的每一个主机或者路由器的每一个接口分配一个唯一的32位二进制的标识符。习惯上,以二进制数表示不容易辨识,我们将32位的二进制分为四个八位二进制,用十进制数表示。例如10000000 00001011 00000011 00011111 就可以表示为128.11.3.31的IP地址,但在计算机中。寻址是以二进制进行的。IP地址是寻找MAC地址的关键。
4.33 硬件地址与IP地址和ARP
MAC地址是数据链路层和物理层使用的地址,而IP地址是网络层及以上各层使用的地址,是一种逻辑地址。在发送数据时,数据从高层下发到低层,然后才到通信信道上传输。IP地址放在IP数据报的首部,而硬件地址则放在MAC帧的首部。当IP数据报放入数据链路层的MAC帧中以后,整个IP数据报就成为MAC帧的一部分。每一个主机都设有一个ARP高速缓存,里面存有本局域网上的各个主机和路由器的IP地址到硬件地址的映射表。当主机A要向主机B发送IP数据报时,先在ARP高速缓存中查看有无主机B的IP地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧中,然后通过局域网把MAC帧发往此硬件地址。
4.34 ARP高速缓存中的映射表怎么来?
当高速缓存还是空的时候,这个映射表又是怎么来的?怎么知道其他主机的IP地址和硬件地址的对应关系呢?这个时候A主机ARP进程会在本网络上广播发送一个ARP请求分组,大概概述为:“我的IP地址是123.125.114.144,硬件地址是00-00-C0-15-AD-18,我想知道IP地址124.74.35.154的硬件地址,我要和他进行通信”本网络上的所有主机运行的ARP进程都会收到这个分组消息。当某个主机B的ARP进程见到自己的IP地址是分组A所要的,便向对应主机发送响应分组,并写入自己的硬件地址,同时也将A主机的硬件地址和IP地址的映射关系写入ARP高速缓存中。A收到B发送的响应分组后,便把B的IP地址和硬件地址的对应关系写入高速缓存中。ARP请求分组是广播发送的,而ARP响应分组是单播发送。
4.4运输层:
运输层向它上面的应用层提供通信服务。运输层有两种不同的运输协议,面向连接的TCP和无连接的UDP。在计算机进行通信时,严格意义上来说,是两个主机上的应用进程在进行通信。在之前讲过的物理层、数据链路层,网络层这三层,已经建立起了主机间的数据通信。那么这些发送的数据和接收到的数据,属于哪个应用进程,应该分配到哪个进程的服务中去,就需要用到运输层。
4.41 什么是复用,什么是分用?
运输层一个最重要的功能就是复用和分用。复用是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据,而分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
4.42 什么是端口?
运输层又是如何知道这些数据该分配到哪个应用进程呢?这里就需要有一个类似于参数的东西,就是端口(port)。这就说明,计算机间进程的通信除了需要IP地址,硬件地址,还需要包含有一个端口号。运输层的功能,其实就是建立端口到端口间的通信。TCP/IP的运输层使用一个16位的端口来标志一个端口。常见的应用进程的端口号有HTTP:80、FTP:21、DNS:53。这些端口号被称作熟知端口号。而有一些端口是留给客户端短暂使用的,客户端的通信结束后,这个端口就不复存在了,这种端口叫做短暂端口号。
4.43 UDP用户数据报协议
现在我们必须要在数据报里加入端口信息,就需要新的协议。UDP的主要特点是:UDP是无连接的、UDP使用尽最大努力交付、UDP是面向报文的、UDP没有拥塞控制、UDP支持一对一,一对多,多对一,多对多的交互通信、UDP的首部开销小。
用户数据报UDP也是有两部分组成:首部和数据段。首部字段包含了:源端口,目的端口、长度、检验和。当运输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交到正确的应用进程。
4.44 TCP传输控制协议
UDP提供的是不可靠的交付,而TCP提供的是可靠的交付。TCP的主要特点有:TCP是面向连接的、每一条TCP连接只有两个端点、TCP提供可靠交付、TCP提供全双工通信、TCP是面向字节流的。
4.45 套接字(socket)
TCP的连接是抽象的。TCP连接是一条虚连接而不是一条真正的物理连接。TCP报文段先要传送到IP层,加上IP首部,再传送到数据链路层,再加上数据链路层的首部和尾部后,才离开主机发送到物理链路中去。每一条TCP连接有两个端点。把端口号拼接到IP地址后便构成了套接字如:124.74.35.154:80.每一条TCP连接唯一的被两个套接字确定。
4.46 TCP的三次握手
假设现在有主机A要和主机B进行通信。由A的TCP客户进程首先创建传输控制模块TCB,然后向B发送连接请求报文段。B收到连接请求报文段后,同意连接,则向A发送确认。A收到B的确认后,给B发出确认A进入ESTABLISHED状态,B收到确认后,也进入ESTABLISHED状态。这样TCP连接就建立可以进行通信了。这就是TCP连接的三次握手。
4.47 TCP的可靠交付
假设现在有A主机和B主机进行通信,A主机是发送方,B主机是接收方。A主机向B主机发送了分组M1,发送完暂停发送,等待B主机的确认,B主机收到M1就像A主机发送确认。A主机在收到对M1的确认后,就发送下一个分组M2。假如,M1在传送过程中,出现丢失或者延时,B并没有接收到M1分组,那么它将什么也不做。A在一段时间后,没有收到B的确认,便认为M1丢失,重新给B发送一个M1分组。假如B收到了M1分组,但是发送给A的确认在通信时丢失或延时,A没有收到B的确认,就又给B发送了一个M1,B在收到了M1的情况下,又收到了A重发的M1,便会丢弃这个M1,然后重新发送对M1的确认给A。同样,B在收到M1的时候,会对M1的内容进行差错检测,如果发现传输过程中因为一些噪声造成数据有错,同样会丢弃这个M1分组,让A重新发送一个M1。这样就提供了一个可靠的交付,确保数据不会出现差错和丢失。
4.5 应用层
应用层直接为用户的应用进程提供服务。应用层需要规定应用进程在通信是遵循的协议,规定数据传送的格式,然后下发到以下各层进行数据通信。
计算机通信原理的小结:
假设现在有一个主机A和一个主机B,两台主机在同一个局域网中。主机A的应用进程AppA端口是80,主机B的应用进程AppB端口也是80。现在A主机作为发送方,B主机作为接收方。AppA从应用层将需要传送的数据MA下发到传输层,传输层在MA的添加首部,构成数据报,首部中包含了主机B的AppB的目的端口。接着,传输层将数据报下发到网络层,网络层在数据报上又添加一个IP首部,首部中包含了目的主机B的IP地址。然后将IP数据报下发到数据链路层,数据链路层收到IP数据报后,为IP数据报添加首部和尾部,构成MAC帧。MAC帧中包含了目的主机B的硬件地址。最后将MAC帧下发到物理层进行传输。MAC帧找到主机B的硬件地址,然后上交给主机B的数据链路层,数据链路层拿掉首部和尾部,将剩下的IP数据报上交到网络层,网络层剔除IP数据报的首部,上交到传输层,传输层进行差错检测,如果有错,丢弃,没错接受,然后剔除首部,读出端口号,上交到应用进程AppB。
当然,上述的部分是经过非常多的精简的,了解计算机网络的原理涉及到了非常多的协议和知识点。想要更了解计算机网络的朋友可以自行翻阅书籍。
参考文献:《计算机网络》第五版 谢希仁
参考文献:《通信原理》