Mạng máy tính bài 04: TCP, UDP, port và socket: Dữ liệu đến đúng ứng dụng thế nào?
- 19-10-2026
- Toanngo92
- 0 Comments
Mạng và truyền thông cho người mới · Bài 4/6 · Biên soạn lại tháng 10/2026.
Hiểu TCP và UDP qua nhu cầu của ứng dụng; phân biệt IP với port, kết nối với phiên đăng nhập, độ tin cậy với tính bảo mật.
Mục lục
1. Một máy mở nhiều ứng dụng cùng lúc
Laptop đang mở website, nhận thư và chạy một cuộc gọi. Chỉ biết dữ liệu đến đúng máy chưa đủ: hệ điều hành còn cần giao nó cho điểm cuối ứng dụng thích hợp. Port giúp phân biệt các điểm giao tiếp ở tầng giao vận; giao thức giao vận xác định cách trao đổi giữa các phía.
Ví dụ dễ nhớ: địa chỉ một tòa nhà chưa chỉ ra bộ phận nào cần nhận hàng. Port giống một phần thông tin để chọn điểm nhận trong tòa nhà đó. Đây chỉ là phép so sánh về vai trò; port là số logic trong giao thức, không phải cổng cắm mạng và không phải số thứ tự process của hệ điều hành.
IP giúp chuyển gói tới một giao diện mạng phù hợp trong hệ thống IP; port TCP hoặc UDP được dùng cùng thông tin địa chỉ và giao thức để phân phối dữ liệu. Một process có thể sử dụng nhiều socket và nhiều port, nên không xem mỗi port là một ứng dụng duy nhất bất biến.
2. Port và socket khác nhau như thế nào?
Số port TCP/UDP có độ dài 16 bit, giá trị từ 0 tới 65535. Các nhóm thường dùng để đăng ký và quản lý gồm 0–1023, 1024–49151 và 49152–65535; ý nghĩa sử dụng cụ thể cần xem theo giao thức và hệ điều hành. Port 0 có vai trò đặc biệt trong nhiều API nên không chọn nó như một cổng dịch vụ thông thường.
Socket là đối tượng/giao diện mà chương trình dùng để giao tiếp với ngăn xếp mạng. Một kết nối TCP thường được phân biệt bằng cặp IP/port phía nguồn và cặp IP/port phía đích. Nhờ vậy nhiều kết nối có thể cùng tới TCP 443 của một server nhưng vẫn được phân biệt theo các đầu cuối.
TCP 53 và UDP 53 thuộc hai không gian giao thức khác nhau. Port 443 cũng không tự bảo đảm dữ liệu đã được mã hóa: đó là quy ước dịch vụ thường gặp, còn thực tế phải có giao thức bảo mật hoạt động đúng.
| Dịch vụ / tình huống | Port thường gặp | Cần hiểu |
|---|---|---|
| HTTP thông thường | TCP 80 | Có thể dùng cổng khác theo cấu hình |
| HTTPS qua TCP | TCP 443 | Còn cần TLS và HTTP phù hợp |
| HTTP/3 | Thường UDP 443 | HTTP/3 dùng QUIC, không phải gửi HTTP thô tùy ý qua UDP |
| DNS truyền thống | UDP hoặc TCP 53 | Không được kết luận DNS chỉ dùng UDP |
| SSH | TCP 22 | Port mặc định có thể được thay đổi |
3. TCP cung cấp luồng byte tin cậy
TCP là giao thức hướng kết nối. Nó có cơ chế số thứ tự, xác nhận, truyền lại và sắp xếp để cung cấp luồng byte đúng thứ tự cho ứng dụng khi kết nối hoạt động thành công. Nếu không thể tiếp tục, ứng dụng cần xử lý lỗi; “tin cậy” không phải lời hứa mạng sẽ không bao giờ mất kết nối.
TCP không giữ nguyên ranh giới mỗi lần ứng dụng ghi dữ liệu. Hai lần gửi “HELLO” và “WORLD” không bảo đảm phía nhận sẽ đọc bằng đúng hai lần nhận tương ứng. Giao thức ứng dụng cần cách xác định thông điệp, chẳng hạn độ dài hoặc dấu phân cách theo thiết kế của nó.
TCP còn điều khiển luồng để phù hợp khả năng nhận và điều khiển tắc nghẽn để ứng phó với điều kiện mạng. Hai mục tiêu này liên quan nhưng khác nhau. Không dùng nhãn “TCP chậm” thay cho việc giải thích chi phí và lợi ích của các cơ chế đó.

4. Bắt tay và kết thúc một kết nối TCP
Trong luồng thiết lập thông thường, client gửi SYN, server phản hồi SYN+ACK rồi client gửi ACK. Các phía trao đổi thông tin để thiết lập trạng thái và số thứ tự thích hợp. Dữ liệu ứng dụng được gửi theo giao thức sử dụng kết nối đó; việc bảo vệ bằng TLS là một công việc khác trong luồng HTTPS trên TCP.
Khi kết thúc có trật tự, hai chiều truyền có thể được đóng theo cơ chế FIN và xác nhận tương ứng. Không khẳng định mọi kết thúc đều đúng bốn gói nhìn thấy: thông điệp có thể được kết hợp và còn có tình huống reset hoặc lỗi. Với nhập môn, hiểu mục đích mở/đóng và quan sát một ví dụ là đủ, chưa cần học toàn bộ máy trạng thái.
Một trang web có thể tái sử dụng kết nối. Không nhất thiết phải bắt tay TCP mới cho từng ảnh và từng lần chuyển trang. Ngược lại, một lần đăng nhập không bị giới hạn bằng vòng đời của đúng một kết nối TCP.
5. UDP cung cấp datagram với bảo đảm khác
UDP gửi các datagram và giữ ranh giới datagram ở giao diện phù hợp. Bản thân UDP không có cơ chế bắt tay, truyền lại hay bảo đảm thứ tự như TCP. Ứng dụng phải quyết định có cần thêm xác nhận, bộ đệm, sắp xếp, truyền lại hoặc chấp nhận mất một phần dữ liệu hay không.
Với dữ liệu thời gian thực, một phần dữ liệu quá muộn có thể ít giá trị hơn dữ liệu mới. Đó là một lý do ứng dụng có thể chọn cơ chế dựa trên UDP, nhưng không có nghĩa mọi cuộc gọi hay video đều dùng cùng một giao thức, hoặc không cần tính toàn vẹn và bảo mật.
QUIC là ví dụ giao thức xây trên UDP nhưng bổ sung nhiều cơ chế, gồm các luồng tin cậy và bảo vệ truyền thông. Vì vậy “dùng UDP” không tự suy ra “ứng dụng chắc chắn không tin cậy”. Cũng không thể suy rằng UDP luôn nhanh hơn trong mọi mạng và mọi khối lượng dữ liệu.
| Khía cạnh | TCP | UDP |
|---|---|---|
| Dạng dữ liệu | Luồng byte; ứng dụng tự xác định ranh giới thông điệp | Datagram |
| Kết nối ở mức giao thức | Có cơ chế thiết lập và trạng thái kết nối | Không bắt tay thiết lập kết nối như TCP |
| Thứ tự và truyền lại | Có các cơ chế tương ứng trong TCP | Ứng dụng/giao thức phía trên bổ sung khi cần |
| Bảo mật nội dung | TCP không tự mật mã hóa dữ liệu ứng dụng | UDP không tự mật mã hóa dữ liệu ứng dụng |
| Lựa chọn sử dụng | Theo yêu cầu và hệ sinh thái giao thức | Theo yêu cầu và các cơ chế ứng dụng bổ sung |
6. Quan sát kết nối trên Windows
Mở một website HTTPS, sau đó trong PowerShell chạy lệnh đọc một số kết nối TCP đã thiết lập. LocalAddress/LocalPort là phía máy bạn; RemoteAddress/RemotePort là phía bên kia của kết nối được quan sát. Máy có nhiều ứng dụng sẽ có nhiều dòng; quyền và phiên bản Windows có thể ảnh hưởng thông tin xem được.
Get-NetTCPConnection -State Established |
Select-Object -First 5 LocalAddress,LocalPort,RemoteAddress,RemotePort
Test-NetConnection -ComputerName khoahoc.hocvietcode.com -Port 443
Test-NetConnection với -Port kiểm tra khả năng kết nối TCP tới cổng đích theo điều kiện mạng lúc đó. Nó không kiểm tra đầy đủ chứng chỉ TLS, nội dung trang, HTTP/3 hoặc việc đăng nhập. Nếu trình duyệt dùng HTTP/3, không nên tìm kết nối TCP của đúng request đó rồi kết luận trang không hoạt động. Một phép đo luôn cần được gắn với giao thức và mục tiêu của phép đo.
7. Đọc thêm: khi bắt đầu lập trình socket
Stream socket và datagram socket là các kiểu giao diện thường gặp. Khi viết ứng dụng, cần xử lý timeout, lỗi, giới hạn bộ đệm và định dạng thông điệp; không giả định một lệnh đọc luôn nhận đủ toàn bộ thông điệp. Raw socket, chi tiết header và các thuật toán điều khiển tắc nghẽn nên học ở chuyên đề riêng sau khi đã hiểu vai trò của TCP, UDP và endpoint.
Ghi nhớ sau bài học
- IP và port giải quyết các phần khác nhau của việc chuyển dữ liệu.
- Socket không phải cổng vật lý và port không phải mã process.
- TCP cung cấp luồng byte đúng thứ tự; ứng dụng vẫn cần xử lý lỗi và ranh giới thông điệp.
- UDP không tự cung cấp các bảo đảm như TCP, nhưng giao thức phía trên có thể bổ sung.
- Độ tin cậy và mật mã hóa là hai vấn đề khác nhau.

