TCP/IP协议

本章内容

·应用层协议

·传输层协议

·网络层协议

·数据链路层协议

·物理层协议

本章讲解计算机通信使用的TCP/IP协议,协议分层的标准和好处。

首先讲解什么是协议、签协议的意义和协议包含的内容,计算机通信使用的协议应该包含哪些约定,抓包分析应用层协议通信数据包,观察客户端发送请求和服务器端返回响应的交互过程,通过禁用应用层协议的特定方法限制客户端对服务器端的特定访问,实现高级安全控制。

然后讲解传输层协议TCP和UDP的应用场景,TCP协议实现可靠传输的机制,传输层协议和应用层协议之间的关系,服务和端口的关系,端口和网络安全的关系,随后展示如何设置Windows防火墙,关闭端口以实现网络安全。

最后讲解网络层协议、数据链路层协议和物理层协议。

介绍TCP/IP协议

理解协议

对于很多学习计算机网络的读者来说,协议是很不好理解的概念。因为他们没有看见过TCP/IP协议长什么模样,所以总是感觉非常抽象,难以想象。为此,在讲TCP/IP协议之前,先让大家看一份租房协议,再去理解TCP/IP协议就不抽象了。

其实协议对于大家并不陌生,大学生走出校门参加工作就要和用人单位签署就业协议,工作后还有可能要租房住,就要和房东签署租房协议。下面就通过一份租房协议来理解签协议的意义以及协议包含的内容,进而理解计算机通信使用的协议。

如果你租房不和房东签协议,只是口头和房东约定房租多少,每个月几号交房租,押金多少,家具家电设施损坏谁负责,时间一长这些约定大家就都记不清了,一旦出现某种情况,你和房东的认识不一致,就容易产生误解和矛盾。

为了避免纠纷,就需要和房东签一份租房协议,将双方关心的事情协商一致写到协议中,双方确认后签字,协议一式两份,双方都要遵守,如图2-1所示。

image.png

假如图2-1所示的租房协议是全球租房协议的标准,那么租房协议就可以进一步简化和规范为图2-2所示的样子。出租房和承租方在签订租房协议时,只需填写以下表格中要求的内容即可,协议中的约定和条款就不用填写了,双方都知道使用的是全球通用租房协议。表格中出租方姓名、身份证、承租方姓名、身份证、房屋位置等称为字段,这些字段可以是定长,也可以是变长。如果是变长,要定义字段间的分界符。

image.png

计算机通信协议也把协议中需要填写的内容进行简化和规范进而形成表格。比如网络层的IP协议,就被简化为网络层首部,如图2-3所示。网络中的计算机通信只需按照以下表格填写内容,通信双方的计算机就能够按照网络层协议的约定工作。以后大家使用抓包工具分析数据包时,看到网络层封装的首部就是IP协议。

image.png

在计算机通信的协议中除了定义甲方和乙方遵循的约定外,也要定义该协议简化和规范化后的格式。在后面讲到的应用层协议中我们将其称为报文格式,网络层协议和传输层协议我们称为网络层首部和传输层首部。有的协议需要定义多种报文格式,比如ICMP协议就有3种报文格式:ICMP请求报文、ICMP响应报文、ICMP差错报告报文。再比如HTTP协议,它定义了两种报文格式:HTTP请求报文、HTTP响应报文。

前面的租房协议是双方协议,协议中有甲乙双方。有的协议是多方协议,比如大学生大四实习,要和实习单位签一份实习协议,实习协议就是三方协议——学生、校方和实习单位。在谢希仁编写的《计算机网络》那本书中,协议的甲方和乙方被称为“对等实体”。

TCP/IP协议的分层

TCP/IP通信协议是目前最完整、使用最广泛的通信协议。它的魅力在于可使不同硬件结构、不同操作系统的计算机相互通信。TCP/IP协议既可用于广域网,也可用于局域网,它是Internet/Intranet的基石。TCP/IP通信协议事实上是一组协议,如图2-4所示,其主要协议有传输控制协议(TCP)和网际协议(IP)两个。

image.png

从图2-4可以看出我们通常所说的TCP/IP协议不是一个协议,也不是TCP和IP两个协议,而是一组独立的协议。这组协议按功能进行了分层,TCP/IP协议分为4层,数据链路层和物理层被视为网络接口层,如图2-5所示。


image.png

1.应用层 应用层协议定义了互联网上常见的应用(服务器和客户端通信)通信规范。互联网上的应用很多,这就意味着应用层协议也很多,图中只列出了几个常见的应用层协议,但你不能认为就只有这几个。每个应用层协议定义了客户端能够向服务器端发送哪些请求(也可以认为是哪些命令,这些命令发送的顺序),服务器端能够向客户端返回哪些响应,这些请求报文和响应报文都有哪些字段,每个字段实现什么功能,每个字段的各种取值所代表的意思。

2.传输层 传输层有两个协议,TCP和UDP。如果要传输的数据需要分成多个数据包发送,发送端和接收端的TCP协议确保接收端最终完整无误收到所传数据。如果在传输过程中出现丢包,发送端会超时重传丢失的数据包;如果发送的数据包没有按发送顺序到达接收端,接收端会把数据包在缓存中排序,等待迟到的数据包,最终收到连续、完整的数据。

UDP协议用于一个数据包就完成数据发送的情景,这种情况就不检查是否丢包,数据包是否按顺序到达了,以及数据发送是否成功,都由应用程序判断。UDP协议要比TCP协议简单得多。

3.网络层 网络层协议负责在不同网段转发数据包,为数据包选择最佳转发路径,网络中的路由器负责在不同网段转发数据包,为数据包选择转发路径,因此我们称路由器工作在网络层,是网络层设备。

4.数据链路层 数据链路层协议负责把数据包从链路的一端发送到另一端。网络设备由网线或线缆连接,连接网络设备的这段网线或线缆称为一条链路。在不同的链路上传输数据有不同的机制和方法,也就是不同的数据链路层协议,比如以太网使用CSMA/CD协议,点到点链路使用PPP协议。

5.物理层 物理层定义网络设备接口有关的一些特性,进行标准化,比如接口的形状、尺寸、引脚数目和排列、固定和锁定装置、接口电缆的各条线上出现的电压范围等规定,可以认为是物理层协议。

协议按功能分层的好处就是,某一层的改变不会影响其他层。某层协议可以改进或改变,但其功能是不变的。比如计算机通信可以使用IPv4,也可以使用IPv6。网络层协议变了,但其功能依然是为数据包选择转发路径,不会引起传输层协议的改变,也不会引起数据链路层协议的改变。

这些协议,每一层为上一层提供服务,物理层为数据链路层提供服务,数据链路层为网络层提供服务,网络层为传输层提供服务,传输层为应用层提供服务。以后网络出现故障时,比如不能访问Internet浏览网页了,排除网络故障要从底层到高层逐一检查。比如先看看网线是否连接,这是物理层排错;再ping Internet上的一个公网地址,看看是否畅通,这是网络层排错;最后检查浏览器设置是否正确,这是应用层排错。

应用层协议

应用和应用层协议

网络中的计算机通信,实际上是计算机上的应用程序之间的通信。比如打开QQ和别人聊天,打开浏览器访问网站,打开暴风影音在线看电影,这些都会产生网络流量。

应用程序通常分为客户端程序和服务器端程序,客户端程序向服务端程序发送请求,服务端程序向客户端程序返回响应,提供服务。服务器端程序运行后等待客户端的连接请求。比如百度网站,不管是否有人访问百度网站,百度Web服务就一直等待客户端的访问请求,如图2-6所示。

image.png

客户端程序能够向服务端程序发送哪些请求,也就是客户端能够向服务器端发送哪些命令,这些命令发送的顺序,发送的请求报文有哪些字段,分别代表什么意思,都需要提前约定好。

服务器端程序收到客户端发送来的请求,应该有哪些响应,什么情况发送什么响应,发送的响应报文有哪些字段,分别代表什么意思,也需要提前约定好。

这些提前约定好的客户端程序和服务器端程序通信规范就是应用程序通信使用的协议,称为应用层协议。Internet上有很多应用,比如访问网站的应用、收发电子邮件的应用、文件传输的应用、域名解析应用等,每一种应用都需要一个专门的应用层协议,这就意味着应用层协议需要很多。

应用层协议的甲方和乙方是服务器端程序和客户端程序,在很多计算机网络原理的教材中,协议中的甲方和乙方称为对等实体。

应用层协议的标准化

TCP/IP协议是互联网通信的工业标准,TCP/IP协议中的应用层协议HTTP、FTP、SMTP、POP3都是标准化的应用层协议,应用层协议的标准化有什么好处呢?

Internet上用于通信的服务器端软件和客户端软件往往不是一家公司开发的,比如Web服务器有微软公司的IIS服务器,还有开放源代码的Apache、俄罗斯人开发的Nginx等,浏览器有微软的IE浏览器、UC浏览器、360浏览器、火狐浏览器、谷歌浏览器等。你会发现Web服务器和浏览器虽然是不同公司开发的,但这些浏览器却能够访问全球所有的Web服务器,这是因为Web服务器和浏览器都是参照HTTP协议进行开发的,如图2-7所示。

image.png

HTTP协议定义了Web服务器和浏览器通信的方法,协议双方就是Web服务器和浏览器,为了更形象,称Web服务器为甲方、浏览器为乙方。

HTTP协议是TCP/IP协议中的一个标准协议,是一个开放式协议。由此你可以想到,肯定还有私有协议。比如思科公司的路由器和交换机上运行的CDP协议(思科发现协议),只有思科的设备支持。比如你公司开发的一款软件有服务器端和客户端,它们之间的通信规范由开发者定义,这就是应用层协议。不过那些做软件开发的人如果不懂网络,没有学过TCP/IP协议,他们并不会意识到他们定义的通信规范就是应用层协议,这样的协议就是私有协议,这些私有协议就不属于TCP/IP协议。

网络标准形成的过程:RFC(Request For Comments)意即“请求评议”,包含了关于Internet的几乎所有重要的文字资料。通常,当某家机构或团体开发出一套标准或提出对某种标准的设想,想要征询外界的意见时,就会在Internet上发放一份RFC,对这一问题感兴趣的人可以阅读该RFC并提出自己的意见;绝大部分网络标准的指定都以RFC的形式开始,经过大量的论证和修改过程,由主要的标准化组织指定。但RFC中收录的文件并不都正在使用或为大家公认,也有很大一部分只在某个局部领域被使用或并没有被采用,一份RFC具体处于什么状态都在文件中有明确的标识。

一个RFC文件在成为官方标准前一般至少要经历4个阶段:Internet草案、建议标准、草案标准、Internet标准

Internet上的常见应用,比如发送电子邮件、接收电子邮件、域名解析、文件传输、远程登录、地址自动配置等,通信使用的协议都已经成为Internet标准,成为TCP/IP协议中的应用层协议。下面列出了TCP/IP协议中常见的应用层协议。

·超文本传输协议:HTTP协议,用于访问Web服务器。

·安全的超级文本传输协议:HTTPS,能够对HTTP协议通信进行加密访问。

·简单邮件传输协议:SMTP协议,用于发送电子邮件。

·邮局协议版本3:POP3协议,用于接收电子邮件。

·域名解析协议:DNS协议,用于域名解析。

·文件传输协议:FTP协议,用于上传和下载文件。

·远程登录协议:telnet协议,用于远程配置网络设备和Linux系统。

·动态主机配置协议:DHCP协议,用于计算机自动请求IP地址。

以HTTP协议为例认识应用层协议

下面参照租房协议的格式将HTTP协议的主要内容列出来(注意:不是完整的),从而认识应用层协议长什么模样,如图2-8所示

image.png

image.png
image.png

可以看到HTTP协议定义了浏览器访问Web服务器的步骤,能够向Web服务器发送哪些请求(方法),HTTP请求报文格式(有哪些字段,分别代表什么意思),也定义了Web服务器能够向浏览器发送哪些响应(状态码),HTTP响应报文格式(有哪些字段,分别代表什么意思)。

举一反三,其他的应用层协议也需要定义以下内容。

·客户端能够向服务器发送哪些请求(方法或命令)。

·客户端和服务器命令交互顺序,比如POP3协议,需要先验证用户身份才能收邮件。

·服务器有哪些响应(状态代码),每种状态代码代表什么意思。

·定义协议中每种报文的格式:有哪些字段,字段是定长还是变长,如果是变长,字段分割符是什么,都要在协议中定义。一个协议有可能需要定义多种报文格式,比如ICMP协议定义了ICMP请求报文格式、ICMP响应报文格式、ICMP差错报告报文格式。

抓包分析应用层协议

在计算机中安装抓包工具可以捕获网卡发出和接收到的数据包,当然也能捕获应用程序通信的数据包。这样就可以直观地看到客户端和服务器端的交互过程,客户端发送了哪些请求,服务器返回了哪些响应,这就是应用层协议的工作过程。

下面会给大家展示使用抓包工具捕获SMTP客户端(Outlook Express)向SMTP服务器端发送电子邮件的过程,可以看到客户端向服务器发送的请求(命令)以及服务器向客户端发送的响应(状态代码)。

抓包工具Ethereal有两个版本,在Windows XP和Windows Server 2003上使用Ethereal抓包工具,在Windows 7和Windows 10上使用Wireshark(Ethereal的升级版)抓包工具。建议在VMWareWorkstation虚拟机中完成抓包分析过程。以下操作在Windows XP虚拟机中进行,因为WindowsXP中有Outlook Express,将虚拟机网卡指定到NAT网络,这样抓包工具不会捕获物理网络中大量无关的数据包。

登录网易邮箱,申请一个电子邮箱,启用POP3和SMTP服务,如图2-9所示。

image.png

在Windows XP上,安装Ethereal,运行抓包工具,打开Outlook Express,使用申请的电子邮件账户连接到邮件服务器,给自己写一封邮件,单击“发送/接收”,停止抓包,如图2-10所示,可以看到发送邮件的协议SMTP,右击该数据包,单击“Follow TCP Stream”。

image.png

Outlook Express就是SMTP客户端,如图2-11所示,可以看到SMTP客户端向SMTP服务器发送电子邮件的交互过程。

image.png

image.png

应用层协议和高级防火墙

高级防火墙能够识别应用层协议的方法,可以设置高级防火墙禁止客户端向服务器发送某个请求,也就是禁用应用层协议的某个方法。比如浏览器请求网页使用的是GET方法,向Web服务器提交内容使用的是POST方法,如果企业不允许员工在Internet上的论坛发帖,可以在企业网络边缘部署高级防火墙以禁止HTTP协议的POST方法,如图2-12所示。

image.png

图2-13所示是微软企业级防火墙TMG,配置HTTP协议,阻止POST方法。注意:方法名称区分大小写。

image.png

在Windows Server 2012 R2上安装FTP服务,可以设置禁止FTP协议的某些方法。下面的操作就是在Windows 7中安装Wireshark抓包工具,开始抓包后,访问Windows Server 2012 R2上的FTP服务,上传一个test.txt文件,重命名为abc.txt,最后删除FTP服务器上的abc.txt文件,抓包工具捕获FTP客户端发送的全部命令。

如图2-14所示,右击FTP协议数据包,单击“跟踪流”→“TCP流”。

image.png

接下来会出现图2-15所示的窗口,将FTP客户端访问FTP服务器的所有交互过程中产生的数据整理到一起,可以看到FTP协议中的方法,“STOR”方法上传test.txt,“CWD”方法改变工作目录,“RNFR”方法重命名test.txt,“DELE”方法删除abc.txt文件。如果想看到FTP协议的其他方法,可以使用FTP客户端在FTP服务器上执行创建文件夹、删除文件夹、下载文件等操作,这些操作对应的方法使用抓包工具都能看到。

image.png

我们也可以配置FTP服务器禁止FTP协议中的一些方法。比如打算禁止FTP客户端删除FTP服务器上的文件,可以配置FTP请求筛选,禁止DELE方法。如图2-16所示,单击“FTP请求筛选”。

image.png

如图2-17所示,在“FTP请求筛选”界面,单击“命令”,再单击“拒绝命令…”,在出现的“拒绝命令”对话框中输入“DELE”,单击“确定”。

image.png

在Windows 7上再次删除FTP服务器上的文件,就会出现提示“500 Command not allowed”,如图2-18所示,意为命令不被允许。

image.png

Windows Server 2012 R2的Web站点也可以禁止HTTP协议的某些方法,如图2-19所示,单击“请求筛选”。

image.png

如图2-20所示,在“HTTP谓词”选项卡下,单击“拒绝谓词…”,输入拒绝的方法“POST”,浏览器向该网站发送的POST请求就被拒绝。

image.png

传输层协议

TCP和UDP的应用场景

使用快递寄东西,要打包,包裹的大小是有限制的。如果寄的东西少,可以打包成一个包裹邮寄;如果寄的东西多,那就要打包成多个包裹,每个包裹都贴上快递单子,作为两个独立的件发送。客户端程序和服务器端程序通信也会分两种情况:

·应用程序要传输的文件大,就要分段传输,每段封装成一个数据包,在接收端将分段组装成完整的文件。

·应用程序要传输的文件小,就不需要分段,封装成一个数据包发出。

针对这两种情况,TCP/IP协议定义了两个传输层协议,为应用程序通信(应用层)提供服务,分别是传输控制协议(Transmission Control Protocol,TCP)和用户数据报协议(User DatagramProtocol,UDP)。

传输层协议的甲方和乙方分别是通信的两台计算机的传输层,如图2-21所示,传输层协议为应用层协议提供服务。

image.png

如果应用程序要传输的文件大,需要将内容分段发送,在传输层通常就使用TCP协议,在发送方和接收方之间建立连接,实现可靠传输、流量控制和拥塞避免。

网络中一个数据包的大小通常是1500个字节,其中的数据是1460个字节,这就意味着如果要传输的文件大于1460个字节,就要分成多个数据包传输。比如要从网络中下载一部500MB的电影,或下载一个200MB的软件,这么大的文件需要分段发送,发送过程需要持续几分钟或几十分钟。在此期间,发送方将要发送的文件内容以字节为单位流入发送缓存,在发送缓存中分段,并对分段进行编号,加上IP地址后封装成数据包,按顺序发送。

网络就像公路,数据包就像汽车,在上下班高峰期交通会出现拥堵。当网络中涌入的数据包超出路由器转发能力时,路由器会丢弃来不及处理的数据包(丢包)。不同分段可能会沿不同的路径到达目的计算机,虽然发送端按分段的编号顺序发送分段,但这些分段不一定按顺序到达接收端(乱序)。

可见网络是不可靠的,既不能保证不丢包,也不能保证按顺序到达。TCP协议能够实现发送端和接收端的可靠传输,对丢了的数据包自动重传,分段在接收端缓存中能正确排序。TCP协议能够在不可靠的网络上实现数据的可靠传输。TCP协议在传输数据之前需要建立TCP连接,进行可靠传输(丢包自动重传,分段在接收端排序),通信过程有流量控制,拥塞避免,通信结束后要释放连接。

如果应用程序要发送的数据一个数据包就能发送全部内容,在传输层通常就使用UDP协议。一个数据包就能发送全部内容,在传输层不需要分段,不需要编号,不需要在发送方和接收方建立连接,不判断数据包是否到达目的端(不可靠传输),发送过程也不需要流量控制、拥塞避免。这就使得UDP具有TCP望尘莫及的速度优势。TCP协议中植入了各种可靠保障功能,在实际执行的过程中会占用系统资源,使速度受到影响。UDP由于排除了信息可靠传输机制,降低了执行时间,使速度得到了保证。

比如在计算机上打开浏览器,输入http://www.epubit.com,计算机就需要将该域名解析成IP地址,就会向DNS服务器发送一个数据包,查询该域名对应的IP地址,DNS服务器将查询结果放到一个数据包发送给计算机。发送域名解析请求只需要一个数据包,返回解析结果也只需要一个数据包,域名解析在传输层就使用UDP协议。

再比如,使用QQ聊天,通常一次输入的聊天内容不会有太多文字,使用一个数据包就能把聊天内容发送出去,并且聊完第一句,也不定什么时候聊第二句,发送数据不是持续的,发送QQ聊天的内容在传输层使用UDP协议。

QQ如果一次发送的聊天内容太多,一个数据包容不下,QQ聊天工具就会把聊天内容分成两个UDP数据包分别发送。如果发送失败,QQ聊天工具会尝试发送第二次、第三次,所以大家通常会遇到这种情况,QQ聊天内容发送后,如果网络出现故障,过一段时间才会出现QQ聊天内容发送失败的提示,那是因为QQ在尝试第二次、第三次发送

上面举两个例子就是给大家介绍UDP协议的应用场景,UDP协议不负责可靠传输。如果客户端发送的UDP报文在网络中丢失,客户端程序没有收到返回的数据包,就再发送一遍,大家可以认为发送成功与否是由应用层判断的。

大家知道了两个传输层协议TCP和UDP的特点和应用场景,就很容易判断某个应用层协议在传输层使用什么协议。

前面讲了,QQ聊天时传输层协议使用的是UDP协议。如果使用QQ给好友传一个文件,传输层使用什么协议呢?传输文件需要持续几分钟或几十分钟,肯定不是使用一个数据包就能把文件传输完的,需要将要传输的文件分段传输,在传输期间需要建立会话、可靠传输、流量控制、拥塞避免等,可以断定在传输层应该使用TCP协议来实现这些功能。

访问网站、发送电子邮件、访问FTP服务器下载文件,这些应用在传输层使用什么协议呢?其实只要想一想,要传输的网页、所发送电子邮件的内容和附件、从FTP下载的文件都需要拆分成多个数据包发送,就可以判断这些应用在传输层应该使用TCP协议。

在这里需要强调的是:使用多播通信发送数据在传输层也使用UDP协议,多播通信虽然是持续发送数据包,但不需要和接收方建立会话进行可靠传输,因此在传输层使用UDP协议。比如机房多媒体教室软件,教师端发送屏幕广播,机房的学生计算机接收到教师计算机传输的屏幕,传输层使用UDP协议。

实时通信通常也会使用UDP协议,比如和好友QQ语音聊天,要求双方聊天的内容即刻发送到对方,不允许有很大延迟。如果聊天过程中网络堵塞,有丢包现象,对方听到的声音就会出现断断续续。有人说那就使用可靠传输吧,大家想想那将会出现什么样的场景呢?如果使用TCP实现可靠通信,聊天的内容丢包重传,在接收端排序后再播放声音,你的好友等到这句完整的话,可能需要几秒钟,你们就不能愉快地聊天了,所以实时通信在传输层还是选择UDP协议。

下面重点讲解传输层协议中的TCP协议。

TCP协议可靠传输的实现

下面举例说明发送端和接收端实现可靠传输的方式。

如图2-22所示,浏览器请求Web服务器上的一个网页,网页中的内容以字节流的形式源源不断地流入发送缓存,在发送缓存中将内容分段,并给分段编号,分段大小通常不超过1460个字节。接收端有接收缓存,无论分段是否按顺序到达,在接收缓存中按编号排序,会等待迟到的分段,浏览器从接收缓存读取连续的字节。

image.png

丢包怎么解决呢?超时自动重传。即发送端每发送一个分段,就记下发送时间,等一段时间(一段往返时间再多一点的时间),如果还没有收到接收端的确认,就会自动重发这个分段。这就意味着,接收端只要没有告诉发送端收到,发送端就会超时自动重传。

现在Internet中的计算机无论使用什么操作系统,相互之间都能够实现可靠传输,这归功于Internet上不同的操作系统可靠传输使用的都是TCP协议,如图2-23所示。

image.png

TCP协议功能和首部

TCP协议为应用程序通信提供可靠传输。在通信过程中实现以下功能。

·建立连接:在正式传输数据之前先建立TCP连接,协商一些参数,比如告诉对方自己的接收缓存多大(单位字节),一个分段最多承载多少字节的数据,是否支持选择性确认。

·可靠传输:发送端将文件以字节流的形式放入发送端缓存,接收端以字节流的形式从缓存读取。若数据包丢失,会自动重传;若没按顺序到达,会在接收端缓存排序。

·拥塞避免:整个通信过程中网络有可能拥塞,也有可能畅通,发送端开始发送数据时先感知网络是否拥堵,调整发送速度。

·流量控制:如果发送端发送过快,接收端的应用程序有可能来不及从接收缓存读取数据,造成接收缓存满。接收端接收数据过程中可以告诉发送端发送快一点还是慢一点,是否需要暂停一会儿。

·释放连接:发送完毕,要告诉对方发送完毕,等对方收到确认才释放连接。

要实现以上功能,传输层分段要加上TCP首部,TCP协议规定了TCP首部有哪些字段、每个字段所代表的意义,发送方和接收方使用传输层首部这些字段实现可靠传输、流量控制、拥塞避免。TCP首部长度不固定,有20个字节的固定长度,选项部分长度不固定,如图2-24所示。

image.png

图中的源端口、目标端口、序号、确认号、数据偏移等是首部的字段。图中标识的32位,是指长度为32位的二进制。可以看到源端口占16位二进制,即两个字节(1个字节=8位二进制),最大值是65535,序号和确认号占32位的二进制,4个字节。URG、ACK、PSH、RST、SYN和FIN字段占一位二进制,我们称之为标记位。各字段的意义在这里不做过多讲解,要想详细掌握各字段的意义,需要学习计算机网络原理。

传输层协议和应用层协议之间的关系

TCP/IP协议中的应用层协议很多,传输层就两个协议,如何使用两个传输层协议标识应用层协议呢?

用传输层协议加一个端口号来标识一个应用层协议。如图2-25所示,图中标明了传输层协议和应用层协议之间的关系。

image.png

DNS同时占用UDP和TCP端口53是公认的,通过抓包分析,几乎所有的情况都在使用UDP,说明DNS主要还是使用UDP, DNS在进行区传送的情况下会使用TCP协议(区传送是指一个区域内主DNS服务器和辅助DNS服务器之间建立通信连接并进行数据传输的过程),这个存在疑问?

下面是一些常见的应用层协议和传输层协议之间的关系。

·HTTP默认使用TCP的80端口。

·FTP默认使用TCP的21端口。

·SMTP默认使用TCP的25端口。

·POP3默认使用TCP的110端口。

·HTTPS默认使用TCP的443端口。

·DNS使用TCP/UDP的53端口。

·telnet使用TCP的23端口。

·RDP远程桌面协议默认使用TCP的3389端口。

以上列出的都是默认端口,当然也可以更改应用层协议使用的端口。如果不使用默认端口,客户端访问服务器时需要指明所使用的端口。比如91学IT网站指定HTTP协议使用808端口,访问该网站时就需要指明使用的端口;http://www.91xueit.com:808,冒号后面的808指明HTTP协议使用端口808。如图2-26所示,远程桌面协议(RDP)没有使用默认端口,冒号后面的9090指定使用端口9090。

image.png

如图2-27所示,一台服务器同时运行了Web服务、SMTP服务和POP3服务,Web服务一启动就用TCP的80端口侦听客户端请求,SMTP服务一启动就用TCP的25端口侦听客户端请求,POP3服务一启动就用TCP的110端口侦听客户端请求。现在网络中的A计算机、B计算机和C计算机分别打算访问端口服务器的Web服务、SMTP服务和POP3服务。发送3个数据包①②③,这3个数据包的目标端口分别是80、25和110,服务器收到这3个数据包,就根据目标端口将数据包提交给不同的服务进行处理。

现在大家就会明白,数据包的目标IP地址用来定位网络中的某台服务器,目标端口用来定位服务器上的某个服务。

image.png

上图给大家展示了A、B、C计算机访问服务器的数据包,有目标端口和源端口,源端口是计算机临时为客户端程序分配的,服务器向A、B、C计算机发送数据包时,源端口就会变成目标端口。

如图2-28所示,A计算机打开谷歌浏览器,一个窗口访问百度网站,另一个窗口访51CTO网页,这就需要建立两个TCP连接。A计算机会给每个窗口临时分配一个客户端端口(要求本地唯一),这样从51CTO学院返回的数据包的目标端口是13456,从百度网站返回的数据包的目标端口是12928,这样A计算机就知道这些数据包来自哪个网站,应给哪一个窗口。

image.png

在传输层使用16位二进制标识一个端口,端口号的取值范围是0~65535,这个数目对一台计算机来说足够用了。

端口号分为如下两大类。

(1)服务器端使用的端口号。

服务器端使用的端口号在这里又分为两类,最重要的一类叫作熟知端口号(well-known portnumber)或系统端口号,取值范围为0~1023。IANA把这些端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。下面给出一些常用的熟知端口号,如图2-29所示。

image.png

另一类叫作登记端口号,取值范围为1024~49151。这类端口号由没有熟知端口号的应用程序使用。要使用这类端口号,必须在IANA按照规定的手续登记,以防止重复。

(2)客户端使用的端口号。

当打开浏览器访问网站,或登录QQ等客户端软件和服务器建立连接时,计算机会为客户端软件分配临时端口,这就是客户端端口,取值范围为49152~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫作临时(短暂)端口号。这类端口号留给客户进程暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才已使用过的客户端口号就不复存在。这个端口号就可以供其他客户进程以后使用。

服务和端口之间的关系

计算机之间的通信,通常是服务器端程序(以后简称服务)运行等待客户端程序的连接请求。服务器端程序通常以服务的形式存在于Windows服务系统或Linux系统。这些服务不需要用户登录服务器,系统启动后就可以自动运行。

服务运行后就要使用TCP或UDP协议的某个端口侦听客户端的请求,服务停止,则端口关闭,同一台计算机的不同服务使用的端口不能冲突(端口唯一)。

在Windows Server 2003系统中,在命令提示符下输入netstat-an可以查看侦听的端口,如图2-30所示。

image.png

如图2-31所示,设置Windows Server 2003系统属性,启用远程桌面(相当于启用远程桌面服务),再次运行netstat-an就会看到侦听的端口多了TCP的3389端口。关闭远程桌面,再次查看侦听端口,不再侦听3389端口。

image.png

如图2-32所示,在命令提示符下使用telnet命令可以测试远程计算机是否侦听了某个端口,只要telnet没有提示端口打开失败,就意味着远程计算机侦听该端口。使用端口扫描工具也可以扫描远程计算机打开的端口,如果服务使用默认端口,根据服务器侦听的端口就能判断远程计算机开启了什么服务。你就明白了那些黑客入侵服务器时,为啥需要先进行端口扫描,扫描端口就是为了明白服务器开启了什么服务,知道运行了什么服务才可以进一步检测该服务是否有漏洞,然后进行攻击。

image.png

端口和网络安全的关系

客户端和服务器之间的通信使用应用层协议,应用层协议使用传输层协议+端口标识,知道了这个关系后,网络安全也就应该了解了。

如果在一台服务器上安装了多个服务,其中一个服务有漏洞,被黑客入侵,黑客就能获得操作系统的控制权,进一步破坏掉其他服务。

如图2-33所示,服务器对外提供Web服务,在服务器上还安装了微软的数据库服务(MsSQL服务),网站的数据就存储在本地的数据库中。如果没有配置服务器的防火墙对进入的流量做任何限制,且数据库的内置管理员账户sa的密码为空或弱密码,网络中的黑客就可以通过TCP的1433端口连接到数据库服务,猜测数据库的sa账户的密码,一旦猜对,就能获得服务器上操作系统管理员的身份,对服务器进行任何操作,这就意味着服务器被入侵。

image.png

TCP/IP协议在传输层有两个协议:TCP和UDP,这就相当于网络中的两扇大门,如图2-33所示,门上开的洞就相当于开放TCP和UDP的端口。

如果想让服务器更加安全,那就把TCP和UDP这两扇大门关闭,在大门上只开放必要的端口。如图2-34所示,如果服务器对外只提供Web服务,便可以设置Web服务器防火墙只对外开放TCP的80端口,其他端口都关闭,这样即便服务器上运行了数据库服务,使用TCP的1433端口侦听客户端的请求,互联网上的入侵者也没有办法通过数据库入侵服务器。

image.png

前面讲的是设置服务器的防火墙,只开放必要的端口,加强服务器的网络安全。

也可以在路由器上设置网络防火墙,控制内网访问Internet的流量,如图2-35所示,企业路由器只开放了UDP的53端口和TCP的80端口,允许内网的计算机将域名解析的数据包发送到Internet的DNS服务器,允许内网计算机使用HTTP协议访问Internet的Web服务器。内网计算机不能访问Internet上的其他服务,比如邮件发送(使用SMTP协议)和邮件接收(使用POP3协议)服务。

image.png

现在大家就会明白,如果我们不能访问某台服务器上的服务,也有可能是沿途路由器封掉了该服务使用的端口。在图2-35中,对内网计算机telnet SMTP服务器的25端口,就会失败,这并不是因为Internet上的SMTP服务器上没有运行SMTP服务,而是沿途路由器封掉了访问SMTP服务器的端口。

使用Windows防火墙和TCP/IP筛选实现网络安全

Windows Server 2003和Windows XP都有Windows防火墙,通过设置计算机对外开放什么端口来实现网络安全。Windows防火墙的设置需要Windows Firewall/Internet Connection Sharing (ICS)服务,该服务如果被异常终止,Windows防火墙就不起作用了。

还有比Windows防火墙更加安全的设置,就是使用TCP/IP筛选,更改该设置需要重启系统才能生效。

现在演示在Windows Server 2003上设置Windows防火墙,只允许网络中的计算机使用TCP的80端口访问其网站,其他端口统统关闭,网络中的计算机就不能使用远程桌面连接了。

如图2-36所示,在Windows Server 2003 Web服务上,单击“开始”→“设置”→“网络连接”。

image.png

在出现的“网络连接”对话框中双击“本地连接”。在出现的“本地连接 状态”对话框中,在“常规”选项卡中单击“属性”。在出现的“本地连接 属性”对话框中,在“高级”选项卡中,单击“设置”。在出现的“Windows防火墙”对话框中,提示要启动Windows防火墙/ICS服务,单击“确定”。

在出现的“Windows防火墙”对话框中,在“常规”选项卡中选中“启用”,如图2-37所示。

image.png

如图2-38所示,单击“例外”选项卡,可以看到内置的3个规则,单击“添加端口”,在出现的添加端口对话框,输入名称和端口号,选择TCP协议,单击“确定”。

image.png

如图2-39所示,在“例外”选项卡中,选中刚刚创建的规则,单击“确定”。

image.png

在Windows XP上测试,网站能够访问,远程桌面不能连接了,如图2-40所示。

image.png

在Windows Server 2003 Web服务上停止Windows Firewall/Internet Connection Sharing (ICS)服务,在Windows XP上就能够使用远程桌面连接该服务器了,说明Windows防火墙不起作用了,如图2-41所示。

image.png

下面给大家演示如何在Windows上使用TCP/IP筛选,只开放TCP的80端口。上面的操作已经停止了Windows Firewall/Internet Connection Sharing (ICS)服务,在此基础上,继续下面的操作。

如图2-42所示,打开“本地连接 属性”对话框,在“常规”选项卡中选中“Internet协议(TCP/IP)”,单击“属性”。

image.png

在出现的“Internet协议(TCP/IP)属性”对话框中单击“高级”,在出现的“高级TCP/IP设置”对话框中,在“选项”选项卡中选中“TCP/IP筛选”,单击“属性”,如图2-43所示。

image.png如图2-44所示,在出现的“TCP/IP筛选”对话框中选中“启用TCP/IP筛选(所有适配器)”,为TCP端口和UDP端口选中“只允许”,在TCP端口下,单击“添加”,在出现的“添加筛选器”对话框中输入80,单击“确定”。

image.png

设置完成后,重启系统。

如果没有选中“启用TCP/IP筛选(所有适配器)”,且计算机有多块网卡,则TCP/IP筛选只对当前网卡生效。为UDP端口选中“只允许”,而没有添加任何端口,就相当于关闭了UDP的全部端口,如图2-43所示。

在Windows XP上进行测试。你会发现网站能够访问,而远程桌面不能连接,TCP/IP筛选不受Windows Firewall/Internet Connection Sharing (ICS)服务的影响,可见TCP/IP筛选的防护更彻底。

以上演示是在Windows Server 2003上做的,不同的操作系统(如Windows或Linux)虽然配置命令和配置方式不同,但都有相似的功能。

网络层协议

IP协议

网络层的功能是负责把数据包发送到目标主机,网络中的路由器负责在不同网络间转发数据包,为数据包选择转发路径。路由器厂家有思科、华为、H3C、TP-Link等,为了让不同厂家的路由器连接的网络能够相互通信,必须有统一的转发标准。TCP/IP协议中的IP协议是数据包在网络中的转发标准。数据包在转发过程中出错可以通过ICMP协议报告,ICMP协议也是网络层协议。

网络层为传输层提供服务,负责把传输层的段发送到接收端。网络层为传输层的段加上网络层首部,在图2-45中使用H表示,网络层首部包括源IP地址和目标IP地址,加了网络层首部的段称为“数据包”,网络中的路由器根据数据包的首部转发数据包。

image.png

IP协议是多方协议,发送方的网络层和接收方的网络层以及沿途所有路由器都要遵守IP协议的约定来转发数据包。

IP数据包首部的格式能够说明IP协议都具有什么功能。在TCP/IP标准中,各种数据格式常常以32位(4字节)为单位来描述,图2-46显示了IP数据包的完整格式。

IP协议是多方协议,发送方的网络层和接收方的网络层以及沿途所有路由器都要遵守IP协议的约定来转发数据包。

IP数据包首部的格式能够说明IP协议都具有什么功能。在TCP/IP标准中,各种数据格式常常以32位(4字节)为单位来描述,图2-46显示了IP数据包的完整格式。

image.png

IP数据包由首部和数据两部分组成。首部的前一部分是固定长度,共20个字节,是所有IP数据包必须有的。首部的固定部分的后面是一些可选字段,其长度是可变的。

版本字段用来指明是IPv4还是IPv6首部。因为IP首部有变长部分,所以首部长度指明了首部有多少个字节。区分服务用来实现QoS。总长度指明数据包的首部和数据部分总长度,总长度字段为16位,因此数据包的最大长度为2的16次方−1=65535字节,实际上传输这样长的数据包在现实中是极少遇到的。标识和标志以及片偏移用来实现数据包分片后在接收端组装成一个完整的数据包。生存时间用来限定数据包能够经过几台路由器转发,每经过一台路由器,路由器将TTL减1,当TTL为0时,丢掉数据包。协议字段指出数据包携带的数据是何种协议,以便使目的主机的网络层知道应将数据部分上交给哪个处理过程。常用的一些协议和相应的协议字段值如图2-47所示。

image.png

首部校验和字段供网络中的路由器用来检查网络层首部在传输过程中是否出现差错。源IP地址和目标IP地址用来指明数据包的发送者和接收者的地址。

ARP协议

以太网的网络层还需要ARP协议,其作用就是从本网段的IP地址解析出MAC地址。

如图2-48所示,网络中有两个以太网和一个点到点网络,计算机和路由器接口的地址如图2-48所示,图中的MA、MB、……、MH代表对应接口的MAC地址。下面讲解计算机A和本网段计算机C的通信过程,以及计算机A和计算机H跨网段的通信过程。

image.png

如果计算机A ping计算机C的IP地址192.168.0.4,计算机A判断目标IP地址和自己在一个网段,目标MAC地址就是计算机C的MAC地址,图2-49是计算机A发送给计算机C的帧示意图。

image.png

如果计算机A ping计算机H的IP地址192.168.1.4,计算机A判断出目标IP地址和自己不在一个网段,数据包就要发送给路由器R1,目标MAC地址就是网关的MAC地址,也就是路由器R1的D接口的MAC地址,图2-50所示。

image.png

为了将计算机接入以太网,我们只需要给计算机配置IP地址、子网掩码和网关,并没有告诉计算机网络中其他计算机的MAC地址。计算机需要知道本网段计算机的MAC地址和网关的MAC地址。本案例中,计算机A是如何知道计算机C或网关的MAC地址的?

在TCP/IP协议的网络层有ARP(Address Resolution Protocol)协议,在计算机与目标计算机通信之前,需要使用该协议解析到目标计算机(同一网段通信)或网关(跨网段通信)的MAC地址。ARP协议通过广播(目标MAC地址是FF-FF-FF-FF-FF-FF)解析MAC地址。

这里大家需要知道:ARP协议只在以太网中使用,点到点链路使用PPP协议通信,PPP帧的数据链路层根本不用MAC地址,所以也不用ARP协议解析MAC地址。

在Windows操作系统上,打开命令提示符,输入arp-a,执行后就能够看到ARP协议解析到的MAC地址,如图2-51所示,类型是“动态”的,是通过ARP协议解析到的。

image.png

ICMP协议


TCP/IP协议中的网络层还有一个ICMP协议,ICMP(Internet Control Message Protocol)是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,判断网络是否畅通,诊断网络故障。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

IP协议转发数据包的过程中如果出现差错,出问题的路由器会产生一个ICMP差错报告并返回给发送端。网络管理员经常需要判断某台计算机到某个地址是否畅通,这也会用到ICMP协议的诊断报告功能。

ICMP报文是在IP数据包内部传输的,封装在IP数据包内。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用,一些ICMP报文把差错报文返回给用户进程。

注意,现在我们不是查看网络层首部格式,而是查看ICMP报文的格式。ping命令就能够产生一个ICMP请求报文并发送给目标地址,用来测试网络是否畅通,如果目标计算机收到ICMP请求报文,就会返回ICMP响应报文,如图2-52所示。

image.png

如图2-53所示,在PC1上ping PC2,在捕获的ICMP数据包中点中一个ICMP请求包,可以看到ICMP请求报文格式,有ICMP报文类型、ICMP报文代码、校验和以及ICMP数据部分。请求报文类型值为8,报文代码为0。

image.png

如图2-54所示,点中一个ICMP响应报文,可以看到响应报文类型值为0,报文代码为0。

image.png

ICMP除了定义请求报文和响应报文的格式以外,还定义了差错报告报文的格式。

ICMP报文分几种类型,每种类型又使用代码来进一步指明ICMP报文所代表的不同含义。图2-55中列出了几种常见的ICMP报文类型和代码所代表的含义。

image.png

ICMP差错报告共有5种,具体如下。

·终点不可到达。当路由器或主机没有到达目标地址的路由时,就丢弃数据包,给源点发送终点不可到达报文。

·源点抑制。当路由器或主机由于拥塞而丢弃数据包时,就会向源点发送源点抑制报文,使源点知道应当降低数据包的发送速率。

·时间超时。当路由器收到生存时间为零的数据包时,除丢弃数据包外,还要向源点发送时间超时报文。当终点在预先规定的时间内不能收到一个数据包的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超时报文。

·参数问题。在路由器或目的主机收到的数据包的首部中,当有的字段的值不正确时,就丢弃数据包,并向源点发送参数问题报文。

·改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据包发送给另外的路由器(可通过更好的路由)。

IGMP协议

在网络层还有一个IGMP协议,即Internet组管理协议(Internet Group ManagementProtocol),它是Internet协议家族中的一个组播协议,该协议运行在主机和组播路由器之间。先给大家介绍一下什么是组播。

计算机通信分为一对一通信、组播通信和广播通信。

如图2-56所示,教室中有一台流媒体服务器,课堂上老师安排学生在线学习这台流媒体服务器上的课程“Excel VBA”,教室中的每台计算机访问这台流媒体服务器以观看这个视频,这就是一对一通信,可以看到流媒体服务器到交换机的流量很大。

image.png

大家知道电视台发送视频信号,可以让无数台电视机同时收看节目。现在老师安排学生同时学习“Excel VBA”这门课程,在网络中也可以让流媒体服务器像电视台一样,不同的视频节目使用不同的组播地址(相当于电视台的不同频道)发送到网络中,网络中的计算机要想收到某个视频流,只需要将网卡绑定到相应的组播地址即可,这个绑定过程通常由应用程序来实现,组播节目文件就自带组播地址信息,只要使用暴风影音或其他视频播放软件播放,就会自动给计算机网卡绑定组播地址。

如图2-57所示,上午8点学校老师安排学生1班学习“Excel VBA”视频,安排2班学生学习“PPT2010”视频,机房管理员提前就配置好了流媒体服务器,8点钟准时使用224.4.5.4这个组播地址发送“Excel VBA”这个课程视频,使用224.4.5.3这个组播地址发送“PPT 2010”这个课程视频。

image.png

网络中的计算机除配置唯一地址外,收看组播视频还需要绑定组播地址,观看组播视频过程中,学生不能“快进”或“倒退”。这样流媒体服务器的带宽压力大大降低,网络中有10个学生收看视频和1000个学生收看视频对流媒体服务器来说流量是一样的。

通过上面的介绍,你是否更好地理解了组播这个概念呢?“组”就是一组计算机绑定相同的地址。如果计算机同时收看多个组播视频,则计算机的网卡需要同时绑定多个组播地址。

大家知道了组播,再理解IGMP协议的作用就容易了。

前面给大家介绍组播时,碰到的是流媒体服务器和接收组播的计算机在同一网段的情景。组播也可以跨网段,如图2-58所示,流媒体服务器在北京总公司的网络,上海分公司和石家庄分公司接收流媒体服务器的组播视频。这就要求网络中的路由器启用组播转发,组播数据流要从路由器R1发送到R2,路由器R2将组播数据流同时转发到路由器R3和R4。

image.png

如果上海分公司的计算机都不再接收224.4.5.4组播视频,R4路由器就会告诉R2路由器,R2路由器就不再向R4路由器转发该组播数据包。上海分公司的网络中只要有一台计算机接收该组播视频,R4路由器就会向R2路由器申请该组播数据包。

这就要求上海分公司的路由器R4必须知道网络中的计算机正在接收哪些组播。这就要用到IGMP协议了,上海分公司的主机与本地路由器(R4)之间使用Internet组管理协议(IGMP)来进行组播组成员信息的交互,用于管理组播组成员的加入和离开。

IGMP提供了在转发组播数据包到目的地的最后阶段所需的信息,实现如下双向功能:

·主机通过IGMP通知路由器希望接收或离开某个特定组播的信息。

·路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活动状态,实现所连网段组播成员关系的收集与维护。

数据链路层协议

如图2-59所示,计算机A与计算机D通信,要经过3段链路:以太网链路、点到点链路和以太网链路。不同的数据链路使用不同的数据链路层协议,比如以太网使用CSMA/CD协议,点到点链路使用PPP协议。

image.png

不同的数据链路层协议,定义的帧格式也不一样,数据包经过不同的链路就要封装成该数据链路层协议的帧格式。计算机A给计算机D发送一个数据包,将该数据包封装成以太网帧,可以看到以太网帧有MAC地址,到达RouterA。RouterA去掉数据链路层的封装,看到数据包,RouterA要把数据包发送到RouterB,经过点到点链路,该链路使用PPP协议,把数据包封装成PPP帧,发送到RouterB,RouterB收到后需要将数据包发送到计算机D,把数据包封装成以太网帧。

通过以上讲解,大家知道了数据链路层的功能就是将数据包封装成帧,从链路的一端发送到另一端,路由器才能收到数据包,为数据包选择转发路径。因此数据链路层为网络层提供服务,如图2-60所示。

image.png

数据链路层协议有很多,以太网数据链路是CMSC/CD协议,针对点到点链路的数据链路层协议除了PPP,还有HDLC、帧中继等。

物理层协议

物理层协议定义了与传输媒体的接口有关的一些特性,定义了这些接口标准,各厂家生产的网络设备接口才能相互连接和通信,比如定义了以太网接口标准,不同厂家的以太网设备就能相互连接。物理层为数据链路层提供服务。

物理层包括以下几方面的定义,大家可以认为是物理层协议包括的内容。

机械特性:指明接口所用接线器的形状和尺寸、引脚数目和排列、固定的锁定装置等,平时常见的各种规格的接插部件都有严格的标准化规定。这很像平时常见的各种规格的电源插头,其尺寸都有严格的规定。图2-61所示是某广域网接口和线缆接口。

image.png

电气特性:指明在接口电缆的各条线上出现的电压范围,比如+10V和−10V电压之间。

功能特性:指明某条线上出现的某一电平的电压表示何种意义。

过程特性:定义在信号线上进行二进制比特流传输的一组操作过程,包括各信号线的工作顺序和时序,使得比特流传输得以完成。

OSI参考模型

前面给大家讲的TCP/IP协议是互联网通信的工业标准。当网络刚开始出现时,典型情况下只能在同一制造商制造的计算机产品之间进行通信。20世纪70年代后期,国际标准化组织(InternationalOrganization for Standardization,ISO)创建了开放系统互连(Open SystemInterconnection,OSI)参考模型,从而打破了这一壁垒。

OSI参考模型和TCP/IP协议

OSI参考模型将计算机通信过程按功能划分为7层,并规定了每一层实现的功能。这样互联网设备的厂家以及软件公司就能参照OSI参考模型来设计自己的硬件和软件,不同供应商的网络设备之间就能够互相协同工作。

OSI参考模型不是具体的协议,TCP/IP协议是具体的协议,怎么来理解它们之间的关系呢?我们先来定义一下汽车参考模型,汽车要有动力系统、转向系统、制动系统、变速系统,这就相当于OSI参考模型。参照这个汽车参考模型可以研发的汽车可以很多种,比如奥迪轿车,它实现了汽车参考模型的全部功能,此时奥迪汽车就相当于TCP/IP协议。当然还有宝马汽车,它也实现了汽车参考模型的全部功能,它相当于IPX/SPX协议。这些不同的汽车,它们的动力系统有的使用汽油,有的使用天然气,发动机有的是8缸,有的是10缸,但实现的功能都是汽车参考模型的动力系统。变速系统有的是手动挡,有的是自动挡,有的是4级变速,有的是6级变速,有的是无级变速,实现的功能都是汽车参考模型的变速功能。

同样OSI参考模型只定义了要实现的功能,并没有规定如何实现以及实现的细节,不同的协议组实现方法可以不同。

OSI参考模型将计算机通信分成7层,TCP/IP协议对其进行了合并简化,其应用层实现了OSI参考模型的应用层、表示层和会话层的功能,并将数据链路层和物理层合并成网络接口层,如图2-62所示。

image.png

本书后面的内容就以TCP/IP协议分层来划分,为了给大家讲解得更加清楚,本书将TCP/IP协议组的网络接口层按照OSI参考模型拆分成数据链路层和物理层。

OSI参考模型每层功能

国际标准化组织(ISO)指定的OSI参考模型把计算机通信分成了7层。

应用层是七层OSI参考模型的第七层,应用层根据互联网中需要通信的应用程序的功能,定义客户端和服务端程序通信的规范,应用层向表示层发出请求。

表示层是七层OSI参考模型的第六层,它的功能是定义数据格式、检查是否加密或压缩。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。接收方再将收到的标准的ASCII转换成接收方计算机的字符集。这一层常常是软件开发人员需要考虑的问题,比如QQ软件开发人员就要考虑用户的聊天记录在网络传输之前加密,防止有人使用捕包工具捕获用户数据,泄露信息;针对QQ视频聊天,开发人员就要考虑如何通过压缩数据节省网络带宽。

会话层是七层OSI参考模型的第五层,它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时就可以通知应用,从而使表示层看到的数据是连续的。

传输层是七层OSI参考模型的第四层,它负责常规数据递送,面向连接或无连接。面向连接实现可靠传输,比如TCP协议,面向无连接,提供不可靠传输,比如UDP协议。传输层把消息分成若干个分组,并在接收端对它们进行重组。

网络层是七层OSI参考模型的第三层,它根据网络地址为数据包选择转发路径。网络层为传输层提供服务,只是尽力转发数据包,不保证不丢包,也不保证按顺序到达接收端。

数据链路层是七层OSI参考模型的第二层,数据链路层常简称为链路层,两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要专门的链路层的协议。在两个相邻节点之间传送数据时,数据链层将网络层提交下来的IP数据包组装成帧,在两个相邻节间的链路上传送帧。每一帧包括数据和必要的控制信息(数据链路层首部、同步信息、地址信息、差错控制等)。接收端必须知道帧的开始和结束,根据差错控制信息判断传输过程是否出现差错,如果出现差错,就丢弃该帧。