Đây là bài tập về nhà của Khóa Linux Network Administrators
Để hiểu cấu trúc và hoạt động của Web Server (Quan trọng và cần thiết đối với một Web Developer như mình) thì việc nắm các kiến thức nền tảng liên quan như Giao thức liên mạng TCP/IP, TCP, UDP, Giao thức HTTP, Khác nhau giữa HTTP 0.9, 1.0, 1.1 và 2.0, Web Socket… là rất hữu ích. Dĩ nhiên, trong khuôn khổ một bài viết thì mình cũng không đi sâu vào từng phần, mà chỉ dừng lại ở mức tổng quan để có khái niệm về những thành phần trên.
TCP/IP và các tầng của nó nếu muốn hiểu rõ, hiểu cặn kẽ thì cần có nhiều kiến thức rất sâu về Mạng máy tính và mỗi tầng trong đó xứng đáng cả một khóa học.
Tìm hiểu tổng quan về TCP/IP
Bộ giao thức TCP/IP (Internet Protocol Suite) là bộ giao thức mà Internet và các mạng máy tính đang sử dụng và chạy trên đó. Nó gồm 2 giao thức chính là TCP (Transmission Control Protocol - Giao thức điều khiển giao vận) và IP (Internet Protocol - Giao thức liên mạng).
Bộ giao thức TCP/IP được coi là một tập hợp các tầng. Mỗi tầng giải quyết một tập các vấn đề liên quan đến việc truyền tải dữ liệu, và cung cấp cho các giao thức tầng cấp trên một dịch vụ được định nghĩa rõ ràng dựa trên việc sử dụng các dịch vụ của các tầng thấp hơn. Hay nói cách khác, các tầng trên gần với người dùng hơn và làm việc với dữ liệu trừu tượng hơn, chúng dựa vào các tầng cấp dưới để biến đổi dữ liệu thành các dạng mà cuối cùng có thể truyền đi một cách vật lý.
4 tầng của TCP/IP
- Tầng ứng dụng - Application Layer
- Tầng giao vận - Transport Layer
- Tầng mạng - Internet Layer
- Tầng liên kết - Link Layer
Mô hình 4 tầng của TCP / IP và 7 tầng của mô hình OSI (Một giao thức liên mạng đã cũ và bị thay thế bởi TCP/IP)
Mô hình vận chuyển dữ liệu qua giao thức TCP/IP
Sơ lược về nhiệm vụ của mỗi tầng:
Đọc thêm Bài viết Hành trình của một gói tin
Application Layer
Tầng cao nhất trong cấu trúc phân lớp của TCP/IP. Tầng này bao gồm tất cả các chương trình ứng dụng sử dụng các dịch vụ sẵn có thông qua một chồng giao thức TCP/IP như DHCP, DNS, HTTP, FTP, Telnet, SMTP, … Chúng sẽ tương tác với tầng vận chuyển để truyền hoặc nhận dữ liệu.
Transport Layer
Gồm 2 đại biểu chính là giao thức TCP và giao thức UDP mà mình giới thiệu tiếp đây.
Tầng mạng
IP (IPv4, IPv6)
Tầng liên kết
Ethernet, Wifi, Token Ring, PPP, Frame Relay…
TCP và UDP
TCP và UDP thuộc tầng giao vận (Transport Layer) của TCP/IP. Trong đó TCP là giao thức định hướng kết nối và UDP (User Datagram Protocol) là giao thức phi kết nối.
TCP tạo ra các kết nối giữa 2 máy cần trao đổi dữ liệu (Tạo ra một “đường ống” riêng) mà qua đó các gói tin được bảo đảm chuyển tới nơi nhận một cách đáng tin cậy và đúng thứ tự. Nguyên tắc hoạt động: TCP tại máy nguồn phân chia các byte dữ liệu cần truyền đi thành các đoạn (Segment) có kích thước thích hợp. Sau đó, TCP chuyển các gói tin này qua giao thức IP để gửi nó qua một liên mạng đến TCP ở máy đích. TCP nguồn kiểm tra để không có một gói tin nào bị thất lạc bằng cách gán cho mỗi gói tin một số thự tự (Sequence Number). Khi TCP đích nhận được, họ gửi về TCP nguồn một thông báo đã nhận (Acknowledgement) cho các gói tin đã nhận thành công. Một đồng hồ tại TCP nguồn sẽ báo time-out nếu không nhận được tin báo nhận trong khoản thời gian bằng một RRT (Round Trip Time), và dữ liệu (được coi như thất lạc) sẽ được gửi lại. TCP đích sẽ kiểm tra checksum xem có byte nào bị hỏng trong quá trình vận chuyển hay không, giá trị checksum này được tính toán cho mỗi gói dữ liệu tại nơi gửi trước khi nó được gửi và được kiểm tra tại nơi nhận.
UDP được dùng để gửi những dữ liệu ngắn (gọi là Datagram) tới những máy khác, UDP không cung cấp độ tin cậy và thứ tự truyền nhận như TCP làm. Các gói dữ liệu có thể đến không đúng thứ tự hoặc bị mất mà không có thông báo. Tuy nhiên, UDP nhanh và hiệu quả hơn đối với các mục tiêu như kích thước nhỏ và yêu cầu khắt khe về thời gian. Do bản chất không trạng thái của nó nên nó hữu dụng đối với việc trả lời các truy vấn nhỏ với số lượng lớn người yêu cầu. (Hèn chi mà Graylog lại sử dụng UDP để truyền tải các bản ghi Log từ Server Web đến Server Graylog và Tại sao UDP kém tin cậy hơn TCP nhưng vẫn tồn tại và được sử dụng.).
Ưu điểm của TCP so với UDP:
- Truyền dữ liệu không lỗi (Do có cơ chế sữa lỗi / truyền lại).
- Truyền các gói dữ liệu theo đúng thứ tự.
- Truyền lại các gói dữ liệu mất trên đường truyền.
- Loại bỏ các gói dữ liệu trùng lặp.
- Cơ chế hạn chế tắc nghẽn đường truyền.
Danh sách các cổng TCP, UDP mặc định của một số ứng dụng mạng
List of TCP and UDP Port Numbers
HTTP - 80 FTP - 20, 21 SSH - 22 Telnet - 23 SMTPS - 465 POP3s - 995 …
IP - Internet Protocol
Xem thêm tại bài viết Tìm hiểu về IP
Trong Ipv4, Có 3 dải địa chỉ sử dụng trong Mạng riêng (và những địa chỉ còn lại được sử dụng cho mạng công cộng - Internet)
10.0.0.0–10.255.255.255 172.16.0.0–172.31.255.255 192.168.0.0–192.168.255.255
==Mở rộng: Tìm hiểu kỹ hơn IPv6==
HTTP - HyperText Transfer Protocol (Giao thức truyền siêu văn bản)
Giao thức này nằm trong tầng Application Layer, được sử dụng để truyền nội dung trang Web từ Web Server đến trình duyệt Web ở Client. Là giao thức Client/Server dùng cho Internet - World Wide Web, HTTP thuộc tầng ứng dụng của bộ giao thức TCP/IP (Các giao thức nền tảng cho Internet). Cơ chế hoạt động chính của HTTP là Request-Response: Web Client sẽ gửi Request đến Web Server, Web Server xử lý và trả về Response cho Web Client.
Lịch sử:
Phiên bản hoàn chỉnh đầu tiên của HTTP là HTTP 0.9 (Ra đời năm 1991), Tiếp theo là HTTP 1.0 (Giới thiệu chính thức năm 1996), HTTP 1.1 (1997) và mới đây nhất là HTTP 2.0. Các phiên bản sau ra đời nhằm thay thế phiên bản trước, kế thừa những chức năng cốt lõi của phiên bản trước nhưng có nhiều cải tiến và bổ sung. Hiện nay thì HTTP 2.0 chưa được dùng phổ biến do còn khá mới và do các doanh nghiệp Web cũng phần nào ngại chuyển đổi. Do vậy, HTTP 1.1 vẫn là giao thức HTTP phổ biến nhất. HTTP 1.0 vẫn còn được sử dụng nhiều trong hệ thống Proxy và một số ứng dụng cũ (wget). ==(Để tìm hiểu vì sao HTTP 1.0 vẫn còn được dùng nhiều trong các hệ thống Proxy thì ta phải nắm HTTP 1.0 và HTTP 1.1 cache dữ liệu như thế nào?)==
Request Method phổ dụng của HTTP:
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
- OPTIONS
- CONNECT
- PATCH
Ngoài Method, URI (Địa chỉ định danh của tài nguyên), HTTP Version thì trong Request Header có một số trường thông dụng sau:
- Accept: loại nội dung có thể nhận được từ thông điệp response. Ví dụ: text/plain, text/html…
- Accept-Encoding: các kiểu nén được chấp nhận. Ví dụ: gzip, deflate, xz, exi…
- Connection: tùy chọn điều khiển cho kết nối hiện thời. Ví dụ: keep-alive, Upgrade…
- Cookie: thông tin HTTP Cookie từ server.
- User-Agent: thông tin về user agent của người dùng.
Đọc thêm: List of HTTP Headers
Phân biệt GET và POST
Hai phương thức được sử dụng nhiều nhất trong HTTP request là GET và POST
Với GET, câu truy vấn sẽ được đính kèm vào đường dẫn của HTTP request. Ví dụ: /?username=”abc”&password=”def”
Một số đặc điểm của phương thức GET:
- GET request có thể được cached, bookmark và lưu trong lịch sử của trình duyệt.
- GET request bị giới hạn về chiều dài, do chiều dài của URL là có hạn.
- GET request không nên dùng với dữ liệu quan trọng, chỉ dùng để nhận dữ liệu.
Ngược lại, với POST thì câu truy vấn sẽ được gửi trong phần message body của HTTP request, một số đặc điểm của POST như:
- POST không thể cached, bookmark hay lưu trong lịch sử trình duyệt.
- POST không bị giới hạn về độ dài.
Response Code
Response Code chỉ ra trạng thái của một Repsonse khi phản hồi một request từ Web Client - Thành công hay thất bại, có lỗi hay không? Lỗi của ai?
- 1xx - Informational
- 2xx - Success (200 - OK, 202 - Accepted, 204 - No Content)
- 3xx - Redirection (301 Moved Permanently: tài nguyên đã được chuyển hoàn toàn tới địa chỉ Location trong HTTP response. 303 See other: tài nguyên đã được chuyển tạm thời tới địa chỉ Location trong HTTP response. 304 Not Modified: tài nguyên không thay đổi từ lần cuối client request, nên client có thể sử dụng đã lưu trong cache.)
- 4xx - Client Error (400 - Bad Request, 401 - Unauthorized, 403 - Forbidden, 404 - Not Found, 405 - Method Not Allowed, 408 - Request Timeout, 429 - Too many requests)
- 5xx - Server Error (500 - Internal Server Error, 503 - Service Unavailable, 504 - Gateway Timeout, 509 - Bandwidth Limit Exceed)
Tham khảo chi tiết từng mã HTTP Status Code - https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Đặc điểm của HTTP
- Stateless Protocol - Phi trạng thái là một giao thức giao tiếp mà mỗi request được xem là một phiên giao dịch độc lập (nghĩa là nó không lưu giữ bất kỳ thông tin nào liên quan đến các request trước đó cũng như các phiên làm việc trước)
So sánh HTTP 1.0 và HTTP 1.1
Sự khác biệt của HTTP 2.0
Mở rộng: Tìm hiểu về HTTPS và SSL
Mở rộng: Tìm hiểu kỹ hơn về HTTP 2.0 - Tương lai của Web
Dương Vì Phát