Skip to content

Data Encoding và Transmission

Mở đầu

Khi gửi 1 tấm ảnh, 1 tin nhắn, hay download game vài GB, thông tin xuyên nửa trái đất, nguyên vẹn đến màn hình bạn thế nào? Chương này xoay quanh câu hỏi newbie hay gặp: sao file tôi nhận bị mã loạn? Theo dấu vấn đề, vén bức màn 3 nền tảng underlying: encoding, storage, transmission.

Bạn sẽ học:

  • Debug mã loạn: gặp "file mở thành ký tự lạ" → biết phân tích từ góc encoding, không vội kết luận "file hỏng"
  • Cross-platform mindset: trao đổi data biết quan tâm encoding + byte order
  • Encoding worldview: máy biểu diễn vạn vật bằng 0/1 thế nào
  • Foundation: cho network protocol, file format, serialization
ChươngNội dung
1Character encoding (ASCII, UTF-8, GBK)
2Storage (binary, byte order)
3Transmission (serialization, compression)

Trước khi bắt đầu, làm rõ 1 sự thật vật lý newbie hay bỏ qua:

Máy tính cực "cứng nhắc". Không biết chữ Hán, không biết màu sắc, không nghe được nhạc Sơn Tùng.

Underlying nó toàn switch bán dẫn vi mô, chỉ judge "có điện (1)" hoặc "không (0)".

Máy chỉ biết 0/1, sao cho nó hiện ảnh + text phức tạp?

Đáp án: quy định 1 "code book".

Ta + máy thoả thuận: signal 01000001 → vẽ chữ A; signal khác → màu đỏ.

Quá trình dùng codebook dịch qua lại = "Encoding".

Hiểu "mọi thứ trong máy bản chất là mật mã", bạn hiểu hiện tượng quái nhất: mã loạn từ đâu ra.


0. Mở đầu: sao file biến thành "thiên thư"?

Tưởng đồng nghiệp gửi file quan trọng, double-click thấy toàn 浣犲ソ hoặc ä½ å¥½.

Trực giác: chắc file hỏng trên đường? Mất packet?

Thực ra 99% "file hỏng" — sự thật là máy bạn "chọn nhầm reading rule".

👇 Click thử: switch các "codebook" khác nhau, đọc cùng 1 chuỗi byte:

你收到的文件内容(字节流)
0xE40xBD0xA00xE50xA50xBD
用什么规则来「读」它?
正确(UTF-8)
你好
发件人用 UTF-8 存储了「你好」,你也用 UTF-8 读,当然正确。
核心领悟:字节本身没有含义,编码规则决定了字节变成什么字。发件人用 UTF-8 存,你用 GBK 读,当然面目全非。

Insight: codebook không khớp

Byte (chuỗi 0/1) tự nó không có nghĩa tuyệt đối, "encoding rule" do người định mới gán nghĩa.

Như morse "tick tick tack" — dùng codebook Trung Quốc ra 1 chữ; codebook Mỹ ra chữ khác.

Người gửi dùng UTF-8 dịch chữ Hán thành số, bạn dùng GBK đọc lại → mã loạn.

Để hiểu sao data không hỏng vẫn loạn, cần biết chuỗi đầy đủ: encoding → storage → transmission.


1. Data encoding là gì? (vạn vật thành số)

Encoding = xây "từ điển dịch 2 chiều", map thông tin phức tạp (text, màu, âm) thành 0/1 máy hiểu.

1.1 Text → số: từ ASCII đến Unicode

Mỗi lần gõ phím, máy lén làm 1 việc: lookup table.

Giai đoạn 1: ASCII

PC sơ khai, người Mỹ nghĩ thế giới chỉ 26 chữ + số + dấu câu → định ASCII.

128 ký hiệu, vd số 65 = chữ A. Vì ít, 1 Byte (= 8 Bit) = 256 biến → thừa.

Giai đoạn 2: chiến quốc

PC ra thế giới. Vấn đề: chữ Hán mấy chục nghìn, Nhật có kana, 1 byte không đủ!

Trung Quốc làm GBK (2 byte/Hán), Nhật làm Shift_JIS... thế giới hỗn loạn. Webpage làm ở TQ gửi Mỹ → mã loạn (Mỹ không có GBK dictionary).

Giai đoạn 3: thống nhất với Unicode

Cuối, các kỹ sư ngồi với nhau: "làm 1 super dictionary chứa mọi ký hiệu trái đất!" → Unicode. Mỗi ký tự, kể cả emoji, có 1 số định danh duy nhất.

UTF-8 là set "storage rule" phổ biến nhất hiện cho Unicode. Thông minh: variable length — Anh 1 byte, Hán 3 byte, tiết kiệm.

👇 Click thử: gõ chữ Việt/Anh/Emoji (vd Xin chào 🎉), xem byte:

字符Unicode 码点UTF-8 字节字节数
U+4F60
0xE40xBD0xA0
3 字节
U+597D
0xE50xA50xBD
3 字节
U+0020
0x20
1 字节
HU+0048
0x48
1 字节
eU+0065
0x65
1 字节
lU+006C
0x6C
1 字节
lU+006C
0x6C
1 字节
oU+006F
0x6F
1 字节
字符数8
UTF-8 总字节数12
平均每字符1.5 字节
提示:英文字母在 UTF-8 中只占 1 字节,常用汉字占 3 字节,Emoji 占 4 字节。这就是为什么处理中文文本时,“字符数”和“字节数”是两个完全不同的概念。

Phát hiện:

  • Chữ Latin (a-z, không dấu) trong UTF-8 = 1 byte
  • Chữ tiếng Việt có dấu (vd "ố") = 2-3 byte
  • Chữ Hán = 3 byte
  • Emoji () = 4 byte!

Cold fact: SMS tiếng Việt có dấu chỉ gửi 70 ký tự/tin (Unicode), không dấu được 160 (GSM-7). Vì physical size khác.

1.2 Màu sắc + âm thanh → số?

Text có lookup table, vậy ảnh + giọng hát?

Cùng nguyên lý: slice + map.

  • Image encoding: zoom ảnh max → vài triệu pixel nhỏ. Quy định mỗi màu 1 code (vd #FF0000 = đỏ), lưu code mọi pixel → ảnh thành số.

    👇 Click thử: hover ô bên trái xem màu → hex code.

    🖼️ 图片是如何变成数字的?(悬停在像素方块上看看)
    💻 计算机实际看到的:
    #F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#3B82F6#3B82F6#F3F4F6#F3F4F6#3B82F6#3B82F6#F3F4F6#F3F4F6#3B82F6#3B82F6#F3F4F6#F3F4F6#3B82F6#3B82F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#3B82F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#3B82F6#F3F4F6#3B82F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#3B82F6#F3F4F6#F3F4F6#F3F4F6#3B82F6#3B82F6#3B82F6#3B82F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6#F3F4F6
    将鼠标悬停在左侧画布的方块上
    💡 原理解析:一张 1080p 的高清壁纸,其实就是 207 万 个像左边这样密密麻麻的小色块组成的。计算机把这两百多万个颜色的编号(如 #FF0000)按顺序记录下来,图片就变成了几百万个数字的集合。
  • Audio encoding: âm thanh = sóng dao động không khí. Đo độ cao sóng 44100 lần/giây (sample), record giá trị → sóng liên tục thành mảng số rời rạc.

    👇 Click thử: kéo slider xem sóng analog liên tục "slice" thành digital.

    声音是如何变成数字的?(拖拽滑块调整采样率)
    低音质 (严重失真)高音质 (贴近原声)
    转译后的数字(高度):
    0530-520530-520
    说明:灰色的虚线是真实的连贯声波(大自然的模拟信号)。蓝色柱子是我们每隔一段时间去测量它的高度(数字信号)。采样频率越密集,记录下来的数字就越多,恢复出来的声音就越清晰逼真,但产生的文件也随之飙升。

2. Storage: trước khi gửi, phải chứa đâu đó

Encode xong, sắp gửi. Trước hết phải để vào media vật lý. Đụng quy tắc sắt.

Bạn có thể nghĩ: "đã phải lưu, lưu chỗ đọc-ghi nhanh nhất là OK?"

Nhưng trong hardware, có ma chú không vẹn cả: storage càng nhanh, giá càng đắt, dung lượng càng nhỏ.

Để dùng tiền ít nhất đổi tốc độ cao nhất, kỹ sư thiết kế "storage hierarchy" (kim tự tháp storage).

👇 Click thử: click từng layer kim tự tháp, xem máy hiện đại tính toán thế nào.

L0CPU 寄存器极快
L1CPU 缓存(Cache)很快
L2内存(RAM)
L3SSD(固态硬盘)较快
L4机械硬盘(HDD)
L2内存(RAM)
访问速度几十 ~ 100 纳秒
典型容量几 GB ~ 几百 GB
单价(每GB)适中(约 ¥30/GB)
生活类比:你打开的浏览器标签页——断电就没了,但当前工作全在这里。
实际用途:运行中的程序、操作系统、当前打开的文件都住在内存里。内存不够了→程序卡顿甚至崩溃。
提示:越快越贵,越慢越大。CPU 缓存极快但只有几 MB;机械硬盘虽慢但便宜又能存 TB。操作系统会自动在各层之间搬运数据——这叫存储层次结构

Insight: triết lý "porter" của OS

Không có storage hoàn hảo. OS (Windows, macOS) như quản kho thông minh:

  1. Phim + game khối lượng lớn → kho chậm-rẻ (SSD/HDD)
  2. Khi chơi game, vác texture HD từ disk → "bàn làm việc" cực nhanh nhưng nhỏ (RAM)
  3. Đóng game, clear RAM cho file khác

Insight: chơi open-world AAA, đổi map đen màn hình lâu (loading bar) — vì disk chậm, OS đang vác data map kế lên RAM.


3. Data transmission (cho 0/1 du lịch)

Encode xong, ở RAM, giờ gửi bạn.

Transmission = đẩy 0/1 (điện hoặc quang signal) theo cáp, dây, sóng — chính xác từ máy A sang máy B.

3.1 Hardware + LAN: giới hạn vật lý 1 dây

Trong case hoặc 2 PC gần nhau, thử thách vật lý thuần.

Idea đầu tiên hay nghĩ: "1 dây 1 lúc gửi 1 signal, dùng 8 dây song song → x8 speed?"

Đây là parallel dùng cho HDD đời cũ.

Nhưng hôm nay Type-C, USB, PCIe mainboard đều dùng serial (1 channel chính).

👇 Click thử: so sánh animation serial vs parallel.

选择传输方式,然后点"发送数据包"
Tx
发送方
10110010
1 条线
Rx
接收方
已发送0 / 8 位
传输速率1 位/次
状态就绪
提示:等等,串行不是更慢吗?
表面上是的——但现代串行接口(USB 4、PCIe)传输频率高达每秒 数百亿次,而并行线路之间会产生 信号串扰(Crosstalk),反而限制了速度。所以高速接口全面转向了串行。

Sao "đường mòn 1 lối" thắng "8 lane"?

Speed thấp, 8 dây OK. Nhưng cần vài tỷ signal/giây, vấn đề: Dòng điện yếu trên các dây sinh sóng điện từ nhiễu nhau (crosstalk); không đảm bảo 8 signal cùng phát sẽ cùng đến đích. 1 dây chậm 1 phần triệu giây vì impedance → 8 bit ghép lại loạn.

Thay vì tốn tiền cân bằng 8 lane, dồn resource vào 1 lane "siêu xe", đẩy speed lên ánh sáng. Đây là sự thật serial thống trị.

3.2 WAN + Internet: vượt biển, nghệ thuật chống mất gói

Nếu data không gửi GPU cách 1 inch, mà gửi server Mỹ?

Không thể 1 dây liên tục. Data qua cáp quang, đáy biển, vô số router cũ. Lúc này không phải limit vật lý, mà thử thách fault tolerance.

Gửi video 1GB qua app chat, logic underlying như chuyển nhà quốc tế — không thể quăng container nguyên cho bưu điện.

  1. Packetization: network cắt video thành mấy chục nghìn "data packet" cỡ phong bì (thường 1500 byte).
  2. Checksum: phòng cáp đáy biển bị cá mập cắn đứt 1 dây làm 0 đảo thành 1, system tính 1 "fingerprint" toán học cho mỗi phong bì.
  3. TCP retransmit + ACK: bên nhận tính checksum verify. Nếu sai, hoặc thấy seq nhảy từ 31 sang 33 (mất packet), hét qua network: "Tôi không nhận được 32, gửi lại 32!"

Vì cơ chế TCP (Transmission Control Protocol) cực chặt này, dù WiFi tệ download file 30 phút, khoảnh khắc xong, file 100% nguyên vẹn.


4. Thực chiến: từ bấm shutter đến đăng MXH

3 mảnh xếp lại: encode + store + transmit. Xem operation thường ngày: chụp ảnh tự backup cloud.

Giây bạn nhấn shutter, trong phone là 1 cuộc chiến số vĩ đại.

👇 Click thử: click "execute step", trace hành trình data.

📸 照片上传的完整旅程从按下快门到云端备份,数据经历了什么?
1
编码
2
存储
3
传输
🔢编码阶段等待执行
☀️
光线
物理信号
📷
传感器
CMOS/CCD
📊
RAW 数据
24MB / 4860万像素
🗜️
JPEG 压缩
有损压缩
📄
JPEG 文件
3.2MB
第一步:编码 — 把光变成数字
1相机传感器把光信号转换成 RGB 数值(每个像素 3 × 8 bit = 24 bit)
2整张照片 4860 万像素 × 24 bit ≈ 140 MB 的原始数据
3JPEG 算法分析像素相似性,去掉人眼不敏感的信息,压缩到 3 MB

5. Glossary

TermNghĩa
Bit (b)Đơn vị nhỏ nhất, chỉ 0 hoặc 1
Byte (B)8 Bit. Đơn vị file size cơ bản
Character Set"Mục lục từ điển", quy định ký tự nào tồn tại, không quy định lưu byte gì
Encoding"Storage rule" cụ thể, quyết ký tự đó tương ứng byte nào (vd UTF-8)
RAMMemory siêu nhanh nhưng tắt điện mất. Phone 8G/16G nói cái này
SSDStorage permanent hiện đại, chip flash, nhanh hơn HDD vài chục lần
Serial / ParallelSerial: 1 channel xếp hàng; Parallel: nhiều channel song song (không hợp tần số cao)
ChecksumVerify code đính kèm khi transmit. Bên nhận tính lại, khớp = không hỏng
TCPTransmission Control Protocol. Cắt file lớn, dán seq, mất packet retransmit, đảm bảo 100% nguyên vẹn

Tổng kết

Câu hỏi đầu chương, giờ bạn có đáp án từ underlying:

  • Sao file nhận bị mã loạn? Data không hỏng, software bạn không chọn đúng codebook (encoding).

  • Sao dây Type-C nhỏ tí nhưng nhanh hơn dây bự cũ? Trước là nhiều ngựa song song dễ đụng (parallel), giờ là 1 tàu cao tốc đường riêng (serial).

  • Sao game lớn loading scene đen màn lâu? Cần vác mấy chục GB từ disk chậm sang RAM nhanh.

Bản chất máy tính rất mộc mạc:

Là 1 máy giỏi "chuyển (encode)" mọi thứ thành signal, "giữ (store)" trong silicon, rồi "cắt nhỏ + gửi (transmit)" qua điện áp pulse.

Đọc hiểu vòng lặp này = bạn cầm chìa khoá underlying của computer science.

2026 update

  • Web encoding default: HTML5 mặc định UTF-8, gần như không còn vấn đề mã loạn
  • NVMe SSD: PCIe 5.0 NVMe đạt 14 GB/s
  • HTTP/3 + QUIC: chạy trên UDP (không phải TCP), faster cho mobile
  • AI inference: dữ liệu encode đặc biệt (tokenization cho LLM)
  • Vector embeddings: encode text/image thành vector dày để search semantic
  • VN dev: hiểu UTF-8 = không bao giờ gặp bug "ố thành ô" trong DB