Chia sẻ kiến thức lập trình

Lập trình socket

Vô cùng quan trọng

Socket hay lập trình mạng là một trong những lĩnh vực quan trọng bậc nhất và cũng thú vị bậc nhất trong lĩnh vực công nghệ thông tin. Nếu không có socket, chúng ta đã không có mạng internet như ngày nay, không có client, không có server, không có livestreaming, IOT, gần như chúng ta sẽ không có gì cả ngoài chiếc máy tính nhàm chán.

Không dễ để tạo ra

Lập trình socket là một lĩnh vực vô cùng khó khăn và phức tạp, nhưng ngày nay chúng ta lại chỉ biết đến phần ngọn thông qua các thư viện open source như Netty hay các thư viện vô cùng đắt đỏ như Smartfoxserver hay Photon server hay những dịch vụ cloud như firebase. Bạn thấy đó, mọi chuyện không hề đơn giản.

Để tạo được ra các thư viện lập trình socket, đòi hỏi chúng ta phải biết rất nhiều thứ từ mạng máy tính, các giao thức cho đến các kỹ thuật lập trình.

Mô hình mạng 7 lớp

Mô hình OSI (Open Systems Interconnection Reference Model) là một cách thức để mô tả nguyên lý hoạt động của hạ tầng mạng ngày nay. Mô hình OSI sắp xếp một giao thức với chức năng của nó vào một hoặc một nhóm các lớp tương ứng. Mỗi một tầng cấp có một đặc tính là nó chỉ sử dụng chức năng của tầng dưới nó, đồng thời chỉ cho phép tầng trên sử dụng các chức năng của mình. Mô hình OSI được coi như một mô hình tiêu chuẩn dùng để tham chiếu và giảng dạy trong lập trình mạng, còn trong thực tế các nhà cung cấp thiết bị mạng có lập trình cho thiết bị của họ theo mô hình này không thì mình cũng không rõ, :), còn với mình khi đi lập trình ezyfox socket server mình cũng cần tham khảo mô hình này rất nhiều.

2 giao thức quan trọng

Mặc dù có tới 7 tầng với rất nhiều giao thức, nhưng khi lập trình socket chúng ta sẽ chỉ cần quan tâm chính đến 2 giao thức ở tầng 4 đó là TCP và UDP

TCP

TCP (Transmission Control Protocol) là giao thức gửi tin có đảm bảo, nghĩa là giao thức này sẽ đảm bảo cho chúng ta sẽ gửi bằng được gói tin đến đích (cho đến đến khi timeout), và các gói tin sẽ được gửi nhận theo thứ tự. Có rất nhiều giao thức được xây dựng dựa trên TCP, phổ biến nhất phải kể đến HTTP và Websocket

UDP

UDP (User Datagram Protocol) là giao thức truyền tin không đảm bảo. Nghĩa là nó không đảm bảo việc gói tin có gửi được đến đích hay không, nhưng điểm rất hay của nó là không yêu cầu phải tạo kết nối giữa client và server. Chúng ta có thể sử dụng giao thức này cho các ứng dụng đòi hỏi tốc độ gửi nhận gói tin nhanh và không yêu cầu độ tin cậy cao. Các ứng dụng phổ biến sử dụng UDP đó là livestreaming, VoIP, hay DNS (Domain Name System).

Các kỹ thuật cần thiết

Lập trình socket yêu cầu rất nhiều kỹ thuật khó, đòi hỏi chúng ta phải bỏ rất nhiều thời gian, công sức để tìm hiểu và phải làm chủ được nó.

Lập trình đa luồng

Đương nhiên rồi, trong một chương trình sử dụng socket có rất nhiều luồng: đọc, ghi dữ liệu, xử lý request, quản lý session, chính vì vậy mà không thể không sử dụng đa luồng

Serialize/Deserialize dữ liệu

Dữ liệu gửi nhận qua socket đều là byte bit, chính vì vậy để có thể lập trình ở mức application, chúng ta cần phải biến đổi từ dạng byte bit về các đối tượng mà chúng ta hay sử dụng, từ đó chúng ta mới có thể xử lý được request/response được gửi nhận. Hiện tại có một số giao thức hỗ trợ serialize và deserialize rất mạnh như Protobuf, MsgPack hay các giao thức sử dụng JSON.

Design pattern

Lập trình socket sử dụng rất nhiều design pattern khác nhau như template method, observer, command, bridge, adapter, proxy hay singleton design pattern. Phải sử dụng các design pattern thì chúng ta mới có thể kết nối và vận chuyển dữ liệu giữa các tầng với nhau được

Bảo mật thông tin

Việc gửi nhận dữ liệu thông qua mạng internet chưa bao giờ là an toàn. Chính vì vậy chúng ta cần biết thêm về các kỹ thuật để đảm bảo an toàn thông tin cho người sử dụng như: kỹ thuật mã hoá RSA, AES, kỹ thuật kiểm tra toàn vẹn gói tin, vân vân và mây mây

Kết luận

Lập trình socket là một lĩnh vực vô cùng phức tạp nhưng cũng rất hay ho (đặc biệt là lĩnh vực lập trình game server hay livestreaming) vậy nên không thể trong một bài viết mà có thể nói hết mọi thứ được, cùng chờ đón một loạt bài viết về socket mọi người nhé.

Tham khảo

  1. OSI
  2. TCP
  3. UDP
Share: