在不同电脑之间因为有分享资源和资讯的需求而产生彼此连结的电脑系统称之为网路 (networks)
,网路使电脑可以连结彼此让资量在不同电脑间互相传递,本章将介绍这个计算机科学中的延伸领域,由於篇章较多所以分为上下两章介绍。
全球资讯网中的重要元件就是超文件格式
,包含连结到其他文件的嵌式超连结 (hyperlinks)
传送超文件的网路协定与处理使用者所要求的超文件资料的服务器,一切都从这些开始,他们让全球资讯网快速的成长。
让使用者在网际网路上存取超文件的套装软件分为两大类,浏览器 (browser)
和网站服务器 (webserver)
,浏览器负责读取使用者所需要的资料柄有组织的方式呈现资料内容,网站服务器负责提供使用者(浏览器)所要求得超文件存取,而超文件一班都透过所谓的超文件传输协定 (Hypertext Transfer Protocol, HTTP)
来传送。
为了能够定位及撷取网站的文件,所以每个文件都被赋予一个唯一的地址,称为网址 (Uniform Resource Locator, URL)
,它包含浏览器所需要的资讯,可以让浏览器知道要连接哪一个服务器以及要获取哪些资源。
一个典型的 URL 需要有四个部分:
可以参考 What is a URL? 这篇有详细的介绍什麽是 URL, 格式与各自代表的内容。
传统超文件与一般文字档案相似,也是使用 ASCII 或 Unicode 编码,差别在於超文件有一种特殊符号也称为标签 (tag)
用来描述文件资料要如何显示在萤幕上,这种标签系统称为超文件标示语言 (Hypertext Markup Language, HTML)
,因此为了让浏览器显示网页於使用者萤幕上并且连接相关文件资料,网页作者需要使用 HTML 来描述浏览器需要的资讯,而浏览器则读取 HTML 的标签後就知道如何将文件呈现在电脑萤幕上。
是一种用来设计标记法的标准形式,使其能够以文字档的形式表示表示各种资料,遵照 XML 的标准,标记法(又称标示语言 (Markupo Language)
) 已经发展出标示数学、多媒体资料和音乐的格式,实际上 HTML 是基於 XML 标准的标示语言,用来标示网页资料。
XML 示范了如何制定一个有广大应用的标准,基於 XML 发展得标记法能发展出标准且通用的标示语言,有这个标准标示语言就能发展各种不同的应用,以这种方式发展的标示语言具备统一的形式,能够彼此结合以应付更复杂的应用。
若需要由用户端(如浏览器)进行遭做的行爲称为用户端 (client-side) 动作
,反之若需要由私服器端(网站服务器)进行的操作就称为伺服端 (server-side) 动作
,早期处理伺服端东做的方式是透过CGI (Common Gateway Interface)
指令进行,让使用者能够要求执行处存在服务器端的程序,这种方法的一种变通方式是让用户启用称为 servlet
的程序元件在服务器端运行。
在传送资料的过程中需样网路上所有电脑一起合作,因此处理传送过程的软件需要安装於网际网路的每台电脑中,本章会介绍这种软件的整体结构。
网路通讯软件的主要工作是提供两台电脑之间传送讯息所需要的基础架构,网际网路的软件有四个阶层,每个阶层都包含一群软件工具,这四个阶层分别为应用层 (application layer)
, 传输层 (transport layer)
, 网路层 (network layer)
和链结层 (link layer)
,讯息一般起源於应用层然後传送到传送层与网路层,此时讯息将准备进行传送,最後由链结层
进行传送,讯息传达到对方链结层後再往上经过忘录层与传输层送到对方应用层。
应用层以类似包裹寄送与接收的方式使用传输层来传送和接收网路讯息,应用层需要提供网路可辨识的地址(对方电脑地址),因此应用层必须使用网路上的名称服务器来转译我们习惯的名称地址为 IP address。
传输层的一个重要的任务就是从应用层中接收讯息,并确保讯息具备正确的格式已进行网路传输,传输层需要把讯息切成数个片段,讯息的切割是有其必要性的,因为网路路由器在传输讯息时许多讯息会在从中经过,而过长的讯息会阻碍其他讯息在网路上的传送,传输层的每个小片段讯息都会加上编号,这样可以在收到这些片段讯息的时候将他重组回原本的信息,接着这些称为封包 (packet)
的片段会被转送到网路层,此时他们会被视为各自无关的讯息。
网路层的任务是在封包传输的过重中决定封包的传送方向,实际上网路层与链结层结合後即可组成网路路由器中的软件,网路曾负责管理路由器的转送表,并且使用转送表决定封包转送的方向,而路由器的链结层负责接收和传送封包。
因此当网路层从传输层收到封包後,会使用自己的转送表以决定封包的传送方向,所以网路层再决定好转送方向後会将封包送往链结层以便真正进行传送。
链结层负责传送封包,因此链结层必须处理个电脑中个别网路的通讯细节,如果网路为乙太网路则要使用 CSMA/CD,若网路为 WiFi 则要改为使用 CSMA/CA。
当封包传送後会被另一端的链结层所接收,他再将封包移交给网路层,网路层会将封包的最终目的地与他的转送表进行比对,以决定封包的下个传送方向点,当决定好後会再将封包返还给链结层让封包继续往下个目的地前进,就是这样可以让封包在到达目的地之前可以跳过一台又一台的电脑。
要注意的是传输的过程中只有链结层与网路层再参与封包的传输,所以路由器中只会有这两个层接。
当封包到达最後的目的地时,网路层辨识出了封包的传输已经完成後,就会将封包转给传输层,传输层会取出封包内的讯息片段并依照讯息片段重组回最初的讯息。
由於开方网路的需求导致网路标准需要公开,以便让制造商可以制造相应的设备与软件,其中一项标准是开放系统互连 (Open System Interconnection, OSI)
参考模型,是基於七层
的架构,但它一直无法取代四阶层架构,主要因为他是在四阶层架构已经真正成为网际网路标准後才被提出的。
TCP/IP 架构是基於四层架构所定的一群协定标准,事实上传输控制协定 (Transmission COntrol Protocol, TCP)
与网际网路协定 (Internet Protocol, IP)
只是这群协议中的两个协议,因此应该说 TCP/IP 是传输层某个版本的定义,而其他版本包含用户数据包协议 (User Datagram Protocol, UDP)
,这个版本类似运送包裹时可以选择不同货运公司,每个货运公司都提供相同的基本服务但有各自的特色。
TCP/IP 与 UDP 有几项差异,其中之一是在应用层要求传送讯息之前,TCP 的传输层会先传送自己的讯息到目的地的传输层,告知有讯息即将传送过去,然後再开始传送讯息前等待对方先回应,以这样的方式在传送讯息之前先建立连线,而 UDP 则不会在传送资料前建立这样的连线,他只会传送讯息到指定位置後就不管了,所以 UDP 也被称为无连线传输协议 (connectionless protocol)
。
另外一个差异是在传输起点与终点的 TCP 传输层会进行告知与回应再进行封包封包传输的方式彼此合作以确保所有讯息片段都成功送到目标,所以 TCP 也被称为可靠通讯协定 (reliable protocol)
,相反的 UDP 没有这样的机制所以被称为不可靠通讯协定 (unreliable protocol)
。
TCP 与 UDP 的另一项差异是 TCP 提供流量控制 (flow control)
和壅塞控制 (congestion control)
,所谓的流量控制是指讯息起点的 TCP 传输层可降低讯息片段的传输率
以避免对方流量太过壅塞,而壅塞控制是指讯息起点的 TCP 传输层可以调整传输率
以缓解他和讯息目的地之间的流量拥塞。
IP 是网际网路实作的标准协定,网路层的任务是转送封包和路由 (routing, 亦即路线安排)
,其中转送封包是让封包在网路中分程传递,在每一次讯息发送端的 IP 网路层在准备封包时都会附加一个所谓的中继段个数 (hop count)
或生存时限
在封包上,这个数值代表封包被转送的次数上限
,每当 IP 网路层要转送一个封包时,他会将这个封包的中继段数减一,有这样的资讯可以确保封包在网路中被无止境的不断传送。
当一部电脑连接到网路时就会成为他人进行非法存取和破坏的目标之一,产生网路犯罪 (cybercrime)
问题,在本章中将探讨网路安全性的相关议题,网路安全 (cybersecurity)
是探讨保护电脑, 网路与资料免於这类攻击的课题。
许多攻击使用怀有恶意的软件恶意软件 (malware)
,这样的软件可能被传送到目标电脑或在远方进行攻击,前者的例子包含电脑病毒
, 电脑蠕虫
, 特洛伊木马
和间谍软件
。
监听软件 (sniffing software)
,他会搜集电脑内部运作的讯息并回报给攻击者,有些公司使用间谍软件获取客户资料等等,有可能被用来侧录电脑键盘所输入的符号序列进而寻找密码或信用卡卡号。相较於电脑病毒或间谍软件等纠由内部感染的方式,连接网路的电脑也会受到远方电脑执行某些软件进行攻击,其中一种就是阻断服务 (denial of service, Dos)
攻击,是一种让对方电脑信息超载的攻击,阻断攻击要在短时间内产生大量的讯息已淹没目标服务器,为了达到这个目的攻击方会在许多不知情的电脑中植入软件,等这些电脑中的软件收到信号後送有被操控的电脑就会发出讯息攻击目标,当攻击的发生分散在不同主机时,这种攻击方式就是分散式阻断服务 (distributed denial of service, DDoS)
。
对电脑网路攻击主要的预防机制是在网路上的某个节点过滤网路讯息,通常使用一种名为防火墙 (firewall)
的软件,可以将它安装於某个内部网路的闸道,这样就可以过滤进出此网域的信息
,他被设计用来阻挡送往某些目的地的讯号或阻挡从黑名单送来的讯息,防火墙的另一个功能是阻挡假冒的来自网与内位置的所有讯息
,因为有些外来讯息会假装是网域内的地址,这种伪装技巧称为诈骗 (spoofing)
攻击。
另一种工具也具有过滤的含义,称为代理服务器 (proxy server)
,是一种用户端与服务器端之间的中介软件
,目的是保护用户端免於遭受到服务器端的恶意攻击,每当一个网域内的用户端想连结该服务的服务器时,实际上用户连接到的是代理服务器,他会做为用户端与服务器端的沟通中介,这样做的第一个好处是服务器不会知道代理服务器并非真正的用户端,实际上他永远不会知道真实用户端的存在,所以服务器端就无法获取客户端网域内的构造资讯,第二个好处是代理服务器能帮忙过滤服务器传送的讯息
。
最一种对付网路入侵的方式是使用防毒软件 (antivirus software)
,防毒软件可以用来侦测并移除已知的电脑病毒和其他档案感染的问题,但事实上防毒软件只是许多同类软件的统称,每一种防毒软件设计用来侦测并移除特定
的感染问题,所以是一种一对一的关系。
密码学 (Cryptography)
是研究如何在网路上能够安全的传送与接收讯息,密码学工具如加密法 (encryption)
可以用传送编码的过的讯息,即使加密过的资料落到攻击者手中也可以保持资料的机密性。
HTTP 安全版的实例是 HTTPS
加密协定,它的基础是传输层安全协定 (Transport Layer Security, TLS)
以及後来的安全通讯协定 (Secure Sockets Layer, SSL)
。
密码专家使用加密方法来保护信息但这些加密法都是基於编码与解码演算法以及密码 (也称为金钥 (keys)
) 为主,但由於电脑的运算能力大幅进步,所以可以处理很长且看起来是随机的金钥,因此对称式金钥加密法 (symmetruc-key encryption)
使用了同样的金钥来处理讯息的编码与解码,提供了更佳的安全性。
公钥加密 (public-key encrypt-ion)
使用两把金钥,一把是用来加密讯息的公钥 (public key)
,另一把是用来解密的私钥 (private key)
,要使用公钥加密法首先先把公钥散布给一个需要传送讯息的点,而私钥则留在本地严格的保管,接着讯息发送端利用公钥将讯息加密并确认内容无虑後把讯息传到本地,即使讯息是由知道公钥的中介方转送也无所谓,因为唯一能解密讯息的是拥有私钥得本地,所以只要私钥是私密的迅即就可以保持隐密性。
当然公钥加密法也有浅在的问题,其中一个是确认所使用的公钥是目标方所使用的公钥,比如说有个人与银行通讯,他想确认所使用的公钥是银行提供的公钥,但若攻击者冒充自己是银行进而将伪装的公钥散布给某人,则某人家所加密的讯息传送假冒银行,这个讯息就只会对攻击方有用,对真正的银行没有作用,因此知道正确的公钥匙非常重要的。
确认公钥的方法之一是建立可信任的网站,这些网站称为凭证机构 (certificate authorities)
,其目的是维护个组织及其公钥的列表,这些凭证机构如同服务器一样提供给用户可靠的公钥资讯,称为凭证 (certificates)
,一个凭证包含该组织的名称
和所发行的公钥
。
最後要讨论公钥加密法在认证问题 (authentication)
上所扮演的角色,认证问题是确认讯息的来源,在某些公钥加密法中加密与解密的金钥是可以反转
的,亦即讯息可用私钥加密,任何以私钥加密的讯息必定是来自於该方,因此拥有私钥的那一方就能产生一组位元字串,称为数位签章 (digital signature)
,只有掌握私钥的那方知道如何产生,将讯息附加数位签章後,传送方可以标记该讯息是经过认证的,当讯息被接收後接收方使用传送方送来的公钥来密数位签章,因为只有私钥持有者能产生私钥加密的版本,所以能确保讯息是认证过的。
<<: “使用属於公共领域的专利算法(Use of a patented algorithm that belongs to the public domain)“是最不受许可要求的约束
>>: 【CSS】【Bootstrap】让图片满版的object-fit
写在前面 placeholder for test placeholder for test pla...
在没有框架前,条件判断都是写在 Javascript 里面,但是有了 Vue 之後,可以直接在 HT...
React 其中一种常见的使用情况是在一个 component 中回传多个 element,fra...
为解决JavaScript非同步问题,最初使用的方式是callback function,但为了避...
前情提要 简单地聊聊范本驱动表单(Template Driven Fomrs)後,应该会觉得范本变数...