# 基礎 Network 概念與 Nodejs http module範例

##  簡介

本文主要有兩大重點

1. 簡述網路概觀與如何透過 Switch, Router 等等設備讓兩台電腦裝置互通訊息
2. 以 Nodejs 作為範例來讓使用同一個網路內的裝置可以透過 ip:port 的形式傳遞訊息

##  如何讓兩台不同裝置互通訊息

### 1 當兩台裝置距離很近

#### 1.1 使用存取裝置如 usb 或是 CD 從一台裝置複製到一台

![](https://i.imgur.com/AgFn7b2.png)

#### 1.2 透過 Switch ，Switch 會透過網路卡上的 [<b>mac address</b>](https://zh.wikipedia.org/zh-tw/MAC%E5%9C%B0%E5%9D%80) 來互相通訊

![](https://i.imgur.com/1yhiw5W.png)

### 2 當兩台裝置距離很遠

#### 2.1 透過 Router, Router 會給予 IP 讓每個電腦可以透過 IP 與 PORT 來彼此通訊

![](https://i.imgur.com/CJMbPi4.png)

### 3 網路IP的配置

目前實際的網路連接其實是透過[海底電纜](https://www.nytimes.com/interactive/2019/03/10/technology/internet-cables-oceans.html)在做連結

真實的網路IP 主要會是透過網路服務提供商來做配置給 Router

![](https://i.imgur.com/wDg3IKZ.png)

其中 127.0.0.1 是一個特殊的 ip 又稱為 look back ip 或是 localhost

當在瀏覽器打入這個 ip 時，瀏覽器會自動導入內部 ip 查訊 PORT

![](https://i.imgur.com/q0x3KYF.png)

### 4 Nodejs 實際範例
以下是一個運行在 interface 為 192.168.211.144  且提供 PORT 為 4080 的服務器
```typescript
import * as http from 'http';

const port = 4080;
const hostname  = "192.168.211.144";
const server = http.createServer((req, res) => {
  const data: Record<string, string> = { message: 'Hi there' };
  res.setHeader('Content-Type', 'application/json');
  res.setHeader('Connection', 'close');
  res.statusCode = 200;
  res.end(JSON.stringify(data));
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}`);
})

```
如果運行 
```shell
ts-node app.ts
```
則可以使用同一個 interface 的裝置上使用 http://192.168.211.144:4080 讀取到這個服務

### 5 參考資料

[^1]: [mac address](https://zh.wikipedia.org/zh-tw/MAC%E5%9C%B0%E5%9D%80)

[^2]: [world cable map](https://www.nytimes.com/interactive/2019/03/10/technology/internet-cables-oceans.html)
