1 通信协议
1.1 定义
通信协议(communications protocol)是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。
1.2三要素
协议主要由以下三个要素组成:
- 语法:“如何讲”,数据的格式、编码和信号等级(电平的高低)。
- 语义:“讲什么”,数据内容、含义以及控制信息。
- 定时规则(时序):明确通信的顺序、速率匹配和排序。
1.3特点
通信协议具有层次性、可靠性和有效性。
1.4体系结构
将网络体系进行分层就是把复杂的通信网络协调问题进行分解,再分别处理,使复杂的问题简化,以便于网络的理解及各部分的设计和实现。分层结构示意图如图所示。每一层实现相对独立的功能,下层向上层提供服务,上层是下层的用户;有利于交流、理解、标准化;协议仅针对某一层,为同等实体之间通信制定;易于实现和维护;灵活性较好,结构上可分割。
2 OSI模型
2.1 OSI/RM
OSI/RM(Open System Interconnection Reference Model)即开放系统互连基本参考模型。开放,是指非垄断的。系统是指现实的系统中与互联有关的各部分。
2.2七层结构
2.2.1 物理层(PhysicalLayer)
规定通信设备的机械的、电气的、功能的和过程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械特性规定了网络连 接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等;功能 特性是指对各个信号先分配确切的信号含义,即定义了DTE(数据终端设备)和DCE(数据通信设备)之间各个线路的功能;过程特性定义了利用信号线进行 bit流传输的一组操作规程,是指在物理连接的建立、维护、交换信息时,DTE和DCE双方在各电路上的动作系列。
属于物理层定义的典型规范代表包括:EIA/TIARS-232、EIA/TIARS-449、V.35、RJ-45等。
物理层的主要功能:
为数据端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成.一次完整的数据传输,包括激活物理连接,传送数据,终止物理连接.所谓激活,就是不管有多少物理媒体参与,都要在通信的两个数据终端设备间连接起来,形成一条通路.
物理层的主要设备:中继器、集线器。
2.2.2 数据链路层(DataLinkLayer)
在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。
数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
在这一层,数据的单位称为帧(frame)。
数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。
链路层的主要功能:
链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现。链路层应具备如下功能:
链路连接的建立,拆除,分离。帧定界和帧同步。链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界。
顺序控制,指对帧的收发顺序的控制。差错检测和恢复。还有链路标识,流量控制等等.差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,而帧丢失等用序号检测.各种错误的恢复则常靠反馈重发技术来完成。
数据链路层主要设备:二层交换机、网桥
2.2.3 网络层(Network layer)
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。网络层将解封装数据链路层收到的帧,提取数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。
如果你在谈论一个IP地址,那么你是在处理第3层的问题,这是“数据包”问题,而不是第2层的“帧”。IP是第3层问题的一部分,此外还有一些路由协议和地址解析协议(ARP)。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。
在这一层,数据的单位称为数据包(packet)。
网络层协议的代表包括:IP、IPX、OSPF等。
网络层主要功能:
网络层为建立网络连接和为上层提供服务,应具备以下主要功能:路由选择和中继;激活,终止网络连接;在一条数据链路上复用多条网络连接,多采取分时复用技术;差错检测与恢复;排序,流量控制;服务选择;网络管理;网络层标准简介。
网络层主要设备:路由器
2.2.4 传输层(Transport layer)
第4层的数据单元称为数据段(segment)这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所谓透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。
传输层协议的代表包括:TCP、UDP、SPX等。
2.2.5 会话层(Session layer)
这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
会话层提供的服务可使应用建立和维持会话,并能使会话获得同步。
2.2.6 表示层(Presentation layer)
这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。例如图像格式的显示,就是由位于表示层的协议来支持。
2.2.7 应用层(Application layer)
应用层为操作系统或网络应用程序提供访问网络服务的接口。 应用层协议的代表包括:Telnet、FTP、HTTP、SNMP、DNS等。
OSI 的七层运用各种各样的控制信息来和其他计算机系统的对应层进行通信。这些控制信息包含特殊的请求和说明,它们在对应的 OSI 层间进行交换。每一层数据的头和尾是两个携带控制信息的基本形式。
一个 OSI 层与另一层之间的通信是利用第二层提供的服务完成的。相邻层提供的服务帮助一 OSI 层与另一计算机系统的对应层进行通信。一个 OSI 模型的特定层通常是与另外三个 OSI 层联系:与之直接相邻的上一层和下一层,还有目标联网计算机系统的对应层。例如,计算机 A 的数据链路层应与其网络层,物理层以及计算机 B 的数据链路层进行通信。
2.3分层优点
- (1)人们可以很容易的讨论和学习协议的规范细节。
- (2)层间的标准接口方便了工程模块化。
- (3)创建了一个更好的互连环境。
- (4)降低了复杂度,使程序更容易修改,产品开发的速度更快。
- (5)每层利用紧邻的下层服务,更容易记住个层的功能。 OSI是一个定义良好的协议规范集,并有许多可选部分完成类似的任务。
它定义了开放系统的层次结构、层次之间的相互关系以及各层所包括的可能的任务。是作为一个框架来协调和组织各层所提供的服务。
3 TCP/IP协议
tcp/ip即TCP/IP协议。
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。
3.1 组成层次
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。
从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
注意tcp本身不具有数据传输中噪音导致的错误检测功能,但是有实现超时的错误重传功能;
3.1.1 网络接口层
物理层是定义物理介质的各种特性:
- 机械特性;
- 电子特性;
- 功能特性;
- 规程特性。 数据链路层是负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。 ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。 RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站还有DHCP服务。 常见的接口层协议有: Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。
3.1.2 网络层
负责相邻计算机之间的通信。其功能包括三方面。
- 处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
- 处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
- 处理路径、流控、拥塞等问题。
- 网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
- 控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。
- IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务。
- ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。
- Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。
3.1.3 传输层
提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。
3.1.4 应用层
向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。
- FTP(File Transfer Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口是20H,控制端口是21H。
- Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。
- DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换,使用端口53。
- SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转,使用端口25。
- NFS(Network File System)是网络文件系统,用于网络中不同主机间的文件共享。
- HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于实现互联网中的WWW服务,使用端口80。
3.2主要特点
- TCP/IP协议不依赖于任何特定的计算机硬件或操作系统,提供开放的协议标准,即使不考虑Internet,TCP/IP协议也获得了广泛的支持。所以TCP/IP协议成为一种联合各种硬件和软件的实用系统。
- TCP/IP协议并不依赖于特定的网络传输硬件,所以TCP/IP协议能够集成各种各样的网络。用户能够使用以太网(Ethernet)、令牌环网(Token Ring Network)、拨号线路(Dial-up line)、X.25网以及所有的网络传输硬件。
- 统一的网络地址分配方案,使得整个TCP/IP设备在网中都具有惟一的地址
- 标准化的高层协议,可以提供多种可靠的用户服务。
3.3协议优势
在长期的发展过程中,IP逐渐取代其他网络。这里是一个简单的解释。IP传输通用数据。数据能够用于任何目的,并且能够很轻易地取代以前由专有数据网络传输的数据。
3.4主要缺点
第一,它在服务、接口与协议的区别上就不是很清楚。一个好的软件工程应该将功能与实现方法区分开来,TCP/IP恰恰没有很好地做到这点,就使得TCP/IP参考模型对于使用新的技术的指导意义是不够的。TCP/IP参考模型不适合于其他非TCP/IP协议簇。
第二,主机-网络层本身并不是实际的一层,它定义了网络层与数据链路层的接口。物理层与数据链路层的划分是必要和合理的,一个好的参考模型应该将它们区分开,而TCP/IP参考模型却没有做到这点。
3.5 总结
网络层中的协议主要有IP,ICMP,IGMP等,由于它包含了IP协议模块,所以它是所有基于TCP/IP协议网络的核心。在网络层中,IP模块完成大部分功能。ICMP和IGMP以及其他支持IP的协议帮助IP完成特定的任务,如传输差错控制信息以及主机/路由器之间的控制电文等。网络层掌管着网络中主机间的信息传输。
传输层上的主要协议是TCP和UDP。正如网络层控制着主机之间的数据传递,传输层控制着那些将要进入网络层的数据。两个协议就是它管理这些数据的两种方式:TCP是一个基于连接的协议;UDP则是面向无连接服务的管理方式的协议。
4 TCP/IP 体系中的传输层
TCP/IP的运输层有两个不同的协议:
(1) 用户数据报协议 UDP (User Datagram Protocol)
(2) 传输控制协议 TCP (Transmission Control Protocol)
4.1 服务类型
传输层提供的服务可分为传输连接服务和数据传输服务。
- 传输连接服务:通常,对会话层要求的每个传输连接,传输层都要在网络层上建立相应的连接。
- 数据传输服务:强调提供面向连接的可靠服务(很晚OSI才开始制定无连接服务的有关标准),并提供流量控制、差错控制和序列控制,以实现两个终端系统间传输的报文无差错、无丢失、无重复、无乱序。
• 面向连接的服务:
- 先建立连接再传输数据,之后再断开连接
- 数据传输过程中,数据包不需要携带目的地址
- 保证数据传输的可靠性
• 无连接的服务:
- 不需要事先建立连接,直接发送数据
- 每个报文都带有完整的目的地址
- 不保证报文传输的可靠性
4.2 建立 TCP 连接的三次握手
TCP是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:
主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;
主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;
主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。
三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
4.3 结束 TCP 连接的四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
4.4 端口
- 端口就是运输层服务访问点(TSAP)。
- 端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。
- 从这个意义上讲,端口是用来标志应用层的进程。
TCP段结构中端口地址都是16比特,可以有在0~65535范围内的端口号。对于这65536个端口号有以下的使用规定:
- 端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1~1023之间的端口号,是由IANA来管理的;
- 客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;
- 大多数TCP/IP实现给临时端口号分配1024~5000之间的端口号。大于5000的端口号是为其他服务器预留的。
一些常见的端口号及其用途如下:
- 21端口:FTP 文件传输服务
- 22端口:SSH 远程连接服务
- 23端口:TELNET 终端仿真服务
- 25端口:SMTP 简单邮件传输服务
- 53端口:DNS 域名解析服务
- 80端口:HTTP 超文本传输服务
- 443端口:HTTPS 加密的超文本传输服务
- 3306端口:MYSQL数据库端口
- 5432端口:postgresql数据库端口
- 6379端口:Redis数据库端口
- 8080端口:TCP服务端默认端口
- 8888端口:Nginx服务器的端口
- 9200端口:Elasticsearch服务器端口
- 27017端口:mongoDB数据库默认端口
- 22122端口:fastdfs服务器默认端口
5 DNS(Domain Name System)
域名系统(外语首字母缩写DNS、外语全称Domain Name System),是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP(中文全称:网络协议)地址数串。
Name Server(域名服务器) :域名服务器有两大类型Authoritative Name Server(权威域名服务器)和Caching Name Server(存储缓冲域名服务器)。权威域名服务器又包含了主服务器、辅服务器等子类型。
The Primary Master(主服务器) / Slave Server(辅服务器) :每个区至少有一台权威域名服务器负责解析工作,考虑到服务器和网络的不稳定性,通常把区交由两台或多台权威域名服务器解析。其中的一台被指定为主服务器,其它的则为辅服务器。区完整的配置信息保存在主服务器上,辅服务器会定期将主服务器上区的资料复制到本机。
存储缓冲域名服务器 :为了节省查询时间,提高性能,支持递归查询的域名服务器通常会在一定的时间范围内将查询结果放入高速缓存,使用这种方式的域名服务器称为存储缓冲域名服务器。
5.1 DNS 的作用和原理
DNS(Domain Name System)是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于 TCP/IP 网络。
DNS 的作用
通常我们有两种方式识别主机:通过主机名或者 IP 地址。人们喜欢便于记忆的主机名表示,而路由器则喜欢定长的、有着层次结构的 IP 地址。为了满足这些不同的偏好,我们就需要一种能够进行主机名到 IP 地址转换的目录服务,域名系统作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS 域名解析原理
DNS 采用了分布式的设计方案,其域名空间采用一种树形的层次结构:
上图展示了 DNS 服务器的部分层次结构,从上到下依次为根域名服务器、顶级域名服务器和权威域名服务器。其实根域名服务器在因特网上有13个,大部分位于北美洲。第二层为顶级域服务器,这些服务器负责顶级域名(如 com、org、net、edu)和所有国家的顶级域名(如uk、fr、ca 和 jp)。在第三层为权威 DNS 服务器,因特网上具有公共可访问主机(例如 Web 服务器和邮件服务器)的每个组织机构必须提供公共可访问的 DNS 记录,这些记录由组织机构的权威 DNS 服务器负责保存,这些记录将这些主机的名称映射为 IP 地址。
除此之外,还有一类重要的 DNS 服务器,叫做本地 DNS 服务器。本地 DNS 服务器严格来说不在 DNS 服务器的层次结构中,但它对 DNS 层次结构是很重要的。
我们以一个例子来了解 DNS 的工作原理,假设主机 A(IP 地址为 abc.xyz.edu) 想知道主机 B 的 IP 地址 (def.mn.edu),如下图所示:
- 主机 A 首先向它的本地 DNS 服务器发送一个 DNS 查询报文。该查询报文含有被转换的主机名 def.mn.edu。
- 本地 DNS 服务器将该报文转发到根 DNS 服务器,根 DNS 服务器注意到查询的 IP 地址前缀为 edu 后向本地 DNS 服务器返回负责 edu 的顶级域名服务器的 IP 地址列表。
- 该本地 DNS 服务器则再次向这些 顶级域名服务器发送查询报文。该顶级域名服务器注意到 mn.edu 的前缀,并用权威域名服务器的 IP 地址进行响应。通常情况下,顶级域名服务器并不总是知道每台主机的权威 DNS 服务器的 IP 地址,而只知道中间的某个服务器,该中间 DNS 服务器依次能找到用于相应主机的 IP 地址,我们假设中间经历了权威服务器 ① 和 ②,最后找到了负责 def.mn.edu 的权威 DNS 服务器 ③,之后,本地 DNS 服务器直接向该服务器发送查询报文从而获得主机 B 的IP 地址。
在上图中,IP 地址的查询其实经历了两种查询方式,分别是递归查询和迭代查询。
拓展:域名解析查询的两种方式
- 递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询,如上图步骤(1)和(10)。
- 迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询,如上图步骤(2)~(9)。
6 MAC(介质访问控制层)
MAC(Media Access Control)地址,或称为 MAC位址、硬件位址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC位址。因此一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC地址。
6.1 概述
MAC(Medium/Media Access Control)地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。其中,前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码(高位24位),也称为“编制上唯一的标识符”(Organizationally Unique Identifier),后三个字节(低位24位)由各厂家自行指派给生产的适配器接口,称为扩展标识符(唯一性)。一个地址块可以生成224个不同的地址。MAC地址实际上就是适配器地址或适配器标识符EUI-48。
6.2 作用
IP地址就如同一个职位,而MAC地址则好像是去应聘这个职位的人才,职位既可以让甲坐,也可以让乙坐,同样的道理一个结点的IP地址对于网卡是不做要求,基本上什么样的厂家都可以用,也就是说IP地址与MAC地址并不存在着绑定关系。本身有的计算机流动性就比较强,正如同人才可以给不同的单位干活的道理一样的,人才的流动性是比较强的。职位和人才的对应关系就有点像是IP地址与MAC地址的对应关系。
6.3 MAC地址与IP地址区别
IP地址和MAC地址相同点是它们都唯一,不同的特点主要有:
- 对于网络上的某一设备,如一台计算机或一台路由器,其IP地址可变(但必须唯一),而MAC地址不可变。我们可以根据需要给一台主机指定任意的IP地址,如我们可以给局域网上的某台计算机分配IP地址为192.168.0.112 ,也可以将它改成192.168.0.200。而任一网络设备(如网卡,路由器)一旦生产出来以后,其MAC地址永远唯一且不能由用户改变。
- 长度不同。IP地址为32位,MAC地址为48位。
- 分配依据不同。IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商。
- 寻址协议层不同。IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。
6.4 MAC获取方法
1、在Windows 2000/XP/Vista/7中
单击开始,点击运行,输入cmd,进入后输入ipconfig /all 即可。(或者输入ipconfig -all)
Physical Address. . . . . . . . . : 00-23-5A-15-99-42
2、LINUX下查看MAC地址
在命令行输入ifconfig即可看到MAC地址。
7.HTTP和HTTPS的区别
7.1基本概念
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。
HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:
- TCP 三次同步握手
- 客户端验证服务器数字证书
- DH 算法协商对称加密算法的密钥、hash 算法的密钥
- SSL 安全加密隧道协商完成
- 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
7.2 HTTP 与 HTTPS 区别
- 安全性:HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
- 证书:使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- 响应速度:HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- 端口:http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
7.3 http协议
一次HTTP请求操作称为一个事务,其工作过程分为四个步骤:
7.3.1 建立TCP连接
因为HTTP协议在传输层使用的是TCP协议,所以客户端与服务器需要先建立连接,如点击某个超链接、提交注册信息等,HTTP协议开始工作
7.3.2 发送HTTP请求报文
建立TCP连接后,客户端发送一个HTTP请求报文给服务器,HTTP请求报文的格式如下图:
7.3.3 做出响应
服务器在收到客户端发出的HTTP请求后,服务器程序对该请求进行处理,最终给予相应的响应信息,HTTP响应报文如下图:
7.3.4 断开连接
客户端接收到服务器发送的HTTP响应后,浏览器会自动解析HTTP响应报文中的信息,并显示,然后客户端与服务器断开连接,在Http响应报文中通常包含三种客户最终看到的结果数据:
- Flash动画,如QQ农场和牧场
- 流数据,如下载文件
- Html页面,这是最常见的结果,我们上新浪网看新闻,主页面就是Html网页
7.4 Get请求和Post请求
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。 但最常用的是GET和POST,称为GET请求和POST请求,如在浏览器中输入 www.sina.com 进入新浪网,将发出GET请求;提交邮箱注册信息,将发出POST请求等等, GET请求和POST请求比较如下:
- 数据获取方式:通常Get用来从服务器上获得数据,而Post用来向服务器提交递数据
- 请求URL:Get请求时,请求的数据是追加到URL后面,因此为显示在浏览器地址栏中,也称为显示提交;以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd& password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空 格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以 16进制表示的ASCII。而Post请求时,请求的数据是放在HTTP请求体中,因此不会显示在浏览器地址栏中,也称为隐式提交;所以,在提交一些比较重要的数据时,强烈建议使用Post请求,如登录网银、提交注册信息等等
- 传输数据量:Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,理论上POST没有限制,所以在上传文件时只能使用Post,Post传输的数据大小限制在服务器中可以配置
- 安全性:POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为:(1)登录页面有可能被浏览器缓存;(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。
示例:
7.5 Cookie和Session
- HTTP 协议 ( 超文本传输协议 ) 是无状态的,不能保存客户端与服务器之间通讯 ( 交互 ) 的信息。
- 打个比方,拿最常见的登录来说,现在好多网站的操作都需要用户登录,假如在 a 操作时,用户成功登录系统,再进行 b 操作时,由于 HTTP 协议是无状态的,
- 用户之前登录的信息并没有被记录下来。那么,用户需要再次登录系统才能继续操作,以此类推,每个操作都需要登录一次系统,这是非常可怕的事情。
- cookie 和 session 技术的诞生,都是为解决 HTTP 无状态协议所带来的系列问题。它们可以维护用户与服务器间的会话状态。
7.5.1 Cookie
- Cookies在浏览器端(即客户端),浏览器会自动存储数据到Cookies中(服务器通过http响应告知浏览器将某些数据存储到Cookies中);
- Cookie 数据由浏览器按照一定的原则在后台自动发送给服务器(数据放在http请求中的请求头);
- 单个Cookie在客户端的限制是3K,就是说一个站点在客户端存放的Cookie不能超过3K;
- Cookies中的数据不安全,银行卡和密码等重要的数据绝对不能存储在Cookies中;
- 使用Cookies的例子:广告定投(搜索本地浏览器中的Cookies数据实现)、购物站点(购物车:服务器将数据保存在浏览器端的Cookies,若禁止Cookies,则商品不能加入到购物车)。
7.5.2 Session
Session即会话,表示浏览器与服务器一系列请求的集合,每个Session都有一个唯一的标识(服务器内部保证它的唯一性),即sessionId,服务器通过它来区分不同的客户端(客户端第一次发送请求给服务器时,服务器为其分配唯一的sesisonId),
数据存储到Session中是指:将数据存储到服务器的内存中,因此Session需要占用服务器的资源,如内存等,当大量的用户访问服务器时,服务器的压力是非常大的,为了杜绝资源的浪费,保证服务器资源合理被有效用户利用,需要一种机制来回收无效的Session,以释放其占用的内存资源,会话超时是非常不错的选择,会话的默认超时时间是30分钟,即客户端在30分钟之内没有发送http请求给服务器,服务器就会认为它是无效用户了,随即回收该客户端所占用的内存资源.
7.5.3 Cookie和Session的区别与联系
- Cookie是客户端机制,Session服务器端机制,数据存储在Session中比存储在Cookie中要安全;
- 客户端首次发送http请求到服务器端时,服务器会为其分配sessionId,并且将sessionId存储到客户端的Cookies(sessionId不一定要放到客户端的Cookies中),客户端再次发送的HTTP请求中一定会包含sessionId,服务器收到该请求包发现已经存在有效的sessionId,因此认为两次请求是在同一个会话中;
7.6 TCP 三次握手
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接
- 第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认
- 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
- 第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
简化:
7.7 HTTPS 的工作原理
我们都知道 HTTPS 能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。
1、客户端发起 HTTPS 请求
这个没什么好说的,就是用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。
2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl 就是个不错的选择,有 1 年的免费服务)。
这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4、客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
7.8 HTTPS工作原理简化:
(1)请求:443端口,支持算法,密钥长度
理解:两网友约定明天出去玩,玩什么呢?爬山,游泳,游乐园选一个吧
(2)响应:选择一种,将其密钥组件一起发给客户端
理解:我们去游乐园吧
(3)响应:数字证书
理解:为了证明我是个合法公民。给你看看我的身份证,身份证是XX公安局发的,身份证号是XX,10年后过期
(4)响应:协商完成
理解:OK,我同意去游乐园
(5)生成随机密码串,并使用证书公钥加密
理解:为了互相证明我们是协商的网友,每个句尾加个“喵”
(6)请求:尝试使用加密串加密
理解:我们试试,我是客户端喵
(7)响应:发送finish结束
理解:我说完了你试试
(8)响应:和客户端相同进行加密发送
理解:服务端喵
然后,SSL链接完成
7.9 HTTP 是不保存状态的协议,如何保存用户状态
我们知道,假如某个特定的客户机在短时间内两次请求同一个对象,服务器并不会因为刚刚为该用户提供了该对象就不再做出反应,而是重新发送该对象,就像该服务器已经完全忘记不久之前所做过的是一样。因为一个 HTTP 服务器并不保存关于客户机的任何信息,所以我们说 HTTP 是一个无状态协议。
通常有两种解决方案:
① 基于 Session 实现的会话保持
在客户端第一次向服务器发送 HTTP 请求后,服务器会创建一个 Session 对象并将客户端的身份信息以键值对的形式存储下来,然后分配一个会话标识(SessionId)给客户端,这个会话标识一般保存在客户端 Cookie 中,之后每次该浏览器发送 HTTP 请求都会带上 Cookie 中的 SessionId 到服务器,服务器根据会话标识就可以将之前的状态信息与会话联系起来,从而实现会话保持。
优点:安全性高,因为状态信息保存在服务器端。
缺点:由于大型网站往往采用的是分布式服务器,浏览器发送的 HTTP 请求一般要先通过负载均衡器才能到达具体的后台服务器,倘若同一个浏览器两次 HTTP 请求分别落在不同的服务器上时,基于 Session 的方法就不能实现会话保持了。
【解决方法:采用中间件,例如 Redis,我们通过将 Session 的信息存储在 Redis 中,使得每个服务器都可以访问到之前的状态信息】
② 基于 Cookie 实现的会话保持
当服务器发送响应消息时,在 HTTP 响应头中设置 Set-Cookie 字段,用来存储客户端的状态信息。客户端解析出 HTTP 响应头中的字段信息,并根据其生命周期创建不同的 Cookie,这样一来每次浏览器发送 HTTP 请求的时候都会带上 Cookie 字段,从而实现状态保持。基于 Cookie 的会话保持与基于 Session 实现的会话保持最主要的区别是前者完全将会话状态信息存储在浏览器 Cookie 中。
优点:服务器不用保存状态信息, 减轻服务器存储压力,同时便于服务端做水平拓展。
缺点:该方式不够安全,因为状态信息存储在客户端,这意味着不能在会话中保存机密数据。除此之外,浏览器每次发起 HTTP 请求时都需要发送额外的 Cookie 到服务器端,会占用更多带宽。
拓展:Cookie被禁用了怎么办?
若遇到 Cookie 被禁用的情况,则可以通过重写 URL 的方式将会话标识放在 URL 的参数里,也可以实现会话保持。
7.10 HTTP状态码
HTTP 状态码由三个十进制数字组成,第一个数字定义了状态码的类型,后两个并没有起到分类的作用。HTTP 状态码共有 5 种类型:
| 分类 | 分类描述 |
|---|---|
| 1XX | 指示信息--表示请求正在处理 |
| 2XX | 成功--表示请求已被成功处理完毕 |
| 3XX | 重定向--要完成的请求需要进行附加操作 |
| 4XX | 客户端错误--请求有语法错误或者请求无法实现,服务器无法处理请求 |
| 5XX | 服务器端错误--服务器处理请求出现错误 |
相应的 HTTP 状态码列表:
| 状态码 | 英文名称 | 中文描述 |
|---|---|---|
| 100 | Continue | 继续。客户端继续处理请求 |
| 101 | Switching Protocol | 切换协议。服务器根据客户端的请求切换到更高级的协议 |
| 200 | OK | 请求成功。请求所希望的响应头或数据体将随此响应返回 |
| 201 | Created | 请求以实现。并且有一个新的资源已经依据需求而建立 |
| 202 | Accepted | 请求已接受。已经接受请求,但还未处理完成 |
| 203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的 meta 信息不在原始的服务器中,而是一个副本。 |
| 204 | No Content | 无内容。服务器成功处理了请求,但不需要返回任何实体内容 |
| 205 | Reset Content | 重置内容。与 204 类似,不同点是返回此状态码的响应要求请求者重置文档视图 |
| 206 | Partial Content | 部分内容。服务器成功处理了部分 GET 请求 |
| 300 | Multiple Choices | 多种选择。被请求的资源有一系列可供选择的回馈信息,用户或浏览器能够自行选择一个首选地址进行重定向 |
| 301 | Moved Permanently | 永久移动。请求的资源已被永久地移动到新 URI,返回信息会包含新的 URI,浏览器会自动定向到新 URI |
| 302 | Found | 临时移动。与 301 类似。但资源只是临时被移动,客户端应继续使用原有URI |
| 303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
| 304 | Not Modified | 未修改。如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码 |
| 305 | Use Proxy | 使用代理。被请求的资源必须通过指定的代理才能被访问 |
| 306 | Unused | 在最新版的规范中,306状态码已经不再被使用 |
| 307 | Temporary Redirect | 临时重定向。请求的资源现在临时从不同的URI 响应请求,与302类似 |
| 400 | Bad Request | 客户端请求的语法错误,服务器无法理解;请求的参数有误 |
| 401 | Unauthorized | 当前请求需要用户验证 |
| 402 | Payment Required | 该状态码是为了将来可能的需求而预留的 |
| 403 | Forbidden | 服务器已经理解请求,但是拒绝执行它 |
| 404 | Not Found | 请求失败,请求所希望得到的资源未被在服务器上发现 |
| 405 | Method Not Allowed | 客户端请求中的方法被禁止 |
| 406 | Not Acceptable | 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体 |
| 407 | Proxy Authentication Required | 与401响应类似,只不过客户端必须在代理服务器上进行身份验证 |
| 408 | Request Time-out | 请求超时。服务器等待客户端发送的请求时间过长,超时 |
| 409 | Conflict | 由于和被请求的资源的当前状态之间存在冲突,请求无法完成 |
| 410 | Gone | 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址 |
| 411 | Length Required | 服务器拒绝在没有定义 Content-Length 头的情况下接受请求 |
| 412 | Precondition Failed | 客户端请求信息的先决条件错误 |
| 413 | Request Entity Too Large | 服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围 |
| 414 | Request-URI Too Large | 请求的 URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务 |
| 415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
| 416 | Requested range not satisfiable | 客户端请求的范围无效 |
| 417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
| 500 | Internal Server | 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理 |
| 501 | Not Implemented | 服务器不支持当前请求所需要的某个功能 |
| 502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到无效的响应 |
| 503 | Service Unavailable | 由于临时的服务器维护或者过载,服务器当前无法处理请求,一段时间后可能恢复正常 |
| 504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
| 505 | HTTP Version not supported | 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本 |
面试时针对状态码的常见问法:
① 状态码 301 和 302 的区别?
301:永久移动。请求的资源已被永久的移动到新的URI,旧的地址已经被永久的删除了。返回信息会包括新的URI,浏览器会自动定向到新的URI。今后新的请求都应使用新的URI代替。
302:临时移动。与301类似,客户端拿到服务端的响应消息后会跳转到一个新的 URL 地址。但资源只是临时被移动,旧的地址还在,客户端应继续使用原有URI。
② HTTP 异常状态码知道哪些?
该问题一般只需要回答 3, 4 , 5 开头的一些常见异常状态码即可。
7.11 如果你访问一个网站很慢,怎么排查和解决
网页打开速度慢的原因有很多,这里列举出一些较常出现的问题:
① 首先最直接的方法是查看本地网络是否正常,可以通过网络测速软件例如电脑管家等对电脑进行测速,若网速正常,我们查看网络带宽是否被占用,例如当你正在下载电影时并且没有限速,是会影响你打开网页的速度的,这种情况往往是处理器内存小导致的;
② 当网速测试正常时,我们对网站服务器速度进行排查,通过 ping 命令查看链接到服务器的时间和丢包等情况,一个速度好的机房,首先丢包率不能超过 1%,其次 ping 值要小,最后是 ping 值要稳定,如最大和最小差值过大说明路由不稳定。或者我们也可以查看同台服务器上其他网站的打开速度,看是否其他网站打开也慢。
③ 如果网页打开的速度时快时慢,甚至有时候打不开,有可能是空间不稳定的原因。当确定是该问题时,就要找你的空间商解决或换空间商了,如果购买空间的话,可选择购买购买双线空间或多线空间;如果是在有的地方打开速度快,有的地方打开速度慢,那应该是网络线路的问题。电信线路用户访问放在联通服务器的网站,联通线路用户访问放在电信服务器上的网站,相对来说打开速度肯定是比较慢。
④ 从网站本身找原因。网站的问题主要包括网站程序设计、网页设计结构和网页内容三个部分。
网站程序设计:当访问网页中有拖慢网站打开速度的代码,会影响网页的打开速度,例如网页中的统计代码,我们最好将其放在网站的末尾。因此我们需要查看网页程序的设计结构是否合理; 网页设计结构:如果是 table 布局的网站,查看是否嵌套次数太多,或是一个大表格分成多个表格这样的网页布局,此时我们可以采用 div 布局并配合 css 进行优化。 网页内容:查看网页中是否有许多尺寸大的图片或者尺寸大的 flash 存在,我们可以通过降低图片质量,减小图片尺寸,少用大型 flash 加以解决。此外,有的网页可能过多地引用了其他网站的内容,若某些被引用的网站访问速度慢,或者一些页面已经不存在了,打开的速度也会变慢。一种直接的解决方法是去除不必要的加载项。
7.12 网页解析全过程【用户输入网址到显示对应页面的全过程】
① DNS 解析:当用户输入一个网址并按下回车键的时候,浏览器获得一个域名,而在实际通信过程中,我们需要的是一个 IP 地址,因此我们需要先把域名转换成相应 IP 地址。 域名解析:查找本地host文件,若有对应IP和域名映射关系,则直接返回数据;若无则会DNS请求到本地DNS服务器,查询本地缓存,若有结果则返回,若无结果则会查找DNS根服务器(DNS域服务器)等,找到对应的IP地址;
② TCP 连接:浏览器通过 DNS 获取到 Web 服务器真正的 IP 地址后,便向 Web 服务器发起 TCP 连接请求,通过 TCP 三次握手建立好连接后,浏览器便可以将 HTTP 请求数据发送给服务器了。【三次握手放在传输层详细讲解】
③ 发送 HTTP 请求:浏览器向 Web 服务器发起一个 HTTP 请求,HTTP 协议是建立在 TCP 协议之上的应用层协议,其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。在这一过程中,会涉及到负载均衡等操作。
拓展:什么是负载均衡?
负载均衡,英文名为 Load Balance,其含义是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如 FTP 服务器、Web 服务器、企业核心服务器和其他主要任务服务器等,从而协同完成工作任务。负载均衡建立在现有的网络之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、增加吞吐量、加强网络处理能力并提高网络的灵活性和可用性。
负载均衡是分布式系统架构设计中必须考虑的因素之一,例如天猫、京东等大型用户网站中为了处理海量用户发起的请求,其往往采用分布式服务器,并通过引入反向代理等方式将用户请求均匀分发到每个服务器上,而这一过程所实现的就是负载均衡。
④ 处理请求并返回:服务器获取到客户端的 HTTP 请求后,会根据 HTTP 请求中的内容来决定如何获取相应的文件,并将文件发送给浏览器。
⑤ 浏览器渲染:浏览器根据响应开始显示页面,首先解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。
⑥ 断开连接:客户端和服务器通过四次挥手终止 TCP 连接。【其中的细节放在传输层详细讲解】
7.13 B/S架构和C/S架构
C/S(Client/Server)指客户机和服务器,在客户机端必须装客户端软件后才能访问服务器,如QQ、飞信等,如下图:
B/S(Browser/Server)指浏览器和服务器端,在客户机端不用按装专门的软件,只要一个浏览器即可,B/S架构是典型的C/S架构,B/S系统使用Http协议,,如下图
7.13.1 B/S架构和C/S架构比较
- B/S和C/S各有千秋,他们都是当前非常重要的计算架构
- 在适用Internet、维护工作量等方面,B/S比C/S要强得多
- B/S架构需要重点考虑系统在不同的浏览器中的兼容性问题,在IE个版本浏览器(IE6/7/8/9)、火狐浏览器、谷歌浏览器
- C/S 架构需要考虑系统的安装与反安装(不能使流氓软件)、支持哪种平台(如win32、win64、linux32等)
- 客户端不用维护,适用于用户群庞大,或客户需求经常发生变化的情况;C/S可以减轻服务器端压力
- C/S架构能够充分发挥客户端PC的处理能力,因此在业务表现能力方面,C/S比B/S要强很多,如很多大型的游戏就不能做成B/S系统,而只能做成C/S系统
7.14 进程和线程
- 进程:进程在操作系统中可以独立运行,作为资源分配的基本单位。表示运行在内存中的程序。
- 线程:线程是进程中的一个实例,作为系统调度和分派的基本单位。是进程中的一段序列,能够完成进程中的一个功能。
- 进程和线程的区别:
- (1)同一个进程可以包含多个线程,一个进程中至少包含一个线程,一个线程只能存在于一个进程中。
- (2)同一个进程下的所有线程能够共享该进程下的资源。(系统运行时会为每个进程分配不同的内存区域,但不会为线程分配内存。线程只能共享它所属进程的资源。)
- (3)进程结束后,该进程下的所有线程将销毁,而一个线程的结束不会影响同一进程下的其他线程。
- (4)线程是轻量级的进程,它的创建和销毁所需要的时间比进程小得多,所有操作系统的执行功能都是通过创建线程去完成的。
- (5)线程在执行时是同步和互斥的,因为他们共享同一个进程下的资源。
- (6)在操作系统中,进程是拥有系统资源的独立单元,它可以拥有自己的资源。一般而言,线程不能拥有自己的资源,但是它能够访问其隶属进程的资源。