分层的网络结构
相互通信的计算机必须高度协调才能够进行通信,仅仅一条线路是不可能的
为了处理这些复杂的网络问题,早在最初的阿帕网中,就提出了分层的方法
分层将庞大复杂的问题,转换成若干个局部较小的问题,较小的问题就更加易于研究分析。
比如,唐僧取经,西天路途遥远,如果整体的看待出行问题,势必非常复杂
如果将整条路拆分为多个小段,这一段适合坐船,那一段适合骑马,这样就能够更好地解决问题
通过分层,各层之间相互独立,整体功能进行分解,每层实现独立功能
灵活型好,易于实现和维护,当一层发生变化,不会影响另一层,只要他们之间的协作接口不变
其实就是软件开发中的解耦
关于通信协议的分层,有下面三种形式
其实只有中间的TCP、IP是有用的
OSI理论虽然很完备,但是没有赶上互联网的发展,而且实现过于复杂
TCP/IP协议才是真正使用的协议
TCP/IP层次结构
TCP/IP分层介绍
如上图所示,现有的TCP、IP协议是分层次的。
在分层体系结构中,各层之间是完全独立的,某一层并不需要知道他的下一层是如何实现的,而仅仅是需要知道下层提供的服务
由于每一层都只是实现一种相对独立的功能,因而可以将一个难以处理的复杂问题分解为若干个小问题。
应用层
应用层是体系结构中的最高层,应用层是通过应用进程间的交互来完成特定网络应用。
应用层协议定义的是应用进程间通信和交互的规则。这里的进程就是主机中正在运行的程序。
应用层交互的数据单元称之为报文
运输层
运输层为两台主机之间的通信提供通用的数据传输服务,应用进程利用该服务传输传送应用层报文
运输层提供通用的服务,也就是说不针对特定的网络应用,而是多种应用可以使用同一个传输层服务。
运输层主要两种协议
传输控制协议TCP (Transmission Control Protocol):提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文段
用户数据报协议UDP (User Datagram Protocol):提供无连接的、尽最大努力(best-effort)的数据传输服务(不保证数据传输的可靠性),其数据传输的单位是用户数据报。
网际层
网际层负责为分组交换网上的不同主机提供通信服务。
在发送数据时,网际层把运输层产生的报文段或用户数据报封装成分组或包进行传送。
在TCP/IP体系中,由于网际层使用IP协议,因此分组也叫做IP数据报,或简称为数据报
网络层的另一个任务就是要选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。
网络接口层
TCP/IP模型中并没有对网络接口层进行准确地定义,仅仅要求能够通过网络设备传输IP数据包,也就是为IP数据报的发送和接收服务
网络接口层相当于OSI模型中的数据链路层和物理层
数据链路层通常简称为链路层,两台主机数据传输,总是要经过一段段的链路,这就需要使用专门的链路层协议
在两个相邻节点之间传送协议时,链路层将网络层传递过来的IP数据报封装成帧,在两个相邻的链路上传递帧
每一帧包括数据和必要的控制信息
在接收消息时,控制信息能够提供足够的信息让接收端能够识别一个帧从哪个比特开始到哪个比特结束。
这样链路层收到数据之后,就可以提取出来数据部分,上交给网络层。
而物理层规定了数据在物理媒体上传递的一些协议,比如电缆的插头应该有多少引脚,在物理层上传输的是比特。
在每层中,又都运行着不同的协议。从这一点也更好的能看得出来,分层设计的好处,每一层都可以根据本层的特点,使用不同的软硬件方案,从而既灵活又高效。
网络数据的分层运输
如上图所示,计算机网络中,数据的传输也是类似快递运输的过程。
- 应用层对应着操作系统中运行的各类应用软件
- 传输层、网际层以及网络接口层对应着操作系统、网卡、网卡驱动程序。
- 而中间的网际层、网络接口层又对应着路由器、交换机等通信设备
最终实现了计算机两个进程的通信。
聊QQ时,你脑子里面应该没有路由器这个东西,你感觉到的应该只是你在跟对方聊QQ,也就是你在你电脑上聊天窗口中输入内容,对方的QQ窗口中间就会接到消息,所以说下层对上层就是透明的。
网络协议是属于标准、规范、纲领,计算机操作系统中可以实现所需要的功能,路由器、交换机等网络设备中也会实现所需要的部分功能;
尽管网络协议分层明确,但是协议是协议,实现是实现,在具体的实现上,在实现上往往是有交织的。
在快递的运输过程中,在所有的节点上不断地进行着装箱,装车,卸车,拆箱的过程,直到货物到达收件人手中。
在计算机网络通信中,数据从应用层准备好之后,类似装箱的过程,不断地进行封装,添加TCP头部,添加IP头部,添加MAC头部,不断转发,到达最终的接收方。
包的格式
包的基本结构为头部和数据,每一层的包(段)都是如此,上一层的数据到下一层变为数据,然后添加对应的头部。
比如最初的快递盒子到了卡车上,应该是被装到袋子(箱子)里面,变成了数据,然后这个袋子(箱子)也会被贴上下一站的标签。
层层包装与运输
如下图所示,最初的应用层数据(卖家发出的快递盒子),被放到了运输层,添加TCP头部(放入编织袋,贴上新的标签)
然后又进入到网际层,添加了IP头部(类似将指定目的地的货搬上车运输),然后又进入到链路层,添加MAC头部,最终到达目的地
所以,网络数据的传递,跟快递的层层逻辑,有很大的相似性。
层次功能简介
应用层是应用之间通信的协议
比如,在软件X中,我们约定如果我发了GET三个字母给你,你就把你的某个内容回传给我,这就是应用层的协议。
从数据传输交换的角度看,应用层并不涉及数据传输,应用层产生的数据,是被运输的“货物”。
运输层真正的完成了数据端到端的传送---从一台计算机的一个端点传输到另一台计算机中的一个端点
网络中有很多计算机,每一台计算机中可以同时运行多个应用程序
如同同一个公司地址,可以有很多收件人
将消息传送到某一台计算机的某个应用程序,这就是端到端的传送,类似通过地址+姓名手机唯一定位一个收件人
运输层仅仅运行于主机上,并不会运行于网络传输设备上,比如路由器,他们都不涉及运输层协议
从数据真正运输的角度看,起最大作用的是网际层,将数据从一台计算机传输到另一台计算机的整个过程。
网际层将传输层数据进一步封装,在网络上进行传递,也是路由器需要的协议
通过网际层可以确定数据报的方向,但是具体的传输还是要依靠物理设备,所以网络接口层(链路层物理层)负责每一段的具体转发。
总结下就是:
- 应用层产生数据,并且注明收件人地址、姓名电话
- 运输层将数据进行封装,添加TCP头,真正开始打包运输,相当于收件
- 网络层将数据运送到目的主机
- 接收方的运输层又负责将数据运送到指定程序
- 目的程序解读数据按照应用层协议进行响应
网络接口层完成了每一段物理链路上数据的传送,网际层完成了发送方主机到接收方主机数据的传送
运输层在大门口接收到了数据解析后,将数据运送到指定程序
应用层读取数据
计算机网络的各层以及其协议的集合,就是网络的体系结构,而网络的体系结构是计算机网络通信的概念理论
是抽象的协议概念,而实现是具体的,是真正的运行在计算机中的硬件和软件
Web技术的发展
通信协议是通信的理论基石,计算机、操作系统以及各种网络设备对通信的支持是计算机网络通信的物质基础
而web服务则是运行于应用层,借助于应用层的协议,建立了客户端与服务器,对等层之间的联系,底层的硬件以及软件为其提供服务。
web核心组成
-
URI 解决了文档的命名和寻址识别问题
-
HTTP解决了浏览器与服务器应用层之间的交流问题
-
HTML 定义了超文本文档的表示
-
浏览器用于发起请求,并且解析文档
-
服务器用于保存文档
URI
统一资源标识符(Uniform Resource Identifier,或URI)
URI采用一种特定语法标识一个资源的字符串,所标识的资源可能是服务器上的一个文件,也可能是一个邮件地址、新闻消息、图书、人名、互联网上的主机或者任何其它内容。
重点在于唯一标识
URI有两种形式,URL和URN
URL是Uniform Resource Locator的缩写,译为“统一资源定位符”
URL的格式由下列三部分组成:
- 协议(或称为服务方式);
- 存有该资源的主机名称(域名)或者IP地址(有时也包括端口号);
- 主机资源的具体地址,如目录和文件名等;
URN是统一资源名称 (Uniform Resource Name, URN)
URN它命名资源但不指定如何定位资源
URI描述了这么一个东西:可以用来唯一标识一个资源,URL和URN是他的两种具体形式,所以一个URI可能是一个URL,也可能是一个URN,或者二者兼具。
但是任何一个URL或者URN他们肯定都是URI
HTTP协议
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
最早版本是1991年发布的0.9版。该版本极其简单,只有一个命令GET。
GET /index.html
表示,TCP 连接(connection)建立后,客户端向服务器请求(request)网页index.html。
协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式。
HTTP协议就是浏览器与web服务器两个应用之间通信的“协议”“语言”
计算机不能像人类一样沟通,他只是0,1的世界,想要交流就必须制定通信的格式,而这个HTTP协议就是浏览器与Web服务器的沟通方式
这就是它的根本,如同你对别人竖大拇指表示称赞,服务器看到GET方法就会返回数据,这就是浏览器与服务器沟通交流的方式。
换句话说,人类用语言和文字进行沟通,CS世界中的各种协议,都是计算机的沟通方式。
HTML
HTML超文本标记语言,标准通用标记语言下的一个应用
标准通用标记语言(简称“通用标言”),是一种定义电子文档结构和描述其内容的国际标准语言;
早在万维网发明之前“通用标言”就已存在,HTML也是由他发展演变而来,
可以简单理解为一种借助于标记符格式化电子文档的语言
浏览器
浏览器就是一个应用软件,他可以通过HTTP协议与服务器进行交互
根本功能也很简单,发送HTTP请求,解析显式获得的响应数据
服务器
Web服务器是可以向发出请求的浏览器提供文档的程序,也是一种软件。
遵循HTTP协议,接受浏览器客户端发起的请求,并按照HTTP协议的规定响应的一种软件。
现在也把提供web服务的专用计算机叫做web服务器,提供web服务的程序叫做web容器。
WEB周边组件-域名与DNS
域名(Domain Name),简称域名、网域
是由一串用点分隔的名字组成的,表示Internet上某一台计算机或计算机组的名称
用于在数据传输时标识计算机的位置
我们知道计算机在网络中的通信需要借助于ip地址,但是ip地址即使是点分十进制,依然难以记忆
域名就是为了简化记忆,更加便于使用
简言之,域名等于一个ip的名字
域名采用树状的层级结构,任何一个连接在互联网上的主机和路由器,都有一个唯一的层次结构名字,也就是域名
这里的域(domain)是名字空间中的一个可被管理的划分。域还可以划分为子域,而子域还可以继续被划分为子域
这就形成了子域,二级域,三级域...
每个域名都由一个标号构成,标号之间使用小数点分割,如下图所示
任何一个域名,都是一个顶级域名的子域,顶级域的划分,完成了域名空间的顶层管理
DNS规定,每一个标号不允许超过63个字符,也不区分大小写,标号中除了使用连字符外不能使用其他的标点符号
级别最低的标号位于域名最左边,级别最高的顶级域名位于域名最右边
既不规定每一个域名需要有多少个下级域名,也不固定每一级的域名代表什么意思,各级域名由他的上级域名管理机构进行管理,最高的顶级域名由ICANN进行管理,叶子节点指向物理机器
DNS解析过程
上面介绍的域名体系是逻辑上的,DNS服务器的运行按照“区”来进行划分,域名的体系结构按照“域”来划分,服务器实际的查询解析,则是按照“区”,
简言之,逻辑上就相当于按照行政区域划分,实际管辖上则是分片区管理,区可能小于或者等于一个域,但是肯定不会大于域。
一个区中所有的节点必须是联通的,每一个区设置相应的权限域名服务器(authoritative name server),用来保存该区中所有的域名与IP地址的映射
根域名服务器
最高层次的域名服务器,最重要的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址,如果所有的根域名服务器挂掉,整个互联网将会瘫痪。
顶级域名服务器
管理在该顶级域名服务器注册的所有的二级域名,收到请求后,给出响应(要么直接返回结果,要么给出下一步应该查询的域名服务器的IP地址)
权限域名服务器
负责一个区的域名服务器
如果一个权限域名服务器不能给出最后的查询结果,会通知发出请求的DNS客户,下一步应该找哪个权限域名服务器
本地域名服务器
本地域名服务器不是域名管理层次中的一环,主要作用是为了高效节能
每个互联网ISP ,每个大学、机构都可以有一个本地域名服务器
windows中关于DNS的设置就是本地域名服务器,也叫做默认域名服务器
迭代查询-->我不知道你找XXX去,一直踢皮球
递归查询-->我去帮你查,一直很仗义
主机向本地域名服务器的查询一般都是采用递归查询
本地域名服务器向根域名服务器的查询通常是采用迭代查询
简单理解就是域名逻辑上是树形的层级结构,按照域进行划分
DNS域名服务器按照区进行划分,每个区小于等于一个域,对域进行分片管理
DNS的域名服务器就是与域名层次等级结构相对应的一个服务器结构体系
参考:https://www.cnblogs.com/noteless/p/10242537.html#20