计算机网络概述(非专业版) | 青训营笔记

136 阅读4分钟

前端训练营 Day 1

注意:本文对计算机网络进行系统讲解,仅作为初学者的简单了解。我计划写一篇系统性的计算机网络学习笔记(画饼ing)

网络的组成

  如今的互联网硬件是由节点设备与网络核心组成的,比如每一个接入网络的计算机、服务器、物联网设备、交换机、路由器等,而网络核心是由物理传输介质等组成的。

  网络的软件部分也是不可忽略的,比如各种协议(Protocol),协议规定了网络中的两个节点之间如何通信,如双方发送数据的格式、如何建立拦截、如何应对突发情况等

网络分层

  根据OSI(Open System Interconnection)模型,计算机网络由下到上可分为物理层、数据链路层、物理层、传输层、会话层、表示层与应用层,或者将“上三层”都归为应用层。

  分层是为了不同部分更好地进行数据传输。比如送快递的过程中投递员不必关心快递的内容,只需关心目的地;快递车司机只需关注去往哪个物流中心等。计算机网络中每一层都完成了一部分功能。

  对于前后端开发者,我们经常打交道的是应用层(Application Layer)。在应用层上,常见的通信协议包括 HTTP、FTP、SMTP、POP3等。

网络应用

HTTP

  超文本传输协议(HyperText Transfer Protocol,HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议。HTTP具有无连接、无转台的特点,这使其具有较简单的结构与较高的效率,但也决定了其难以处理一些复杂的业务。

  在 HTTP协议下,双方通过交换 HTTP 报文进行非对等通信。客户端发送请求报文,格式如下:

请求方法 URL 请求协议/版本(请求行)

请求首部字段名: 值...

通用首部字段名: 值...

实体首部字段名: 值...

其他...

请求数据...

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
# 这是注释
# 由于 GET 请求不可以携带请求数据(请求体),此处无空行与请求体

  服务端收到请求报文后,向客户端返回响应报文,其格式如下:

响应协议/版本 状态码 原因短语

响应首部字段名: 值...

通用首部字段名: 值...

实体首部字段名: 值...

其他...

响应数据...

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

<html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
    </body>
</html>

WebSocket

  HTTP 无连接、无状态的半双工通信虽然轻快,但在实际生产中我们需要双方对等的全双工通信,WebSocket 应运而生。

  建立 WebSocket 时,客户端向服务端发送一个带有“Connection: Upgrade” 和 “Upgrade: websocket”请求头的 HTTP 请求,服务端通过返回状态码 101 和对应的响应头,完成升级通信协议为 WebSocket 的协商,此后双方进行对等的全双工通信。

网络安全

  在早期的网络上,信息是以明文进行传输的,传输过程中信息可能会被泄露或篡改,因此我们需要对某些保密信息进行加密传输,对某些重要信息进行签名。

HTTPS

  HTTPS便是加密进行HTTP通信的一种形式。为了快速完成大量信息传递,我们对 HTTP 报文进行简单的对称加密(加密所需密钥与解密所需密钥相同),而这个密钥我们进行非对称加密,然后进行传输。非对称加密的特点似的双方可通过部分数据共同协商出一对密钥(公钥与私钥),其中发送方使用公钥进行加密,接收方使用私钥进行解密。

  但是,在双方没有事先定好的秘密时,不可能在网络上建立安全的连接。因此有了证书签发机构。这些机构的证书会集成到操作系统和浏览器中,通信双方可通过这些证书完成非对称加密密钥的协商。

数字签名

  与非对称加密相反,我们将 重要数据哈希后的结果使用私钥进行加密,将公钥、加密后的哈希与原始数据发送给接收方,接收方可使用公钥获得原始哈希值,与原始数据的哈希值进行对比以判断数据是否被篡改。因为在没有私钥的情况下,没有人可以生成加密后的哈希值,

本文若有不足之处,欢迎纠正(≧^.^≦)喵~

我的其他笔记,可在掘金或 Github( github.com/DoudiNCer/I… )阅读