疾风式全栈(10)-网络与Web服务器(草稿预览)
之前一直是在看浏览器和页面,现在有了node和jdk了,就让我们来开始看一些服务器方面的内容吧.
什么是服务器呢,其实也是一台电脑,只不过用的人多了,就成了服务器了.
一般我们的电脑都是一个人用,所以叫PC,个人电脑,即使借给别人,同一时间也只有一个人用.但是现在的电脑性能强大,一个人用可能很多资源被浪费,所以可以被共享出来,让大家都可以同时用.这就是服务器.
要共享计算资源,首先要解决连接的问题.就像我们用的电脑,也要把显示器,键盘,鼠标和主机连接起来.我们也可以在一个主机上连接多套监视器和键鼠,实现多人同时使用.不过更常用的方法还是通过网络连接.
关于连接有一门的专门的学问,就是通信.不过我们可以简单的看,不管是怎么连接,首先要有连接的媒介,相当于我们在电脑中见到的硬件.古有烽火狼烟,信鸽传书,今有有线无线,光纤物流.呵呵,物流算通信吗,当然可以写封信,快递过去了.不过我们在计算机世界接触的通信,都还是通过电磁波传输,可以使用铜缆作为有线的介质,也可以使用天线实现无线收发,光波通信也多数是有线的,只不过不是铜线而是光纤.
嗯,网络上的传输媒介我们不多说了,看看电脑上对应的方面吧.其实也简单,无非是有线的拉根网线,无线的找到信号.所以在电脑上都会有网线的插口或者天线.这是联网的基础设施.
之后就是网卡了,网络的信息和电脑的信息要实现双向流动,这种收发的工作要由网卡来承担.现在的电脑一般都在主板上集成了网卡,主要就是一块芯片.也可以购买独立的网卡,这样一个电脑上可以安装多个网卡.
这些是网络的硬件层,也就是最低的一层,是基础.往上的各层其实都可以统称为软件,但是因为网络是开放的,要考虑的问题较多,所以人们把网络的软件部分划分为几个层次.大家应该多少都听过一点OSI的七层协议和TCP/IP协议栈.协议就是对软件的一种规范,或者说就是对网络软件的需求说明,不管是哪里的网络软件,要想和其他人通信,就要采用能够互相理解的协议.就像编程语言的语法规范一样,是所有参与者都要遵守的游戏规则.
我们不讲那么复杂和专业,希望帮助大家简单的理解.硬件层(称为物理层)之上被称为数据链路层,处理网卡和网卡之间的通信,每个网卡都有自己的硬件地址(也叫MAC地址),收发信息要带上自己和对方的硬件地址.这一层还有一些关于信息格式和收发时机之类的内容,而且我们平时所见到的都还只是Ethernet的链路层,也有其他形式的链路层,感兴趣的可以自己搜索学习.
链路层之上是网络层,也称为IP层,因为IP已经称为互联网的事实标准,网络的代名词.IP是网卡的软件地址,是在全球范围内统一编址和分配的.在网络上要与某台电脑通信,就要知道他的网卡的IP地址.也就是说,没有分配到IP地址,是无法和IP网络上的其他电脑通信的.所以IP地址成为了一种资源.现在常用的IPv4,使用32位的地址,随着时间显得不够用了,所以升级出了IPv6,使用128位的地址,感觉应该是能用上几十年了.
计算机之间现在可以通信了,但是由于现在的电脑都是多进程的,我们自己的软件要想通信,还需要有一个区分的标志.这就是传输层的端口号.在这里我们的软件和网络实现对接,这部分内容经常被称为socket.
IP层和其下都是操作系统负责管理的,而从传输层往上,就是软件管理的了.
我们可以自己通过端口来实现通信,这也是软件通信的基础.但是现在更多的场合我们会使用HTTP协议通信.实现HTTP的软件,一方面是浏览器,另一端就是web服务器了.当然其实都是一些软件,所以在代码里直接发送和接收HTTP请求也可以.
浏览器我们之前接触了,以后可能还要深入了解.关于web服务器,流行的主要是Apache和nginx. tomcat也可以做这个工作,不过不如这两者专业.
如果我们只是放一些静态的页面,html,css和js,那么只要把文件放在服务器软件指定的文件夹下,运行服务器软件,绑定到电脑能访问的IP地址,就可以通过IP访问网站了.不过我们一般都会使用文字形式的域名,这也是一种资源,需要申请.申请之后绑定到我们的IP,访问时,浏览器和DNS服务器会配合把域名转成对应的IP地址.
而如果我们想通过HTTP提供一些动态的数据,就需要自己写代码了.这时我们多数会采用一些现成的技术框架,减少自己的工作量.在java里现在常用spring(带MVC),js里框架更新较快,express仍然很流行,但是koa2也很火起来了.