iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

一個月的後端學習之旅系列 第 27

【DAY27】 IP、DNS、Port、Request and Response

  • 分享至 

  • xImage
  •  

網路架構基本 名詞解釋

IP 位址

IP Address,全稱 Internet Protocol Address,又譯為網際網路協定位址,是網際協定中用於標識傳送或接收資料裝置的一串數字。

相當於每個在網路上的電腦的地址

常見的 IP 位址分為IPv4IPv6兩大類,IP 位址由一串數字組成

IPv4 為 32 位元長,通常書寫時以四組十進位數字組成,並以點分隔,如:172.16.254.1

IPv4 每 8 個 digit 都會被轉換為 0 到 255 之間的整數,因此,IPv4 通常是 168.1.7.0 而不是 10101000.00000001.00000111.00000000,用前者更容易讓人記憶

根據 IPv4 地址的格式,全世界有多少個不同的設備可以同時上網?

32bits 可以製作出 2^32 個不同的 IP 地址, 2^32=4294967296, ,約 43 億

但是,這個世界上大約有 72 億人,且每個人可能擁有超過 1 個與網路連接的設備,所以用 IPv4 地址的格式可能會有一天不夠用

因此,IPv6 於 1990 年代引入,IPv6 使用128 位元,將確保地球上的每一個人、裝置、每一塊岩石和沙子都能夠擁有一個 IPv6 地址

IPv6 通常書寫時以八組十六進位數字組成,以冒號分割,如:2001:db8:0:1234:0:567:8:1

DNS

Domain Name System,是網際網路的一項服務

它作為將域名 Domain Name 和 IP 位址相互對映的一個分散式資料庫,能夠使人更方便地存取網際網路

DNS 旨在讓人們記住域名,而不是無意義的數字。 例如,記住www.youtube.com 比記住168.112.0.12更容易

DNS 系統運作方式:

如果要去 youtube.com(Domain Name),DNS 會自動把它轉成 IP Address,再把 HTTP Request 寄出

Port

伺服器中的 port 是網路通訊連接時,邏輯上的端點 endpoint,用於在伺服器和客戶端之間交換信息,每個 port 被分配一個唯一的數字來單獨識別它們

一個伺服器可以同時提供多種服務,每個服務有相對應的 port,客戶端可以根據需求,透過連結到伺服器上不同的 port 來與伺服器互動

一些最常用的端口及其相關的網絡協議是:

Port 號碼 用途
20, 21 文件傳輸協議 File Transfer Protocol (FTP). FTP is for transferring files between a client and a server.
22 網路資訊交換、連接協議 Secure Shell (SSH). SSH is one of many protocols that create secure network connections.
25 郵件傳輸協議 Simple Mail Transfer Protocol (SMTP). SMTP is used for email.
80 Web 傳輸協議 Hypertext Transfer Protocol (HTTP).
443 HTTP Secure (HTTPS). All HTTPS web traffic goes to port 443.
3389 遠端控制 Remote Desktop Protocol (RDP). RDP enables users to remotely connect to their desktop computers from another device.

例如:Google 伺服器是https://www.google.com ,我們希望發出HTTPs Request,則可以對著https://www.google.com:443 發出請求,即可連線到Google伺服器上處理HTTPs請求的port

因為沒有必要顯示,所以網址後面的:443 通常在網頁瀏覽器上是看不到的

另一方面,Google 伺服器有著 24 小時不停止運作的腳本語言,在處理任何來自 port 443 的請求

腳本的 Pseudocode 如下:

app.listen(20, () => { return a file to client}) //處理FTP請求
app.listen(25, () => { return an email to client}) //處理SMTP請求
app.listen(443, () => { return a webpage to client}) // 處理HTTPs請求

localhost:3000

在電腦網絡中,localhost 意為「本地主機」,是給迴路網絡接口 loopback 的一個標準主機名,相對應的 IP 位址為 127.0.0.1(IPv4)

在 DNS 中,localhost 這個 domain name 會被換成 127.0.0.1

我們可以在自己的電腦上面架設並且運行伺服器,當我們要使用同一台電腦連結到在自己的電腦上面伺服器,可以透過寄送請求到 localhost 到自己的電腦上,這就是迴路網絡接口 loopback

通常我們在本機上的網頁伺服器,都是使用 port 3000 或是 8080(也可以設定任何 1000 到 9999 內的數字,但不可以設定到常用的 port 號碼)

HTTP Request and Response Header

HTTP Request 以及 Response 的基本規定格式如下:

  • Request-Line(特別說要的東西是甚麼) for HTTP Request, Status-Line(可不可以有請求的東西) for HTTP Response
  • Header 存取其他內容,例如:編碼 encoding、length
  • An empty line indicating the end of the header fields 如果有空行,代表已結束
  • Optionally a message section 可以選擇使用與否的訊息區

HTTP 協議中定義 client 跟 server 要請求內容時,有 4 種請求方式:

  1. GET Request - 請求(要)內容
  2. POST Request - 給 server 資料
  3. PUT Request - server 更新資料
  4. DELETE Request - server 刪除資料

一個基礎的 Get Request 會是:

<!--- GET -> HTTP verb(可以是GET, POST, PUT, DELETE) --->
<!--- HTTP/1.1 -> 使用 HTTP 1.1 的協議 -->
GET /index.html HTTP/1.1

<!--- header 的部分,HOST -> 要找的server是誰(URL) -->
HOST: Phoebe.edu

<!--- HTTP內容到這邊停止 -->
<BLANK LINE>

一個基礎的 Response 會是:

<!--- 如果 server 同意存取東西 status code -> 200 OK --->
HTTP/1.1 200 OK

<!--- header 的部分,Content-Length -> 空格之後,網頁長度有多長 --->
Content-Length: 1555
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html>
<html>
<body>
...

如果網頁交出表格資料,且使用GET request的話,會是:

<!--- 資料會放在網址後面 --->
GET /index.html?name=Phoebe&age=23 HTTP/1.1
HOST: Phoebe.edu
<BLANK LINE>

Post Request內部有表格資料的話,會是:

POST /index.html HTTP/1.1

<!--- header,資料會接在header空格後 --->
HOST: Phoebe.edu
<!--- Content-Type 指下面的訊息是會被隱藏起來 --->
Content-Type: application/x-www-form-urlencode
Content-Length: 33

field1=value&field2=value2

帶有cookie設定的 request:

GET /index.html HTTP/1.1

<!--- header,設定cookie --->
HOST: Phoebe.edu
SET-COOKIES: session_id = adsfklasdklf
<BLANK LINE>

帶有cookie設定的 response:

HTTP/1.1 200 OK

<!--- header,設定cookie --->
Content-Length: 200
Content-Type: text/html
SET-COOKIES: session_id = adsfklasdklfjaslke;fja;sd

<!DOCTYPE html>

下一篇文章學習SQL介紹、表格設定。


上一篇
【DAY26】 modules(二)
下一篇
【DAY28】SQL介紹、表格設定
系列文
一個月的後端學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言