Networking – Tìm hiểu một số khái niệm cơ bản

Networking là một lĩnh vực thú vị và quan trọng trong hầu hết các ngôn ngữ lập trình hiện đại. Trong bài này ta sẽ dành một chút thời gian tìm hiểu về một vài khái niệm cơ bản trong lập trình mạng như: IP, TCP, UDP, Socket,…

Internet Protocol (IP) và Packet

IP là một giao thức để truyền tải thông tin giữa hai hệ thống thông qua các packet. IP sẽ sử dụng các địa chỉ (IP Address) nguồn và đích để tạo ra các packet.

IP Packet được chia thành hai phần: header (thông tin điều khiển hay meta-data) và body (dữ liệu cần truyền tải). Thông tin điều khiển sẽ chứa các thông tin như: phiên bản (IPv4, IPv6), độ dài dữ liệu, kiểu giao thức (TCP, UDP,…), địa chỉ nguồn, đích, checksum (dùng để kiểm tra tính toàn vẹn của dữ liệu),… Dữ liệu truyền theo trong cac packet có thể bị mất, trùng lặp hoặc gửi đến sai thứ tự.

Để dễ hình dung, khái niệm này tương tự như một bức thư. Bạn viết một lá thư (data) và cho nó vào phong bì (packet), điền địa chỉ người nhận (Destination Address) và địa chỉ của bạn (Source Address). Và giống như một bức thư, bạn không thể biết packet có được gửi đến đích hay không, và cũng không có sự đảm bảo nào để bức thư bạn gửi trước sẽ đến đích trước.

Transmission Control Protocol (TCP)

Đây là giao thức trung gian hoạt động giữa chương trình ứng dụng và IP. TCP và IP là hai giao thức đầu tiên được định nghĩa và là thành phần chính để tạo nên bộ giao thức TCP/IP. Nhiệm vụ của TCP là phát hiện các lỗi khi truyền tải dữ liệu của  IP và yêu cầu gửi, sắp xếp lại, và giúp giảm sự quá tải trong mạng. Khi nhận được dữ liệu, TCP sẽ thực hiện lắp ráp lại các packet và chuyển tới chương trình ứng dụng. Do đó, TCP được gọi là giao thức “đáng tin cậy” (reliable) và hướng kết nối (connection-oriented). Điều này cũng khiến cho TCP trở nên chậm và không phù hợp trong các ứng dụng đòi hỏi sự truyền tải tức thời như VoIP.

User Datagram Protocol (UDP)

UDP là một thành phần của TCP/IP và cũng là giao thức trung gian nằm bên trên IP. Giao thức này được dùng để truyền tải dữ liệu trên mạng thông qua các datagram. Không giống như TCP, dữ liệu được truyền bởi UDP không được đảm bảo đến được đích và theo thứ tự. Thay vào đó, UDP có tốc độ truyền tải nhanh hơn TCP và được sử dụng trong các ứng dụng để truyền tải media, VoIP, game online. Do không cần phải duy trì kết nối như TCP nên UDP được gọi là giao thức không hướng kết nối (connectionless hay stateless).

Unicast, Broadcast, Multicast và Anycast

Dựa vào số lượng điểm đích được nhận dữ liệu đồng thời, người ta chia ra ba phương thức chính truyền tải dữ liệu:

–          Unicast là khái niệm chỉ sự truyền tải thông tin giữa hai điểm. Phương pháp này rất hạn chế trong việc truyền dữ liệu đến nhiều máy vì phải truyền nhiều lần và thiết lập nhiều kết nối.

–          Broadcast là sự truyền tải đến tất cả các điểm. Tuy nhiên rất lãng phí băng thông bởi vì không phải tất cả các máy đều cần đến dữ liệu.

–          Multicast được sử dụng để truyền dữ liệu từ một điểm đến một nhóm điểm, nhưng không phải tất cả.

TCP bị giới hạn chỉ sử dụng được Unicast. Trong đó UDP sử dụng được cả Unicast, Broadcast và Multicast.

Ngoài ra còn có phương thức Anycast, giống như broadcast và multicast, tuy nhiên anycast chỉ truyền đến điểm “gần nhất”.

Port

TCP và UDP sử dụng khái niệm cổng (port) cho mỗi loại ứng dụng gửi và nhận dữ liệu. Số hiệu cổng được lưu trữ trong một số 16 bit và có giá trị từ 0 đến 65535.

Các cổng được chia thành 3 loại theo phạm vi:

–          Well-known port: 0-1023

–           Registered port: 1024-49151

–          Dynamic, private port: 49152–65535

Một số ví dụ Well-known port:

Bạn có thể xem danh sách các port sử dụng cho TCP và UDP tại:

List of TCP and UDP port numbers

Internet Socket

Socket là một điểm kết thúc (endpoint) trong tiến trình truyền tải dữ liệu hai chiều (giữa hai socket). Một endpoint đơn giản là một sự kết hợp giữa địa chỉ IP và port. Các thông tin mà một socket phải có bao gồm:

–          Địa chỉ và port cục bộ

–          Địa chỉ và port kết nối tới

–          Giao thức: TCP, UDP, raw IP,…

Internet Socket được chia thành ba loại sau:

–          Datagram socket: (connectionless socket) sử dụng giao thức UDP.

–          Stream socket: (connection-oriented socket) sử dụng TCP hoặc SCTP (Stream Control Transmission Protocol)

–          Raw socket: (Raw IP socket) chỉ có hiệu lực trên router hoặc các thiết bị mạng khác. Loại socket này cho phép truyền và nhận các packet trực tiếp giữa các ứng dụng, bỏ qua tất cả các tầng trung gian.

Bảng so sánh sự khác nhau giữa TCP và UDP

TCPUDP
Ordering:TCP rearranges data packets in the order specified.UDP does not order packets. If ordering is required, it has to be managed by the application layer.
Error Checking:TCP does error checkingUDP does not have an option for error checking.
Header Size:TCP header size is 20 bytesUDP Header size is 8 bytes.
Usage:TCP is used in case of non-time critical applications.UDP is used for games or applications that require fast transmission of data. UDP’s stateless nature is also useful for servers that answer small queries from huge numbers of clients.
Function:As a message makes its way across the internet from onecomputer to another. This is connection based.UDP is also a protocol used in message transport or transfer. This is not connection based which means that one program can send a load of packets to another and that would be the end of the relationship.
Acronym for:Transmission Control ProtocolUser Datagram Protocol or Universal Datagram Protocol
Weight:TCP requires three packets to set up a socket connection, before any user data can be sent. TCPhandles reliability and congestioncontrol.UDP is lightweight. There is no ordering of messages, no tracking connections, etc. It is a small transport layer designed on top of IP.
Streaming of data:Data is read as a byte stream, no distinguishing indications are transmitted to signal message (segment) boundaries.Packets are sent individually and are checked for integrity only if they arrive. Packets have definite boundaries which are honored upon receipt, meaning a read operation at the receiver socket will yield an entire message as it was originally sent.
Speed of transfer:The speed for TCP in comparison with UDP is slower.UDP is faster because there is no error-checking for packets.
Examples:HTTP, HTTPs, FTP, SMTP Telnet etc…DNS, DHCP, TFTP, SNMP, RIP, VOIP etc…
Data Reliability:There is absolute guarantee that the data transferred remains intact and arrives in the same order in which it was sent.There is no guarantee that the messages or packets sent would reach at all.

Xem chi tiết tại trang sau: http://www.diffen.com/difference/TCP_vs_UDP