---
# System prepended metadata

title: Computer Networking

---

# Computer Networking

How computers(hosts) communicate with each other. 

## HTTP 
HyperText Transfer Protocol

应用层(Application Layers)协议，基于Client - Server Model；

当你在浏览器输入一个网址时，实际上是向服务器发送了一个 HTTP 请求，服务器会响应并返回相关的内容，通常是 HTML 页面。

## HTTP Version 1.0

HTTP初级版本。它**每次创建连接只能处理一个请求**，处理完后就关闭连接，这意味着为每个 Web 元素（如图片、CSS、JS等）都需要重新建立一个连接，效率较低。
* 每个新连接都需要一个三次握手的过程来建立

## HTTP Version 1.1

HTTP Version 1.1 相较于 1.0，1.1 带来了许多改进。它支持持久连接(Persistent Connection)，可以在同一个连接上处理多个请求/响应，这大大提高了加载速度。

## HTTP Version 2.0

给HTTP进行了彻底的优化，支持多路复用(Multiplexing)，单个连接可以用于同时传输多个请求和响应消息

## grpc

gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment.

g stands for Google. 

RPC: 一个计算机上调用另一计算机上的过程（或函数），就像调用本地过程一样，而不必直接与网络底层细节交互。

作用：
* RPC允许微服务之间以高效、结构化的方式进行通信，每个服务可以使用最合适的语言和技术栈来开发。
* 与传统的HTTP RESTful通信相比，某些RPC协议（如gRPC）使用的是更紧凑、更快速的数据序列化方法（如Protocol Buffers）。

**以Twitter来举例**
1. 服务间通信（Service-to-Service）：
    * 微服务间的通信要求高效、低延迟，因此RPC，特别是像gRPC这样的解决方案，是一个很好的选择。gRPC支持多种语言，可以实现高性能的通信，并支持HTTP/2的特性如多路复用和双向流。
    * 例如，当用户发送一条新的推文时，前端服务可能需要与后台的存储服务、通知服务、时间线服务等进行通信，这些都可以通过gRPC实现。

2. 外部API（对开发者和公众）：
    * 提供RESTful API是有意义的，因为它是开发者熟悉的，并且容易在各种客户端、语言和平台上使用。例如，Twitter为第三方开发者提供的API允许他们创建应用、获取推文或执行其他操作，这些通常是RESTful的。

3. 与前端的通信：
    * 与Web前端（浏览器）的通信通常更适合使用RESTful或GraphQL，因为这些技术与现代Web技术栈（如JavaScript、React、Vue等）更为相容。

## Protobuf (Protocol Buffers)

Google开发的一种数据序列化协议

