# TCP/IP 學習筆記
電三甲 111010141 胡佳慧
## 手動設定網路所需的資訊
1. IP
2. Network Mask 網路遮罩
+ 判斷來源端與目的端是否為同網路
+ 同網路直接傳送
+ 不同網路需透過路由器(Router)傳送
3. Default Router IP
>設定好上列三項 $\to$ ping8.8.8.8 成功
4. DNS Server IP
## 0.0.0.0
1. 電腦剛開機完全沒有任何IP時,代表尚未取得IP
2. 任意IP
3. 0.0.0.0/0
+ Any source $\to$ 防火牆
## 封包傳送
+ directly直接傳送 $\to$ 目的地位址寫的是目的端網路卡卡號
+ forward轉送 $\to$ 目的地位址寫的是路由器網路卡卡號
## ARP位址解析協定(Address Resolution Protocol)
+ request : broadcase $\to$ 發廣播封包(廣播IP 255.255.255.255)到整個網路上
+ reply : unicase $\to$ 被指定的IP回應
## NAT(Network Address Translation)網路位址轉譯
### SNAT(Source NAT)
+ 最簡單的轉換方式
+ 缺點 : 只適用於小規模
+ NAPT(Network Address Port Translation)
+ 不只轉換Address,也轉換Port(連接埠號)
+ 目前正在使用的方法,口語化縮寫NAT
+ 此技術歸類在SNAT
### DNAT(Destination NAT)=port forwarding
+ 只轉換Address,不轉換Port(連接埠號)
## 網際網路上正常使用時會用到的三種位址
1. Mac Address 實體位址(網路卡卡號)
2. IP Address (又稱邏輯位址、通訊位址)
3. 埠號
## Loop Back Test(電腦不能運作時使用)
1. ping 127.0.0.1 $\to$ 確認作業系統的TCP/IP協定是否正常運作
2. ipconfig $\to$ 查詢自己的IP、內定路由器位址
+ route print $\to$ 顯示機器上所有介面的卡號,也可查詢內定路由器位址
3. ping自己的IP位址 $\to$ 測試自己的網路卡
4. ping內定路由器的位址 $\to$ 確認網路卡、網路線是否正常
5. ping網際網路上知名的伺服器IP $\to$ 確認封包傳送是否正常
+ ex. 8.8.8.8
6. ping DNS $\to$ 確認DNS設定
+ ex. tw.yahoo.com
## 不同作業系統ping自己的IP比較
| |Windows|Linux|
|:--:|:-----:|:---:|
|byte|32|64|
|ttl|255|128|
## RTT(Round Trip Time)
+ RTT = 送去目的端的時間 + 處理時間 + 送回傳送端的時間
+ 數字越大代表傳送端與目的端距離越遠
+ 平均每一秒量測一次
+ 穩定的網路各數值間變化量不大
## DHCP通訊協定(自動)
+ 採用客戶端伺服器端的模型(一般電腦為DHCP客戶端)
+ DHCP Server 提供IP,Network Mask,Default Router IP,DNS Server IP等必要資訊進行設定
+ DORA
1. Discover $\to$ 發現DHCP Server,發送一個廣播去詢問整個網路誰可以提供相關資訊
2. Offer $\to$ DHCP Server收到廣播後,會回傳資料
+ 誰先提供就用誰的
3. Request $\to$ 為Broadcase(廣播)封包,告知所有人選擇用誰的資料
4. Ack確認訊息 $\to$ 被選擇者確認訊息
+ 建構在UDP通訊協定上
> UDP協定
>1. 快速、不講求資料安全性和完整性(傳送失敗就重傳)
>2. 早期的通訊協定,沒有安全機制,不會進行雙方認證
>___
+ DHCP uses UDP port 67 on the server side and UDP port 68 on the client side.
+ 特殊功能 : 大規模電腦自動安裝
## DNS(Domain Name System)
+ 為了解決IP記憶不容易
+ DNS轉換
+ 正向解析 : Domain Name轉換成IP
+ 反向解析 : IP轉換成Domain Name
+ 使用UDP通訊協定, use port 53
+ 本地端電腦裡叫hosts的資料夾
+ 紀錄IP和DNS的對照
+ 早期使用
+ 查詢結果放在local cache裡
+ 由ICANN負責統籌
### DNS環境
+ 客戶端(Client) : 提出名稱解析請求,稱為Resolver
伺服端(Server) : 接受要求的一方
+ DNS為全球性的分散式資料庫
+ 每個Domain至少有一台名稱伺服器
+ Zone : DNS伺服器的管理區域
### 查詢DNS Server
1. 查詢hosts裡有無對照表
2. 查詢loccal cache裡有無對照表
3. 最後都查不到再到DNS Server查
```c
ipconfig/displaydns //查詢
ipconfig/flushdns //clear DNS cache
```
## DDNS(動態DNS)
+ 每次上網得到的IP不一樣,但希望能有固定的對應名稱
+ 應用於家庭或小公司
## FQDN完整網域名稱(Fully Qualified Domain Name)
+ 最後面還有一個 • (代表root)
+ 一階層方式組成,階層間以小數點區隔
+ 最多五個階層
+ 每一級名稱至少2個字元,最多不超過63個字元
+ 分為3個部分
1. 主機名稱Host Name
2. 網域名稱Domain Name
3. 根網域Root Domain
+ 以 • 表示,實際上是個空標記
+ 頂級網域TLD(Top-Level Domain):根網域的下面一層
## IPv4
![未命名的圖片](https://hackmd.io/_uploads/HJlsop8u6.png)
++真正的封包是由連續的位元依序排列在一起的++
### IHL
+ IPv4標頭長度(header length)通常為20Bytes,>20Bytes時會有Options
### TOS(Type of Service)服務類型
![未命名的圖片](https://hackmd.io/_uploads/BkD2S1Ku6.png)
+ Precedence 優先權
+ 有8種不同的優先權值
+ 7(111) $\to$ 最高優先權;控制傳送
+ D延遲(Delay)
+ 0 $\to$ 一般延遲
+ 1 $\to$ 低延遲
+ T傳送流通量(Throoughput)
+ 0 $\to$ 一般傳送量
+ 1 $\to$ 高傳送量
+ R可靠度(Reliability)
+ 0 $\to$ 低可靠度傳送
+ 1 $\to$ 高可靠度傳送
+ C路徑成本(Cost)
+ 0 $\to$ 一般成本路徑
+ 1 $\to$ 最小成本路徑
+ 0
+ 最後一個位元,未做定義
### TL封包總長度(Total Length)
+ TL =IP Header Length + IP Payload Length
+ 以byte為單位
+ 範圍為0~65535(2^16−1)
### ID識別代碼
+ 由發送端對每個IP資料封包進行唯一辨識代碼的設定,以便接收端執行封包辨認工作
+ 傳輸過程中因為MTU的限制,須將封包切割成幾個分片(Fragments)再傳輸,各分片需記錄原封包的辨識代碼,以便接收端進行封包重組
>### MTU(Maximum Transmission Unit)
>+ MTU = IP Header + IP Payload
>+ ethernet的MTU為1500bytes
>
> IP標準的MTU為65535bytes
>+ Path MTU
> + IPv6的機制
> + 在傳送封包前,會先了解傳送端到目的端之間最小的MTU,並將最小的MTU設為Path MTU
>### 切割&重組(Fragmentating&Assembly)需要的三個資料欄位
>1. Identifier
>2. Flags
>3. Fragment Offset
>+ IPv4可在網路的過程當中將大的封包切割成小的封包
>
> IPv6只能允許在來源端做切割,只能允許在接收端做重組
### Flags 旗幟識別
+ 3byte
+ Flags = 0 + DF + MF
+ Don't Fragment(DF)
More Fragment(MF)
### TTL存活時間(Time to Live)
+ 避免網路發生問題時占用資源
+ IPv4稱TTL,IPv6稱hop count
+ 不同作業系統TTL的初始值會不一樣
### Protocol 網路協定
+ 指定下一個欄位或標頭
1. TCP $\to$ 6
2. UDP $\to$ 17 or 0x11
3. ICMP $\to$ 1
### HC標頭檢查碼(Header Checksum)
+ protect IP Header,若有錯誤發生會告知
+ 僅對IP標頭的部分執行運算,不含資料部分
+ 運算方法 : 1補數演算法(1's Compllement Algorithm)
### SA來源端IP位址(Source IP Address)
+ 來源端主機的IP位址
### DA目的端IP位址(Destination IP Address)
+ 目的端主機的IP位址
>+ ether $\to$ dst在前,src在後
>+ IP $\to$ src在前,dst在後
### OPT選擇項(options)
+ 用作測試與除錯
1. Source Route來源端路徑
+ Loose Source Routing 寬鬆源路行徑
+ 對封包行經的每一個路徑進行規範
+ 相鄰路徑節點間不得有其他節點存在
+ 路徑次序不得更改
+ Strict Source Routing 嚴謹源路行徑\
+ 允許相鄰路徑節點間有其他節點
+ 要點式行進路徑,並非提供完備的路徑
+ 未描述的路徑由各路徑節點自行決定
2. Route Record路徑紀錄
3. Time Stamp時間標記
4. Security Label安全標誌
```C
//how to know the immediate routers between source and destination: traceroute , tracert, pathping
traceroute //linux
tracert //windows
```
```C
pathping //了解從src到dst會經過哪些 router
```
### PAD填充(Padding)
+ 配合選擇項使用
+ 使IP標頭總長度為32bits的整倍數
+ 填補資料通常以0作為處理
### IPv4位址不夠 (address insufficient)解決方法
+ NAT
+ IPv6
## IPv4 與 IPv6
+ IPv4 32bits
+ IPv5 存在於實驗室,並未實際應用
+ IPv6 (IPNg ; IP Next Generation ) 128bits $\to$ 標頭40bytes
### IPv4換到IPv6的原因
1. 位址不夠 address insufficient
2. 安全性 security
3. 效能 performance
### 資料傳送方式
||IPv4|IPv6|
|:-:|:---:|:--:|
|1|Uicast|Uicast|
|2|Multicas|Multicas|
|3|Boadcast|Anycast |
## IPv6
+ 128位元,分成8個區塊,每個區塊16個位元,以16進位法表示,區塊間以「:」區隔
「::」
### 傳輸型態
1. Unicast單點傳播(一對一)
2. Multicast多點群波(一對多)
3. Anycast任點傳播(一對全部) $\to$ IPv6以多點群播位址架構來取代廣播傳播(Broadcase)
>### 通訊方式
>1. Unicast 一對一 $\to$ 彼此都要有自己的識別碼
>2. Multicast一對多
>3. Broadcase一對全部(廣播)
![螢幕擷取畫面 2024-01-06 204804](https://hackmd.io/_uploads/S1dXhaIua.png)
### Traffic Class訊務等級
+ 如IPv4標頭的TOS、DS欄位
+ 前6個位元稱為DSCP(Differentiated Service Codepoint)
後2個位元作為ECN壅塞明確通知之用
>### ECN(Explicit Congestion Notification)
>+ 網路壅塞時,對來源端進行壅塞通知
>+ 搭配ack從目的端回傳資料給傳送端
### Flow Label流量標籤
+ IPv6新增的欄位 $\to$ 用以對某些特定封包進行標示,配合相關協定進行封包分類傳送
+ 相同封包群資料流必須擁有相同的流量標籤、來源端IPv6位址與目的端IPv6位址
### Payload Length 承載資料長度
+ 與IPv4的TotalLength位能相同,表示封包長度
+ 同樣佔16位元
+ 同樣以位元組為單位
+ 只計算IPv6標頭後資料的長度
### Next Header 下一個標頭
+ 如Pv4的PROT欄位
+ 可以是IPv4 PROT所列的項目,也可以是IPv6新增延伸標頭(Extension Header)項目
### Hop Limit最大節點數
+ 取代IPv4的TTL欄位
+ 最大節點數欄位以經過節點數為單位
+ 數值為0,封包便會被丟棄
------------------------------------------
>### 佇列管理機制(queue management)
>+ 當緩存快慢了或滿了時,要怎麼丟棄封包
>1. Drop Tail $\to$ 當佇列滿了新進來的都丟掉
>2. Drop Front $\to$ 當佇列滿了,新的封包進來時,把第一個丟掉,新的加進去
>3. Random Drop
> + 佇列滿了以後,隨機挑一個丟棄
> + 為passive mode
>### QoS(Quality of Service)
>1. Integrated Service(IS)整合性服務
> + 較嚴謹,為參數型服務,會保留所需資源
> + 優:能滿足每種應用的需求,缺:維護與建立成本高,可擴充性(scalability)差
>2. Differentiated Service(DS)
> + 較寬鬆
>+ IPv6提供的QoS較IPv4多
-------------------------------------------
## FTP (File Transfer Protocol)
+ 優:傳檔案時,若中途斷線,重新連接後可繼續傳送,不用重傳
+ 主要用來傳送大型檔案
+ 早期的通訊協定,無加密
## 網際網路上所用到的位址
1. 實體位址pyhsical address(網路卡卡號)
2. Logical address
3. Port number
+ Host address(http,位於應用層) $\to$ 用於多網站架構下,指名連到哪個網站
## DoS(Denial of Service)阻斷式攻擊
+ 讓機器不能服務新客戶
1. 消耗性能
2. 消耗記憶體
3. 消耗儲存空間
4. 消耗網路資源
## 資訊安全的目標CIA
1. 機密性Confidentiality
2. 完整性Integrity
3. 可用性Availability
## ZT零信任架構(Zero Trust)
+ AAA $\to$ Authentication 認證(to prove identity), Authorization 授權(to give permission) ,and Accounting 稽查(to log an audit trail)
+ MFA(Multi-factor authentication) $\to$ 透過簡訊等,增加額外的驗證