# โปรโตคอลเครือข่ายและการวิเคราะห์ ## Network Protocols and Analysis **ผู้จัดทำ:** อรรถพล คงหวาน --- ## Outline 1. บทนำสู่โปรโตคอลเครือข่าย 2. โปรโตคอลชั้นขนส่ง (Transport Layer) 3. โปรโตคอลชั้นเครือข่าย (Network Layer) 4. การตรวจสอบและวิเคราะห์เครือข่าย 5. เครื่องมือวิเคราะห์เครือข่าย 6. สรุปโดยรวม 7. เอกสารอ้างอิง --- # 1. บทนำสู่โปรโตคอลเครือข่าย --- ## 1.1 ความหมายของโปรโตคอลเครือข่าย **โปรโตคอลเครือข่าย (Network Protocol)** คือชุดของกฎเกณฑ์และมาตรฐานที่กำหนดวิธีการสื่อสารระหว่างอุปกรณ์ในเครือข่ายคอมพิวเตอร์ โปรโตคอลกำหนด: - **Data Format** - รูปแบบข้อมูล - **Sequence** - ลำดับการส่งข้อมูล - **Error Handling** - วิธีการตอบสนองต่อข้อผิดพลาด --- ## 1.2 แบบจำลอง OSI และ TCP/IP ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#83a598', 'lineColor': '#ebdbb2', 'secondaryColor': '#98971a', 'tertiaryColor': '#d79921'}}}%% graph TB subgraph OSI["แบบจำลอง OSI"] L7["7: Application"] L6["6: Presentation"] L5["5: Session"] L4["4: Transport"] L3["3: Network"] L2["2: Data Link"] L1["1: Physical"] L7 --> L6 --> L5 --> L4 --> L3 --> L2 --> L1 end ``` --- ## 1.2 แบบจำลอง TCP/IP ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2', 'primaryBorderColor': '#83a598'}}}%% graph TB subgraph TCPIP["แบบจำลอง TCP/IP"] T4["Application Layer"] T3["Transport Layer"] T2["Internet Layer"] T1["Network Access Layer"] T4 --> T3 --> T2 --> T1 end ``` --- ## 1.2 การเปรียบเทียบ OSI กับ TCP/IP | OSI Model | TCP/IP Model | |-----------|--------------| | Application, Presentation, Session | Application Layer | | Transport | Transport Layer | | Network | Internet Layer | | Data Link, Physical | Network Access Layer | --- ## 1.3 ประวัติความเป็นมา - ยุคบุกเบิก ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#cc241d', 'primaryTextColor': '#ebdbb2'}}}%% flowchart LR A1["1969: ARPANET
เครือข่ายแรก"] A2["1974: TCP/IP
ถูกออกแบบ"] A3["1978: IPv4
เริ่มพัฒนา"] A1 --> A2 --> A3 ``` --- ## 1.3 ประวัติความเป็นมา - ยุคมาตรฐาน ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#d79921', 'primaryTextColor': '#282828'}}}%% flowchart LR B1["1981: IPv4
RFC 791"] B2["1983: ARPANET
ใช้ TCP/IP"] B3["1995: IPv6
เริ่มพัฒนา"] B1 --> B2 --> B3 ``` --- ## 1.3 ประวัติความเป็นมา - ยุคปัจจุบัน ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#98971a', 'primaryTextColor': '#282828'}}}%% flowchart LR C1["2004: IPv6
มาตรฐานสมบูรณ์"] C2["2011: IPv4
หมดช่วงที่อยู่"] C3["ปัจจุบัน: Dual Stack
IPv4/IPv6"] C1 --> C2 --> C3 ``` --- # 2. โปรโตคอลชั้นขนส่ง ## Transport Layer Protocols --- ## Outline - โปรโตคอลชั้นขนส่ง * 2.1 โปรโตคอล TCP (Transmission Control Protocol) * 2.2 โปรโตคอล UDP (User Datagram Protocol) * 2.3 การเปรียบเทียบ TCP และ UDP --- ## 2.1 TCP - ความหมายและคุณสมบัติ **TCP (Transmission Control Protocol)** คือโปรโตคอลที่ให้บริการการส่งข้อมูลแบบ **Connection-Oriented** และ **Reliable** คุณสมบัติหลัก: - **Connection-Oriented**: ต้องสร้างการเชื่อมต่อก่อน (3-Way Handshake) - **Reliable Delivery**: รับประกันข้อมูลถึงครบถ้วนและเรียงลำดับถูกต้อง - **Flow Control**: ควบคุมอัตราการส่งข้อมูล - **Congestion Control**: ลดอัตราการส่งเมื่อเครือข่ายหนาแน่น --- ## 2.1.2 โครงสร้างส่วนหัว TCP ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph TCPHeader["TCP Header - 20 ไบต์ขั้นต่ำ"] R1["Source Port 16 บิต | Destination Port 16 บิต"] R2["Sequence Number 32 บิต"] R3["Acknowledgment Number 32 บิต"] R4["Data Offset | Flags | Window Size"] R5["Checksum | Urgent Pointer"] R1 --> R2 --> R3 --> R4 --> R5 end ``` --- ## 2.1.2 ฟิลด์สำคัญใน TCP Header (1) | ฟิลด์ | ขนาด | คำอธิบาย | |-------|------|----------| | Source Port | 16 บิต | หมายเลขพอร์ตต้นทาง (0-65535) | | Destination Port | 16 บิต | หมายเลขพอร์ตปลายทาง (0-65535) | | Sequence Number | 32 บิต | หมายเลขลำดับของไบต์แรก | | Acknowledgment Number | 32 บิต | หมายเลขลำดับไบต์ถัดไปที่คาดว่าจะได้รับ | --- ## 2.1.2 ฟิลด์สำคัญใน TCP Header (2) | ฟิลด์ | ขนาด | คำอธิบาย | |-------|------|----------| | Data Offset | 4 บิต | ความยาวของส่วนหัว | | Flags | 9 บิต | ธง URG, ACK, PSH, RST, SYN, FIN | | Window Size | 16 บิต | ขนาดหน้าต่างรับ (Receive Window) | | Checksum | 16 บิต | ค่าตรวจสอบความถูกต้อง | | Urgent Pointer | 16 บิต | ชี้ไปยังข้อมูลเร่งด่วน | --- ## 2.1.3 Three-Way Handshake ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% sequenceDiagram participant C as Client participant S as Server C->>S: SYN (seq=x) Note right of C: ขั้นที่ 1: ขอสร้างการเชื่อมต่อ S->>C: SYN-ACK (seq=y, ack=x+1) Note left of S: ขั้นที่ 2: ตอบรับและส่ง SYN กลับ C->>S: ACK (seq=x+1, ack=y+1) Note right of C: ขั้นที่ 3: ยืนยัน SYN ``` --- ## 2.1.3 คำอธิบาย Three-Way Handshake 1. **SYN (Synchronize)**: ไคลเอนต์ส่ง SYN พร้อม Initial Sequence Number (ISN) 2. **SYN-ACK**: เซิร์ฟเวอร์ตอบกลับด้วย SYN-ACK ยืนยัน ISN ของไคลเอนต์และส่ง ISN ของตนเอง 3. **ACK (Acknowledge)**: ไคลเอนต์ส่ง ACK ยืนยัน ISN ของเซิร์ฟเวอร์ การเชื่อมต่อพร้อมใช้งาน --- ## 2.1.3 การยุติการเชื่อมต่อ (Four-Way Handshake) ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#cc241d', 'primaryTextColor': '#ebdbb2'}}}%% sequenceDiagram participant C as Client participant S as Server C->>S: FIN (seq=m) S->>C: ACK (ack=m+1) S->>C: FIN (seq=n) C->>S: ACK (ack=n+1) Note over C,S: การเชื่อมต่อถูกปิด ``` --- ## 2.1.4 การควบคุมการไหล (Flow Control) TCP ใช้กลไก **Sliding Window** เพื่อควบคุมอัตราการส่งข้อมูล ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#98971a', 'primaryTextColor': '#282828'}}}%% graph LR subgraph Sender["ผู้ส่ง (Sender)"] S1["ส่งแล้ว
รอ ACK"] S2["ส่งได้
(Window)"] S3["ยังส่งไม่ได้"] end subgraph Receiver["ผู้รับ (Receiver)"] R1["รับแล้ว
ส่ง ACK"] R2["Buffer
ว่าง"] R3["รอข้อมูล"] end S1 --> |"ACK"| R1 S2 --> |"Data"| R2 style S1 fill:#98971a,stroke:#b8bb26,color:#282828 style S2 fill:#d79921,stroke:#fabd2f,color:#282828 style S3 fill:#cc241d,stroke:#fb4934,color:#ebdbb2 style R1 fill:#98971a,stroke:#b8bb26,color:#282828 style R2 fill:#d79921,stroke:#fabd2f,color:#282828 style R3 fill:#458588,stroke:#83a598,color:#ebdbb2 ``` --- ## 2.1.4 สูตรคำนวณ Throughput สูงสุดของ TCP
Throughput
=
Window Size
RTT
**โดยที่:** - **Throughput** = ปริมาณข้อมูลที่ส่งได้ต่อหน่วยเวลา (bits/second) - **Window Size** = ขนาดหน้าต่างรับ (bytes) - **RTT** = Round-Trip Time (seconds) --- ## 2.1.5 Congestion Control - อัลกอริทึม | อัลกอริทึม | คำอธิบาย | |-----------|----------| | **Slow Start** | เพิ่ม cwnd เป็นสองเท่าทุกๆ RTT จนถึง ssthresh | | **Congestion Avoidance** | เพิ่ม cwnd ทีละ 1 MSS ต่อ RTT | | **Fast Retransmit** | ส่งซ้ำเมื่อได้รับ 3 Duplicate ACKs | | **Fast Recovery** | ลด cwnd ลงครึ่งหนึ่งแทนที่จะเริ่มใหม่ | --- ## 2.1.5 Congestion Control - Flowchart ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph CongestionControl["อัลกอริทึมควบคุมความคับคั่ง"] A["เริ่มต้น
cwnd = 1 MSS"] B{"cwnd < ssthresh?"} C["Slow Start
cwnd = cwnd × 2"] D["Congestion Avoidance
cwnd = cwnd + 1"] E{"เกิด Timeout?"} F{"3 Duplicate
ACKs?"} G["ssthresh = cwnd/2
cwnd = 1 MSS"] H["Fast Recovery
ssthresh = cwnd/2
cwnd = ssthresh + 3"] A --> B B -->|ใช่| C B -->|ไม่| D C --> E D --> E E -->|ใช่| G E -->|ไม่| F F -->|ใช่| H F -->|ไม่| B G --> A H --> D end style A fill:#458588,stroke:#83a598,color:#ebdbb2 style B fill:#d79921,stroke:#fabd2f,color:#282828 style C fill:#98971a,stroke:#b8bb26,color:#282828 style D fill:#98971a,stroke:#b8bb26,color:#282828 style E fill:#d79921,stroke:#fabd2f,color:#282828 style F fill:#d79921,stroke:#fabd2f,color:#282828 style G fill:#cc241d,stroke:#fb4934,color:#ebdbb2 style H fill:#d65d0e,stroke:#fe8019,color:#ebdbb2 ``` --- ## 2.1.5 สูตร Congestion Window
cwnd
new
=
cwnd
old
+
MSS
×
MSS
cwnd
old
- **cwnd** = Congestion Window (bytes) - **MSS** = Maximum Segment Size (bytes) --- ## 2.1.6 TCP Socket Programming - Server ```python class TCPServer: def __init__(self, host='127.0.0.1', port=8080): self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM # TCP ) self.socket.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) ``` --- ## 2.1.6 TCP Socket Programming - Client ```python class TCPClient: def __init__(self, server_host='127.0.0.1', server_port=8080): self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) def connect(self): # Three-Way Handshake เกิดขึ้นที่นี่ self.socket.connect((self.server_host, self.server_port)) ``` --- ## 2.2 UDP - ความหมายและคุณสมบัติ **UDP (User Datagram Protocol)** คือโปรโตคอลที่ให้บริการการส่งข้อมูลแบบ **Connectionless** และ **Unreliable** คุณสมบัติหลัก: - **Connectionless**: ไม่ต้องสร้างการเชื่อมต่อก่อน - **No Delivery Guarantee**: ไม่รับประกันว่าข้อมูลจะถึง - **No Ordering**: ไม่รับประกันลำดับของข้อมูล - **Low Overhead**: ส่วนหัวขนาดเล็ก (8 bytes) เร็วกว่า TCP --- ## 2.2.2 โครงสร้างส่วนหัว UDP ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph UDPHeader["UDP Header - 8 ไบต์"] U1["Source Port 16 บิต | Destination Port 16 บิต"] U2["Length 16 บิต | Checksum 16 บิต"] U1 --> U2 end ``` --- ## 2.2.2 ฟิลด์ใน UDP Header | ฟิลด์ | ขนาด | คำอธิบาย | |-------|------|----------| | Source Port | 16 บิต | หมายเลขพอร์ตต้นทาง (optional) | | Destination Port | 16 บิต | หมายเลขพอร์ตปลายทาง | | Length | 16 บิต | ความยาวรวมของ UDP datagram | | Checksum | 16 บิต | ค่าตรวจสอบความถูกต้อง | --- ## 2.2.3 การใช้งาน UDP ที่เหมาะสม UDP เหมาะสำหรับแอปพลิเคชันที่: - ต้องการความเร็วมากกว่าความน่าเชื่อถือ - ทนต่อการสูญหายของข้อมูลบางส่วนได้ - ส่งข้อมูลแบบ real-time - ใช้ multicast หรือ broadcast --- ## 2.2.3 ตัวอย่างแอปพลิเคชันที่ใช้ UDP | แอปพลิเคชัน | เหตุผลที่ใช้ UDP | |-------------|-----------------| | DNS | การสอบถามขนาดเล็ก ต้องการความเร็ว | | DHCP | ไม่ต้องการการเชื่อมต่อ | | VoIP | ส่งเสียงแบบ real-time | | Video Streaming | ยอมรับการสูญเฟรม | | Online Gaming | ต้องการ latency ต่ำ | --- ## 2.2.4 UDP Socket Programming ```python class UDPServer: def __init__(self, host='127.0.0.1', port=9090): # สร้าง socket แบบ UDP (SOCK_DGRAM) self.socket = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) def start(self): self.socket.bind((self.host, self.port)) # UDP ไม่ต้อง accept() เพราะไม่มีการเชื่อมต่อ data, client = self.socket.recvfrom(1024) ``` --- ## 2.3 การเปรียบเทียบ TCP และ UDP (1) | คุณสมบัติ | TCP | UDP | |----------|-----|-----| | **ประเภทการเชื่อมต่อ** | Connection-oriented | Connectionless | | **ความน่าเชื่อถือ** | รับประกันการส่ง | ไม่รับประกัน | | **การเรียงลำดับ** | รับประกันลำดับ | ไม่รับประกัน | | **ขนาดส่วนหัว** | 20-60 bytes | 8 bytes | --- ## 2.3 การเปรียบเทียบ TCP และ UDP (2) | คุณสมบัติ | TCP | UDP | |----------|-----|-----| | **Flow Control** | มี (Sliding Window) | ไม่มี | | **Congestion Control** | มี | ไม่มี | | **ความเร็ว** | ช้ากว่า | เร็วกว่า | | **Broadcast/Multicast** | ไม่รองรับ | รองรับ | --- ## 2.3 การทำงานของ TCP vs UDP ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph LR subgraph TCP_Flow["TCP"] T1["สร้างเชื่อมต่อ"] T2["ส่งข้อมูล"] T3["รอ ACK"] T4["ปิดเชื่อมต่อ"] T1 --> T2 --> T3 --> T4 end subgraph UDP_Flow["UDP"] U1["ส่ง Datagram"] U2["จบ"] U1 --> U2 end ``` --- # 3. โปรโตคอลชั้นเครือข่าย ## Network Layer Protocols --- ## Outline - โปรโตคอลชั้นเครือข่าย * 3.1 โปรโตคอล IPv4 * 3.2 โปรโตคอล IPv6 * 3.3 โปรโตคอล ICMP * 3.4 การเปรียบเทียบ IPv4 และ IPv6 --- ## 3.1 IPv4 - ความหมายและคุณสมบัติ **IPv4 (Internet Protocol version 4)** คือโปรโตคอลหลักในการส่งข้อมูลระดับเครือข่าย (RFC 791, 1981) คุณสมบัติหลัก: - **Connectionless**: ส่งแต่ละแพ็กเก็ตอย่างอิสระ - **Best Effort Delivery**: ไม่รับประกันการส่ง - **32-bit Address**: ประมาณ 4.3 พันล้านที่อยู่ - **Fragmentation Support**: รองรับการแบ่งแพ็กเก็ต --- ## 3.1.2 โครงสร้างส่วนหัว IPv4 ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph IPv4Header["IPv4 Header - 20-60 ไบต์"] I1["Version | IHL | ToS | Total Length"] I2["Identification | Flags | Fragment Offset"] I3["TTL | Protocol | Header Checksum"] I4["Source IP Address 32 บิต"] I5["Destination IP Address 32 บิต"] I1 --> I2 --> I3 --> I4 --> I5 end ``` --- ## 3.1.2 ฟิลด์สำคัญใน IPv4 Header (1) | ฟิลด์ | ขนาด | คำอธิบาย | |-------|------|----------| | Version | 4 บิต | เวอร์ชันของ IP (4) | | IHL | 4 บิต | ความยาวของส่วนหัว | | ToS | 8 บิต | ประเภทบริการ | | Total Length | 16 บิต | ความยาวรวมของแพ็กเก็ต | --- ## 3.1.2 ฟิลด์สำคัญใน IPv4 Header (2) | ฟิลด์ | ขนาด | คำอธิบาย | |-------|------|----------| | TTL | 8 บิต | จำนวน hop สูงสุดก่อนถูกทิ้ง | | Protocol | 8 บิต | 6=TCP, 17=UDP, 1=ICMP | | Header Checksum | 16 บิต | ค่าตรวจสอบความถูกต้อง | | Source IP | 32 บิต | ที่อยู่ IP ต้นทาง | | Destination IP | 32 บิต | ที่อยู่ IP ปลายทาง | --- ## 3.1.3 ความเป็นมาของ Classful Addressing **ระบบ Classful Addressing** ถูกกำหนดขึ้นในปี 1981 ตาม RFC 791 หลักการพื้นฐาน: - ที่อยู่ IPv4 มีขนาด **32 บิต** แบ่งเป็น 4 Octet - แต่ละที่อยู่ประกอบด้วย: **Network Portion** และ **Host Portion** - บิตแรกๆ ของที่อยู่ระบุ Class ของที่อยู่นั้น --- ## 3.1.3 โครงสร้างที่อยู่ IPv4 (32 บิต) ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph LR subgraph IPv4["โครงสร้าง IPv4"] O1["Octet 1 - 8 บิต"] O2["Octet 2 - 8 บิต"] O3["Octet 3 - 8 บิต"] O4["Octet 4 - 8 บิต"] O1 --- O2 --- O3 --- O4 end ``` **ตัวอย่าง:** `192.168.1.100` = `11000000.10101000.00000001.01100100` --- ## 3.1.3 Class A - เครือข่ายขนาดใหญ่มาก ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#cc241d', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph ClassA["Class A"] BP["รูปแบบบิต: 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx"] RG["ช่วง: 1.0.0.0 - 126.255.255.255"] ST["Network: 8 บิต | Host: 24 บิต"] SM["Subnet Mask: 255.0.0.0 (/8)"] end ``` --- ## 3.1.3 Class A - คุณสมบัติ | คุณสมบัติ | ค่า | |----------|-----| | **บิตแรก** | 0 (ระบุว่าเป็น Class A) | | **ช่วง Octet แรก** | 1-126 (0 และ 127 สงวนไว้) | | **Default Subnet Mask** | 255.0.0.0 (/8) | | **จำนวน Network** | 126 | | **จำนวน Host ต่อ Network** | 16,777,214 | | **ผู้ใช้งาน** | รัฐบาล, องค์กรขนาดใหญ่มาก | --- ## 3.1.3 Class A - สูตรคำนวณจำนวน Host
จำนวน Host
=
2
24
-
2
=
16,777,214
- **2²⁴** = จำนวน Host ID ที่เป็นไปได้ทั้งหมด (24 บิต) - **-2** = หักที่อยู่ Network และ Broadcast --- ## 3.1.3 Class A - ตัวอย่างที่อยู่ | ที่อยู่ IP | Network ID | Host ID | ประเภท | |-----------|------------|---------|--------| | 10.0.0.0 | 10 | 0.0.0 | Network Address | | 10.0.0.1 | 10 | 0.0.1 | Host Address แรก | | 10.255.255.254 | 10 | 255.255.254 | Host Address สุดท้าย | | 10.255.255.255 | 10 | 255.255.255 | Broadcast Address | | 8.8.8.8 | 8 | 8.8.8 | Google DNS | --- ## 3.1.3 Class B - เครือข่ายขนาดกลาง ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#d79921', 'primaryTextColor': '#282828'}}}%% graph TB subgraph ClassB["Class B"] BP["รูปแบบบิต: 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx"] RG["ช่วง: 128.0.0.0 - 191.255.255.255"] ST["Network: 16 บิต | Host: 16 บิต"] SM["Subnet Mask: 255.255.0.0 (/16)"] end ``` --- ## 3.1.3 Class B - คุณสมบัติ | คุณสมบัติ | ค่า | |----------|-----| | **2 บิตแรก** | 10 (ระบุว่าเป็น Class B) | | **ช่วง Octet แรก** | 128-191 | | **Default Subnet Mask** | 255.255.0.0 (/16) | | **จำนวน Network** | 16,384 | | **จำนวน Host ต่อ Network** | 65,534 | | **ผู้ใช้งาน** | มหาวิทยาลัย, บริษัทขนาดใหญ่ | --- ## 3.1.3 Class B - สูตรคำนวณ **จำนวน Network:**
2
14
=
16,384
**จำนวน Host:**
2
16
-
2
=
65,534
--- ## 3.1.3 Class B - ตัวอย่างที่อยู่ | ที่อยู่ IP | Network ID | Host ID | ประเภท | |-----------|------------|---------|--------| | 172.16.0.0 | 172.16 | 0.0 | Network Address (Private) | | 172.16.0.1 | 172.16 | 0.1 | Host Address แรก | | 172.16.255.254 | 172.16 | 255.254 | Host Address สุดท้าย | | 172.16.255.255 | 172.16 | 255.255 | Broadcast Address | --- ## 3.1.3 Class C - เครือข่ายขนาดเล็ก ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#98971a', 'primaryTextColor': '#282828'}}}%% graph TB subgraph ClassC["Class C"] BP["รูปแบบบิต: 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx"] RG["ช่วง: 192.0.0.0 - 223.255.255.255"] ST["Network: 24 บิต | Host: 8 บิต"] SM["Subnet Mask: 255.255.255.0 (/24)"] end ``` --- ## 3.1.3 Class C - คุณสมบัติ | คุณสมบัติ | ค่า | |----------|-----| | **3 บิตแรก** | 110 (ระบุว่าเป็น Class C) | | **ช่วง Octet แรก** | 192-223 | | **Default Subnet Mask** | 255.255.255.0 (/24) | | **จำนวน Network** | 2,097,152 | | **จำนวน Host ต่อ Network** | 254 | | **ผู้ใช้งาน** | SME, สำนักงานขนาดเล็ก | --- ## 3.1.3 Class C - สูตรคำนวณ **จำนวน Network:**
2
21
=
2,097,152
**จำนวน Host:**
2
8
-
2
=
254
--- ## 3.1.3 Class C - ตัวอย่างที่อยู่ | ที่อยู่ IP | Network ID | Host ID | ประเภท | |-----------|------------|---------|--------| | 192.168.1.0 | 192.168.1 | 0 | Network Address | | 192.168.1.1 | 192.168.1 | 1 | Host แรก (มักเป็น Gateway) | | 192.168.1.254 | 192.168.1 | 254 | Host Address สุดท้าย | | 192.168.1.255 | 192.168.1 | 255 | Broadcast Address | --- ## 3.1.3 Class D และ Class E - คลาสพิเศษ ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#b16286', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph ClassD["Class D - Multicast"] D1["1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx"] D2["224.0.0.0 - 239.255.255.255"] D3["ใช้สำหรับ Multicast Groups"] end subgraph ClassE["Class E - Reserved"] E1["1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx"] E2["240.0.0.0 - 255.255.255.255"] E3["สงวนไว้สำหรับการทดลอง"] end ``` --- ## 3.1.3 Class D - Multicast Addresses ที่สำคัญ | ที่อยู่ | ชื่อ | คำอธิบาย | |--------|-----|----------| | 224.0.0.1 | All Hosts | ทุกโฮสต์ใน local network | | 224.0.0.2 | All Routers | ทุกเราเตอร์ใน local network | | 224.0.0.5 | OSPF Routers | เราเตอร์ที่ใช้ OSPF | | 224.0.0.9 | RIPv2 | RIP version 2 | | 224.0.0.251 | mDNS | Multicast DNS | --- ## 3.1.3 ตารางเปรียบเทียบทุก Class | คุณสมบัติ | Class A | Class B | Class C | |----------|---------|---------|---------| | **บิตนำหน้า** | 0 | 10 | 110 | | **Octet แรก** | 1-126 | 128-191 | 192-223 | | **Default Mask** | /8 | /16 | /24 | | **Network bits** | 8 | 16 | 24 | | **Host bits** | 24 | 16 | 8 | | **Hosts/Network** | 16,777,214 | 65,534 | 254 | --- ## 3.1.3 พื้นที่ที่อยู่ IPv4 ทั้งหมด ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph LR A["Class A1-126 - 50%"] B["Class B128-191 - 25%"] C["Class C192-223 - 12.5%"] D["Class D224-239 - 6.25%"] E["Class E240-255 - 6.25%"] A --> B --> C --> D --> E ``` --- ## 3.1.4 ที่อยู่ Private (RFC 1918) ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph Private["Private Address Ranges"] P1["10.0.0.0/8Class A Private16.7 ล้านที่อยู่"] P2["172.16.0.0/12Class B Private1 ล้านที่อยู่"] P3["192.168.0.0/16Class C Private65,536 ที่อยู่"] end ``` --- ## 3.1.4 ที่อยู่พิเศษอื่นๆ | ช่วงที่อยู่ | ชื่อ | คำอธิบาย | |------------|------|----------| | 0.0.0.0/8 | This Network | ระบุเครือข่ายปัจจุบัน | | 127.0.0.0/8 | Loopback | ทดสอบภายในเครื่อง | | 169.254.0.0/16 | Link-Local | APIPA (ไม่มี DHCP) | | 100.64.0.0/10 | CGNAT | Carrier-Grade NAT | | 255.255.255.255 | Broadcast | Limited Broadcast | --- ## 3.1.4 ที่อยู่สำหรับเอกสาร (Documentation) | ช่วงที่อยู่ | ชื่อ | RFC | |------------|------|-----| | 192.0.2.0/24 | TEST-NET-1 | RFC 5737 | | 198.51.100.0/24 | TEST-NET-2 | RFC 5737 | | 203.0.113.0/24 | TEST-NET-3 | RFC 5737 | | 198.18.0.0/15 | Benchmarking | RFC 2544 | ใช้ในเอกสาร ตำราเรียน และตัวอย่างการสอน --- ## 3.1.5 ปัญหาของ Classful Addressing ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#cc241d', 'primaryTextColor': '#ebdbb2'}}}%% graph TB P1["⚠️ สิ้นเปลืองที่อยู่Class A มี 16.7 ล้าน Host"] P2["⚠️ ไม่ยืดหยุ่นขนาดเครือข่ายคงที่"] P3["⚠️ Class B หมดเร็วเหมาะกับองค์กรส่วนใหญ่"] P4["⚠️ Routing Table ใหญ่ไม่มี aggregation"] ``` --- ## 3.1.5 ตัวอย่างความสิ้นเปลือง องค์กรที่มี 300 เครื่อง: - ต้องขอ **Class B** (65,534 hosts) เพราะ Class C (254) ไม่พอ - **สูญเสียไป:** 65,234 ที่อยู่ (99.5% สูญเปล่า!)
ประสิทธิภาพ
=
300
65,534
×
100
=
0.46
%
--- ## 3.1.5 วิธีแก้ไขปัญหา ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#98971a', 'primaryTextColor': '#282828'}}}%% graph TB S1["✅ CIDR - Classless Inter-Domain Routing"] S2["✅ VLSM - Variable Length Subnet Mask"] S3["✅ NAT - Network Address Translation"] S4["✅ IPv6 - 128-bit Address"] ``` --- ## 3.1.5 Timeline การเปลี่ยนแปลง ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% flowchart LR A["1981Classful"] B["1993CIDR"] C["1996NAT"] D["1998IPv6"] A -->|"ที่อยู่หมด"| B -->|"ยังไม่พอ"| C -->|"แก้ระยะยาว"| D ``` --- ## 3.1.6 CIDR - Classless Inter-Domain Routing **CIDR** เป็นวิธีการกำหนดที่อยู่ IP ที่ยืดหยุ่นกว่าระบบ Class **รูปแบบ:** `IP_Address/prefix_length` **ตัวอย่าง:** `192.168.1.0/24` ไม่ยึดติดกับขนาด Class แบบเดิม สามารถกำหนด prefix ได้ตามต้องการ --- ## 3.1.6 สูตรคำนวณจำนวน Host (CIDR)
จำนวน Host
=
2
(
32
-
prefix
)
-
2
- **32** = จำนวนบิตทั้งหมดของ IPv4 - **prefix** = จำนวนบิตของ network portion - **-2** = หักที่อยู่ network และ broadcast --- ## 3.1.6 ตาราง CIDR ที่ใช้บ่อย | CIDR | Subnet Mask | จำนวน Host | ตัวอย่างการใช้งาน | |------|-------------|------------|------------------| | /8 | 255.0.0.0 | 16,777,214 | ISP ขนาดใหญ่ | | /16 | 255.255.0.0 | 65,534 | องค์กรขนาดใหญ่ | | /24 | 255.255.255.0 | 254 | สำนักงานขนาดเล็ก | | /27 | 255.255.255.224 | 30 | Server room | | /30 | 255.255.255.252 | 2 | Point-to-point link | --- ## 3.1.7 สรุปการแบ่ง Class ที่อยู่ IPv4 **ประเด็นสำคัญที่ต้องจำ:** 1. **การระบุ Class:** ดูจากบิตแรกๆ ของที่อยู่ 2. **Default Subnet Mask:** Class A=/8, B=/16, C=/24 3. **สูตรคำนวณ:** จำนวน Host = 2^(Host bits) - 2 4. **ที่อยู่พิเศษ:** 10.x.x.x, 172.16-31.x.x, 192.168.x.x = Private 5. **ปัจจุบัน:** ใช้ **CIDR** แทน Classful เพื่อความยืดหยุ่น --- ## 3.2 IPv6 - ความหมายและคุณสมบัติ **IPv6 (Internet Protocol version 6)** คือโปรโตคอลรุ่นใหม่ที่ออกแบบมาแทนที่ IPv4 คุณสมบัติหลัก: - **128-bit Address**: ประมาณ 3.4×10³⁸ ที่อยู่ - **Simplified Header**: 40 bytes คงที่ - **No Broadcast**: ใช้ multicast แทน - **Auto-configuration**: SLAAC - **Built-in Security**: IPsec โดยธรรมชาติ --- ## 3.2.2 โครงสร้างส่วนหัว IPv6 ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph IPv6Header["IPv6 Header - 40 ไบต์"] V1["Version | Traffic Class | Flow Label"] V2["Payload Length | Next Header | Hop Limit"] V3["Source Address 128 บิต"] V4["Destination Address 128 บิต"] V1 --> V2 --> V3 --> V4 end ``` --- ## 3.2.2 ฟิลด์สำคัญใน IPv6 Header | ฟิลด์ | ขนาด | คำอธิบาย | |-------|------|----------| | Version | 4 บิต | เวอร์ชัน (6) | | Traffic Class | 8 บิต | เทียบเท่า ToS ใน IPv4 | | Flow Label | 20 บิต | ระบุ flow สำหรับ QoS | | Payload Length | 16 บิต | ความยาวของ payload | | Next Header | 8 บิต | โปรโตคอลชั้นบน | | Hop Limit | 8 บิต | เทียบเท่า TTL | --- ## 3.2.3 รูปแบบที่อยู่ IPv6 **รูปแบบเต็ม:** `2001:0db8:0000:0000:0000:0000:0000:0001` **กฎการย่อ:** 1. ตัด 0 นำหน้า: `2001:db8:0:0:0:0:0:1` 2. ใช้ `::` แทน 0 ติดกัน: `2001:db8::1` --- ## 3.2.3 ประเภทที่อยู่ IPv6 | ประเภท | Prefix | ตัวอย่าง | |--------|--------|---------| | **Global Unicast** | 2000::/3 | 2001:db8::/32 | | **Link-Local** | fe80::/10 | fe80::1 | | **Unique Local** | fc00::/7 | fd00::/8 | | **Multicast** | ff00::/8 | ff02::1 | | **Loopback** | ::1/128 | ::1 | --- ## 3.3 ICMP - ความหมายและหน้าที่ **ICMP (Internet Control Message Protocol)** ใช้สำหรับส่งข้อความควบคุมและรายงานข้อผิดพลาด หน้าที่หลัก: - **Error Reporting**: รายงานข้อผิดพลาดในการส่งแพ็กเก็ต - **Diagnostic**: ทดสอบการเชื่อมต่อ (ping, traceroute) - **Network Discovery**: ค้นหาเราเตอร์และโฮสต์ --- ## 3.3.2 ประเภทข้อความ ICMP ที่สำคัญ | Type | ชื่อ | คำอธิบาย | |------|-----|----------| | 0 | Echo Reply | ตอบกลับ ping | | 3 | Destination Unreachable | ไม่สามารถเข้าถึงปลายทาง | | 8 | Echo Request | ขอให้ตอบกลับ (ping) | | 11 | Time Exceeded | TTL หมดอายุ | --- ## 3.3.2 กระบวนการ Ping (ICMP Echo) ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% sequenceDiagram participant H as Host participant D as Destination H->>D: ICMP Echo Request (Type 8) D->>H: ICMP Echo Reply (Type 0) ``` --- ## 3.3.2 กระบวนการ Traceroute ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#d79921', 'primaryTextColor': '#282828'}}}%% sequenceDiagram participant H as Host participant R1 as Router 1 participant R2 as Router 2 participant D as Destination H->>R1: IP Packet (TTL=1) R1->>H: ICMP Time Exceeded H->>R2: IP Packet (TTL=2) R2->>H: ICMP Time Exceeded H->>D: IP Packet (TTL=3) D->>H: ICMP Echo Reply ``` --- ## 3.3.3 ความเสี่ยงด้านความปลอดภัยของ ICMP | ภัยคุกคาม | คำอธิบาย | การป้องกัน | |----------|----------|-----------| | ICMP Flood | ส่ง ICMP จำนวนมาก | จำกัดอัตรา ICMP | | Smurf Attack | ส่งไป broadcast ปลอมที่อยู่ | บล็อก broadcast | | ICMP Redirect | ส่ง Redirect ปลอม | ปิดการรับ Redirect | --- ## 3.4 การเปรียบเทียบ IPv4 และ IPv6 | คุณสมบัติ | IPv4 | IPv6 | |----------|------|------| | **ขนาดที่อยู่** | 32 บิต | 128 บิต | | **รูปแบบที่อยู่** | Dotted Decimal | Hexadecimal | | **จำนวนที่อยู่** | ~4.3 พันล้าน | ~3.4×10³⁸ | | **ขนาดส่วนหัว** | 20-60 bytes | 40 bytes (คงที่) | | **Broadcast** | มี | ไม่มี (ใช้ Multicast) | | **NAT** | จำเป็น | ไม่จำเป็น | --- # 4. การตรวจสอบและวิเคราะห์เครือข่าย --- ## 4.1 หลักการวิเคราะห์เครือข่าย **การวิเคราะห์เครือข่าย (Network Analysis)** มีวัตถุประสงค์หลัก: - **Troubleshooting**: แก้ไขปัญหาการเชื่อมต่อ - **Performance Monitoring**: ตรวจสอบประสิทธิภาพ - **Security Analysis**: ตรวจจับภัยคุกคาม - **Capacity Planning**: วางแผนการขยายเครือข่าย - **Protocol Analysis**: ทำความเข้าใจการทำงานของโปรโตคอล --- ## 4.2 ระดับของการวิเคราะห์ ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#98971a', 'primaryTextColor': '#282828'}}}%% graph TB L1["ระดับ 1: การเชื่อมต่อพื้นฐาน
ping, arp"] L2["ระดับ 2: การวิเคราะห์เส้นทาง
traceroute, mtr"] L3["ระดับ 3: การตรวจสอบบริการ
ss, nc, curl"] L4["ระดับ 4: การวิเคราะห์แพ็กเก็ต
tcpdump, Wireshark"] L5["ระดับ 5: การวิเคราะห์เชิงลึก
nmap, IDS/IPS"] L1 --> L2 --> L3 --> L4 --> L5 ``` --- ## 4.3 เมตริกที่ใช้วัดประสิทธิภาพ | เมตริก | คำอธิบาย | ค่าที่ดี | |--------|----------|---------| | **Latency** | เวลาที่ใช้ส่งข้อมูลไป-กลับ (RTT) | < 100 ms | | **Bandwidth** | ความจุของช่องสัญญาณ | ตามข้อกำหนด | | **Throughput** | ปริมาณข้อมูลที่ส่งได้จริง | ใกล้เคียง bandwidth | | **Packet Loss** | เปอร์เซ็นต์แพ็กเก็ตที่หาย | < 1% | | **Jitter** | ความแปรปรวนของ latency | < 30 ms | --- ## 4.3 สูตรคำนวณ Throughput
Throughput
=
Bandwidth
×
(
1
-
Packet Loss Rate
)
--- ## 4.3 สูตรคำนวณ Utilization
Utilization
=
Throughput
Bandwidth
×
100
%
--- # 5. เครื่องมือวิเคราะห์เครือข่าย --- ## Outline - เครื่องมือวิเคราะห์เครือข่าย * 5.1 คำสั่ง ip - การจัดการ Network Interface * 5.2 คำสั่ง ping - ทดสอบการเชื่อมต่อ * 5.3 คำสั่ง traceroute - ติดตามเส้นทาง * 5.4 คำสั่ง ss - ดูการเชื่อมต่อเครือข่าย * 5.5 คำสั่ง arp - จัดการ ARP Table * 5.6 Wireshark - วิเคราะห์แพ็กเก็ต --- ## 5.1 คำสั่ง ip - การจัดการ Network Interface **คำสั่ง `ip`** เป็นเครื่องมือหลักในการจัดการเครือข่ายบน Linux มาแทนที่คำสั่งเก่าอย่าง: - `ifconfig` - `route` - `arp` --- ## 5.1.2 ตัวอย่างคำสั่ง ip ที่ใช้บ่อย (1) | คำสั่ง | คำอธิบาย | |--------|----------| | `ip link show` | แสดง interface ทั้งหมด | | `ip addr show` | แสดงที่อยู่ IP ทั้งหมด | | `ip addr add 192.168.1.10/24 dev eth0` | เพิ่มที่อยู่ IP | | `ip addr del 192.168.1.10/24 dev eth0` | ลบที่อยู่ IP | --- ## 5.1.2 ตัวอย่างคำสั่ง ip ที่ใช้บ่อย (2) | คำสั่ง | คำอธิบาย | |--------|----------| | `ip link set eth0 up` | เปิด interface | | `ip link set eth0 down` | ปิด interface | | `ip route show` | แสดงตาราง routing | | `ip route add default via 192.168.1.1` | เพิ่ม default gateway | | `ip neighbor show` | แสดงตาราง ARP | --- ## 5.2 คำสั่ง ping - ทดสอบการเชื่อมต่อ **คำสั่ง `ping`** ใช้ส่ง ICMP Echo Request และรอรับ Echo Reply ใช้สำหรับ: - ทดสอบการเชื่อมต่อ - วัด latency (RTT) - ตรวจสอบ packet loss --- ## 5.2.2 ตัวอย่างคำสั่ง ping | คำสั่ง | คำอธิบาย | |--------|----------| | `ping 8.8.8.8` | ping ไปยัง Google DNS | | `ping -c 5 google.com` | ping 5 ครั้ง | | `ping -i 0.5 192.168.1.1` | ping ทุก 0.5 วินาที | | `ping -s 1000 host` | กำหนดขนาด payload 1000 bytes | | `ping -W 1 host` | timeout 1 วินาที | | `ping6 ::1` | ping IPv6 loopback | --- ## 5.3 คำสั่ง traceroute - ติดตามเส้นทาง **คำสั่ง `traceroute`** ใช้ติดตามเส้นทางที่แพ็กเก็ตเดินทาง หลักการทำงาน: - ใช้ TTL และ ICMP Time Exceeded - เพิ่ม TTL ทีละ 1 เพื่อค้นหา router แต่ละ hop --- ## 5.3.2 ตัวอย่างคำสั่ง traceroute | คำสั่ง | คำอธิบาย | |--------|----------| | `traceroute google.com` | traceroute ปกติ (UDP) | | `traceroute -I google.com` | ใช้ ICMP แทน UDP | | `traceroute -T google.com` | ใช้ TCP SYN | | `traceroute -m 20 host` | กำหนด max hops เป็น 20 | | `traceroute -n host` | ไม่ resolve DNS | --- ## 5.4 คำสั่ง ss - ดูการเชื่อมต่อเครือข่าย **คำสั่ง `ss` (Socket Statistics)** ใช้แสดงข้อมูล socket และการเชื่อมต่อ มาแทนที่คำสั่ง `netstat` --- ## 5.4.2 ตัวอย่างคำสั่ง ss (1) | คำสั่ง | คำอธิบาย | |--------|----------| | `ss -t` | แสดง TCP connections | | `ss -u` | แสดง UDP connections | | `ss -l` | แสดงเฉพาะ listening sockets | | `ss -a` | แสดงทั้งหมด | | `ss -n` | แสดงหมายเลขพอร์ต (ไม่ resolve) | --- ## 5.4.2 ตัวอย่างคำสั่ง ss (2) | คำสั่ง | คำอธิบาย | |--------|----------| | `ss -p` | แสดง process ที่ใช้ socket | | `ss -s` | แสดงสรุปสถิติ | | `ss -t state established` | แสดงเฉพาะ ESTABLISHED | | `ss 'sport = :22'` | กรองเฉพาะ source port 22 | | `ss 'dport = :443'` | กรองเฉพาะ destination port 443 | --- ## 5.5 คำสั่ง arp - จัดการ ARP Table **ARP (Address Resolution Protocol)** ใช้แปลงที่อยู่ IP เป็นที่อยู่ MAC --- ## 5.5 กระบวนการ ARP ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% sequenceDiagram participant A as Host A participant BC as Broadcast participant B as Host B A->>BC: ARP Request (Broadcast)
Who has 192.168.1.20? B->>A: ARP Reply (Unicast)
192.168.1.20 is at BB:BB:BB:BB:BB:BB ``` --- ## 5.5.2 ตัวอย่างคำสั่ง ARP | คำสั่ง | คำอธิบาย | |--------|----------| | `arp -a` | แสดง ARP table ทั้งหมด | | `arp -n` | แสดง ARP table (ไม่ resolve) | | `ip neighbor show` | แสดง neighbor table | | `ip neighbor flush dev eth0` | ล้าง ARP cache | --- ## 5.6 Wireshark - วิเคราะห์แพ็กเก็ต **Wireshark** คือเครื่องมือวิเคราะห์แพ็กเก็ตแบบกราฟิก (GUI) ที่ทรงพลังที่สุด ความสามารถ: - จับแพ็กเก็ตแบบ real-time - วิเคราะห์โปรโตคอลหลายร้อยชนิด - กรองและค้นหาแพ็กเก็ต - สร้างกราฟและสถิติ --- ## 5.6.2 Display Filters ที่ใช้บ่อย (1) | Filter | คำอธิบาย | |--------|----------| | `ip.addr == 192.168.1.1` | แพ็กเก็ตที่มี IP นี้ | | `ip.src == 10.0.0.1` | แพ็กเก็ตจาก IP นี้ | | `ip.dst == 8.8.8.8` | แพ็กเก็ตไปยัง IP นี้ | | `tcp` | เฉพาะ TCP | | `udp` | เฉพาะ UDP | | `icmp` | เฉพาะ ICMP | --- ## 5.6.2 Display Filters ที่ใช้บ่อย (2) | Filter | คำอธิบาย | |--------|----------| | `tcp.port == 80` | TCP port 80 | | `tcp.flags.syn == 1` | TCP SYN packets | | `http` | HTTP traffic | | `dns` | DNS traffic | | `tcp.analysis.retransmission` | TCP retransmissions | --- ## 5.6.4 ตัวอย่างคำสั่ง tcpdump | คำสั่ง | คำอธิบาย | |--------|----------| | `tcpdump -i eth0` | จับแพ็กเก็ตบน eth0 | | `tcpdump -c 100` | จับ 100 แพ็กเก็ต | | `tcpdump -w capture.pcap` | บันทึกลงไฟล์ | | `tcpdump -r capture.pcap` | อ่านจากไฟล์ | | `tcpdump host 192.168.1.1` | กรองตาม host | | `tcpdump port 80` | กรองตาม port | --- # 6. สรุปโดยรวม --- ## 6.1 สรุปโปรโตคอลชั้นขนส่ง **TCP (Transmission Control Protocol)** - Connection-oriented, Reliable - มี flow control และ congestion control - เหมาะสำหรับ HTTP, FTP, SMTP **UDP (User Datagram Protocol)** - Connectionless, Fast - เหมาะสำหรับ DNS, VoIP, Video Streaming --- ## 6.1 สรุปโปรโตคอลชั้นเครือข่าย **IPv4** - ที่อยู่ 32 บิต (~4.3 พันล้านที่อยู่) - ใช้ class และ CIDR **IPv6** - ที่อยู่ 128 บิต (~3.4×10³⁸ ที่อยู่) - ความปลอดภัยในตัว, auto-configuration **ICMP** - ส่งข้อความควบคุมและรายงานข้อผิดพลาด - ใช้ใน ping และ traceroute --- ## 6.1 สรุปเครื่องมือวิเคราะห์เครือข่าย | เครื่องมือ | หน้าที่หลัก | ระดับ | |-----------|------------|------| | `ip` | จัดการ interface, routing, ARP | พื้นฐาน | | `ping` | ทดสอบการเชื่อมต่อ | การเชื่อมต่อ | | `traceroute` | ติดตามเส้นทาง | เส้นทาง | | `ss` | ตรวจสอบ socket | บริการ | | `Wireshark` | วิเคราะห์แพ็กเก็ต | แพ็กเก็ต | --- ## 6.2 แผนภาพสรุปความสัมพันธ์ ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#458588', 'primaryTextColor': '#ebdbb2'}}}%% graph TB subgraph Application["Application"] HTTP["HTTP/HTTPS"] DNS["DNS"] end subgraph Transport["Transport"] TCP["TCP"] UDP["UDP"] end subgraph Network["Network"] IPv4["IPv4"] IPv6["IPv6"] ICMP["ICMP"] end HTTP --> TCP DNS --> UDP TCP --> IPv4 TCP --> IPv6 UDP --> IPv4 UDP --> IPv6 ``` --- ## 6.3 ข้อควรจำ 1. **TCP vs UDP**: เลือกตามความต้องการ - TCP สำหรับความน่าเชื่อถือ, UDP สำหรับความเร็ว 2. **IPv4 vs IPv6**: IPv6 คืออนาคต แต่ปัจจุบันยังต้องใช้ Dual Stack 3. **การวิเคราะห์เครือข่าย**: เริ่มจากเครื่องมือง่ายๆ (ping) ก่อนใช้เครื่องมือซับซ้อน 4. **ความปลอดภัย**: ICMP และ ARP เป็นช่องทางโจมตีที่พบบ่อย 5. **การเฝ้าระวัง**: ตรวจสอบ Recv Queue, Packet Loss, และ Latency อย่างสม่ำเสมอ --- # 7. เอกสารอ้างอิง --- ## 7.1 มาตรฐาน RFC | RFC | ชื่อ | คำอธิบาย | |-----|-----|----------| | RFC 791 | Internet Protocol | IPv4 Specification | | RFC 792 | ICMP | ICMP for IPv4 | | RFC 793 | TCP | TCP Specification | | RFC 768 | UDP | UDP Specification | | RFC 8200 | IPv6 | IPv6 Specification | | RFC 4443 | ICMPv6 | ICMP for IPv6 | --- ## 7.2 หนังสือแนะนำ 1. **Computer Networking: A Top-Down Approach** - James F. Kurose, Keith W. Ross 2. **TCP/IP Illustrated, Volume 1** - W. Richard Stevens 3. **Wireshark Network Analysis** - Laura Chappell 4. **Network Security Essentials** - William Stallings --- ## 7.3 แหล่งข้อมูลออนไลน์ - **IETF**: https://www.ietf.org/ - **IANA**: https://www.iana.org/ - **Wireshark Docs**: https://www.wireshark.org/docs/ - **Linux man pages**: https://man7.org/linux/man-pages/ - **Cloudflare Learning**: https://www.cloudflare.com/learning/ --- ## 7.4 เครื่องมือที่แนะนำ | เครื่องมือ | ลิงก์ | ใบอนุญาต | |-----------|------|---------| | Wireshark | https://www.wireshark.org/ | GPL | | Nmap | https://nmap.org/ | GPL | | iPerf3 | https://iperf.fr/ | BSD | | mtr | https://github.com/traviscross/mtr | GPL | | Scapy | https://scapy.net/ | GPL | --- # คำถาม - ข้อสงสัย