TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
LẬP TRÌNH MẠNG (Network programming)
Giảng viên: Ths. Trần Đắc Tốt – Khoa CNTT Email: tottd@cntp.edu.vn Website: www.oktot.com Facebook: https://www.facebook.com/oktotcom/
Chương 1: Những vấn đề cơ bản của lập trình mạng
1
MÔN HỌC: LẬP TRÌNH MẠNG
Chương 1: Những vấn đề cơ bản của lập trình mạng
Chương 2: Lập trình SOCKET hướng kết nối
Chương 3: Lập trình SOCKET phi kết nối
Chương 4: Sử dụng các lớp trợ giúp của C# SOCKET
Chương 5: Lập trình đa luồng (MULTI-THREADING)
Chương 1: Những vấn đề cơ bản của lập trình mạng
2
CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính
Mô hình truyền thông
Các mô hình tham chiếu
Chương 1: Những vấn đề cơ bản của lập trình mạng
3
Tổng quan về lập trình mạng
MỤC ĐÍCH – YÊU CẦU
Mục đích: Giới thiệu các khái niệm cơ bản về
Mạng máy tính, truyền thông mạng máy tính
Windows Socket
Mô hình OSI, TCP/IP
Lập trình Socket trong C#
Các lớp DNS trong C#
Yêu cầu: Sinh viên nắm vững các khái niệm cơ bản về
Lập trình mạng
Chương 1: Những vấn đề cơ bản của lập trình mạng
4
Sử dụng socket trong lập trình mạng
CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính
Mô hình truyền thông
Các mô hình tham chiếu
Chương 1: Những vấn đề cơ bản của lập trình mạng
5
Tổng quan về lập trình mạng
Cơ bản về mạng máy tính
Chương 1: Những vấn đề cơ bản của lập trình mạng
6
Cơ bản về mạng máy tính
Khái niệm mạng máy tính
Tập hợp các máy tính và thiết bị mạng kết nối với nhau theo một kiến trúc nào đó để trao đổi dữ liệu
Máy tính: máy trạm, máy chủ,
bộ định tuyến, switch..
Kết nối bằng phương tiện truyền thông
Các dạng máy tính ?
Chương 1: Những vấn đề cơ bản của lập trình mạng
7
Theo một kiến trúc nào đó
Cơ bản về mạng máy tính
Chương 1: Những vấn đề cơ bản của lập trình mạng
8
Internet ngày nay
Cơ bản về mạng máy tính
Chương 1: Những vấn đề cơ bản của lập trình mạng
9
Xử lý tập trung hay phân tán
Cơ bản về mạng máy tính
Trục (Bus) Vòng (Ring) Sao (Star)
Thực tế là sự kết hợp của nhiều hình trạng
Chương 1: Những vấn đề cơ bản của lập trình mạng
10
Kiến trúc mạng: Hình trạng (topology) và giao thức (protocol)
Cơ bản về mạng máy tính
Chương 1: Những vấn đề cơ bản của lập trình mạng
11
Giao thức là gì?
Cơ bản về mạng máy tính
Protocol: Quy tắc để truyền thông
Gửi: Một thông điệp với yêu cầu hoặc thông tin Nhận: Nhận một thông điệp với thông tin, sự kiện hoặc hành động
Định nghĩa khuôn dạng và thứ tự truyền, nhận thông điệp giữa các thực thể trên mạng hoặc các hành động tương ứng khi nhận thông điệp
Ví dụ về giao thức mạng: TCP, UDP, IP, HTTP, Telnet, SSH, Ethernet, …
20
Chương 1: Những vấn đề cơ bản của lập trình mạng
12
Giao thức mạng
CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính
Mô hình truyền thông
Các mô hình tham chiếu
Chương 1: Những vấn đề cơ bản của lập trình mạng
13
Tổng quan về lập trình mạng
Mô hình truyền thông
Chuyển mạch kênh
• Trao đổi dữ liệu sử dụng một kênh riêng
khác cho đến khi đóng liên kết
• Mỗi liên kết sử dụng một kênh. Tài nguyên của kênh đó không được sử bởi kênh
• Tài nguyên được gán riêng cho mỗi kênh, kê cả khi tài nguyên đó đang rỗi, người
khác cũng không sử dụng được
Mô hình truyền thông
Chuyển mạch gói
• Dữ liệu được chia thành các gói(packets) và được truyền qua mạng • Nhiều liên kết có thể chia sẻ một kênh • Internet (Với giao thức IP) sử dụng chuyển mạch gói • Toàn bộ băng thông được chia sẻ cho tât cả mọi người • Nếu còn bằng thông thì ai cũng có thể sử dụng được
Mô hình truyền thông
Chuyển mạch kênh
Mỗi kênh chỉ sử dụng một liên kết
Bảo đảm băng thông (cần cho các ứng dụng audio/video)
Lãng phí nếu liên kết đó không sử dụng hết khả năng của kênh
Chuyển mạch gói
Tăng hiệu quả sử dụng băng thông
Tốt cho các dữ liệu đến ngẫu nhiên, không định trước
Hạn chế: Tắc nghẽ làm trễ và mất gói tin, không đảm bảo băng thông
Chương 1: Những vấn đề cơ bản của lập trình mạng
16
So sánh
Mô hình truyền thông
Truyền thông hướng liên kết và không hướng liên kết
Truyền thông hướng liên kết
Dữ liệu được truyền qua một liên kết đã được thiết lập
Thông qua 3 giai đoạn: Thiết lập liên kết, truyền dữ liệu hủy bỏ liên
Đáng tin cậy
kết.
Không thiết lập liên kết, chỉ có giai đoạn truyền dữ liệu
Truyền thông không hướng liên kết
Chương 1: Những vấn đề cơ bản của lập trình mạng
17
Không tin cậy - “Best effort”
CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính
Mô hình truyền thông
Các mô hình tham chiếu
Chương 1: Những vấn đề cơ bản của lập trình mạng
18
Tổng quan về lập trình mạng
Các mô hình tham chiếu
Chương 1: Những vấn đề cơ bản của lập trình mạng
19
OSI - Open System Interconnection: Bao gồm 7 tầng
Các mô hình tham chiếu
Chức năng chung của các tầng
Vật lý: Truyền bits “trên đường truyền”
Liên kết dữ liệu: Truyền dữ liệu giữa các thành phần nối kết trong mạng
Mạng: chọn đường, chuyển tiếp gói tin từ nguồn tới đích
Giao vận: Xử lý việc truyền-nhận dữ liệu cho các ứng dụng
Phiên: Đồng bộ hóa, check-point, khôi phục quá trình trao đổi
Trình diễn: cho phép các ứng dụng biễu diễn dữ liệu, e.g., mã hóa, nén,
chuyển đổi…
Chương 1: Những vấn đề cơ bản của lập trình mạng
20
Ứng dụng: Hỗ trợ các ứng dụng trên mạng
Các mô hình tham chiếu
Mô hình OSI và TCP/IP
Chương 1: Những vấn đề cơ bản của lập trình mạng
21
Trong mô hình TCP/IP (Internet), chức năng 3 tầng trên được phân định vào một tầng duy nhất
Mô hình phân tầng của Internet
Ví dụ về quá trình gửi dữ liệu từ nguồn, qua nút trung gian (bộ đinh tuyến), rồi tới đích
FTP
FTP
TCP
TCP
IP
IP
IP
Ethernet/10M
10M
100M
100M/Ethernet
CAT5
CAT5
CAT5
CAT5
Đích
Nguồn
Nút trung gian
Chương 1: Những vấn đề cơ bản của lập trình mạng
Đóng gói dữ liệu (Encapsulation)
Gói quà
Trang trí
Dán địa chỉ
Địa chỉ
Địa chỉ
Chương 1: Những vấn đề cơ bản của lập trình mạng
PDU: Protocol Data Unit – Đơn vị dữ liệu giao thức
Layer (N+1)
(N+1) PDU
Service interface
Protocol N
(N)
PDU
Layer (N)
HN
Service interface
Protocol N-1
addr.
Layer (N-1)
(N-1) PDU
HN
HN-1
Chương 1: Những vấn đề cơ bản của lập trình mạng
Họ giao thức TCP/IP và quá trình đóng gói
Bên gửi
Mỗi tầng thêm các thông tin điều khiển (header) vào gói tin và truyền xuống tâng
dưới Bên nhận
Mỗi tầng xử lý thông tin dựa trên phần header, sau đó bỏ header và truyền dữ liệu lên
tầng trên
Ex:HTTP header
Application
Application
Data
Data
TCP header
TCP
TCP
IP header
IP
IP
Network Interface
Ethernet Frame
Network Interface
Physical
Physical
Signal
Sender
Receiver
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
Dữ
liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
TCP header
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
IP header TCP header
Dữ liệu - payload
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
Ethernet header
IP header TCP header
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
IP header
TCP header
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
IP header TCP header
WDM header
Dư liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
IP header TCP header
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
Ethernet header
IP header TCP header
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
IP header
TCP header
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM CAT5
CAT5
CAT5
Intermediate node
End node
End node
TCP header
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Protocol stack và quá trình đóng gói
FTP
FTP
TCP
TCP
IP
IP
IP
IP
Ethernet/10M
10M
Ethernet/100M
10G
10G
CAT5 WDM
WDM
CAT5
CAT5
CAT5
Intermediate node
End node
End node
Dữ liệu - payload
Chương 1: Những vấn đề cơ bản của lập trình mạng
Tóm tắt: ưu điểm của kiến trúc phân tầng
Chia nhỏ cho phép dễ dàng xác định chức năng của mỗi tầng
Các tầng hoạt động độc lập
đến các tầng xa hơn.
Tầng trên chỉ quan tâm đến việc sử dụng tầng dưới mà không quan tâm
Cho phép định nghĩa giao diện chung giữa các tầng
Khả năng mở rộng
Mềm dẻo, linh hoạt với các công nghệ mới
Trao đổi giữa các tầng đồng mức: Có thể cải tiến hệ thống bằng cách thay
đổi công nghệ của tầng tương ứng. Vd: ISDN→ADSL→FTTH、IPv4→IPv6
Chương 1: Những vấn đề cơ bản của lập trình mạng
Nếu không phân tầng: Khi muốn thay đổi, phải làm toàn bộ
Định danh trên Internet và quan hệ với các tầng
Port Number, e.g. Port 80
application
TCP/UDP
IP address, e.g. 203.12.15.165
IP
data link
Physical address / MAC address e.g. 00:11:24:79:8e:82
physical
Chương 1: Những vấn đề cơ bản của lập trình mạng
Địa chỉ dùng trong tầng liên kết dữ liệu
Địa chỉ vật lý /địa chỉ MAC
Sử dụng trong tầng liên kết dữ liệu Cố định trên card mạng NIC ( Network Interface Card)
Sử dụng để địa chỉ hóa máy tính trong các mạng quảng bá
HEX
00:11:24:79:8e:82
BIN
00000000
00010001 00100100 01111001
10001110 10000010
Gán bởi nhà sản xuất
OUI
OUI (Organizationally Unique Identifier): Mã nhà sản xuất
Mỗi nhà sản xuất có các giá trị OUI riêng
Một nhà sản xuất có thể có nhiều OUI
Chương 1: Những vấn đề cơ bản của lập trình mạng
Định danh dùng trên Internet
Địa chỉ IP
Sử dụng để định danh máy tính trong một mạng IP ví dụ :
133.113.215.10 (ipv4) 2001:200:0:8803::53 (ipv6)
Chương 1: Những vấn đề cơ bản của lập trình mạng
Dùng trong giao thức IP - Internet Protocol (tầng mạng) Giá trị phụ thuộc từng mạng, mỗi card mạng được gán một địa chỉ IP
Địa chỉ sử dụng trong tầng giao vận
Số hiệu cổng: Một địa chỉ phụ, dùng kèm theo địa chỉ IP
Các ứng dụng được định danh bởi một địa chỉ IP và một số hiệu cổng
Chương 1: Những vấn đề cơ bản của lập trình mạng
E.g. HTTP cổng 80, FTP cổng 20, 21 …
Các RFC quan trọng
RFC Document
Giao thức
RFC 821
SMTP (email, outgoing)
RFC 954
WHOIS
RFC 959
FTP (uploading and downloading)
RFC 1939
POP3 (email, incoming)
RFC 2616
HTTP (Web browsing)
RFC 793
TCP (runs under all above protocols)
RFC 792
ICMP (ping)
RFC 791
IP (runs under TCP and ICMP)
Chương 1: Những vấn đề cơ bản của lập trình mạng
42
CHƯƠNG 1: NHỮNG VẤN ĐỀ CƠ BẢN CỦA LẬP TRÌNH MẠNG
Cơ bản về mạng máy tính
Mô hình truyền thông
Các mô hình tham chiếu
Chương 1: Những vấn đề cơ bản của lập trình mạng
43
Tổng quan về lập trình mạng
Mô hình Client / Server
Phục vụ
Xử lý
Yêu cầu
Tạo ra 1 yêu cầu
Lắng nghe yêu cầu
Gửi yêu cầu qua Server
Nhận yêu cầu
Chờ Server xử lý
Xử lý yêu cầu
Nhận kết quả trả về và
Gửi kết quả trả về
xử lý theo mục đích riêng
cho Client
Dạng thức của thông điệp phải tuân theo protocol của dịch vụ.
44
Mô hình Client / Server
• Mô hình Client-Server của dịch vụ WEB:
Xử lý
Trình duyệt
Trang Web
Web Server
file1.htm
Web Client
Mô hình Client / Server
Các chế độ giao tiếp:
Chế độ giao tiếp nghẽn
Chế độ giao tiếp không nghẽn
Các kiểu kiến trúc chương trình
Chức năng của 1 chương trình ứng dụng:
Giao diện người dùng (User Interface):
Tương tác với người dùng
Nhập liệu, báo biểu, thông báo ra màn hình, …
Dịch vụ nghiệp vụ (Business Rule):
Tính toán dữ liệu
Xử lý thông tin
Dịch vụ lưu trữ (Data Storage):
Lưu trữ dữ liệu
Truy vấn dữ liệu
Các kiểu kiến trúc chương trình
Mô hình của 1 chương trình ứng dụng
Các kiểu kiến trúc chương trình
• Kiến trúc đơn tầng:
User Interface
Sử dụng trên 1 máy tính
Dễ cài đặt
Business Rule
Nhiều nhược điểm
Data Storage
Cần có kiến trúc mới – Client/Server
Các kiểu kiến trúc chương trình
• Kiến trúc 2 tầng (2-tiered):
Client/Server kiểu Fat Client
Client/Server kiểu Fat Server
Các kiểu kiến trúc chương trình
• Kiến trúc đa tầng (n tiered):
– Thường gọi là Ứng dụng phân tán.
Middleware
Application Server
Database Server
Client
Mô hình Client/Server 3 tầng
51
– Mỗi thành phần có nhiệm vụ riêng.
Các kiểu kiến trúc chương trình
• So sánh kiến trúc 2 tầng và kiến trúc
3 tầng của ứng dụng
Giới thiệu về Socket
Sockets cung cấp một interface để lập trình mạng tại tầng Transport.
Nhiều NNLT: C, C++, Java, VB, C#, . . .
Một socket là một end-point của một liên kết giữa hai ứng dụng mạng.
Windows Socket Application Programming Interface (Winsock API)
Winsock hỗ trợ xây dựng các ứng dụng mạng trên nền TCP/IP.
.NET hỗ trợ lập trình mạng tốt nhất so với các sản phẩm khác của
Microsoft
=> Mục tiêu: nghiên cứu cách xây dựng ứng dụng truyền thông
Chương 1: Những vấn đề cơ bản của lập trình mạng
53
client/server dùng Sockets
Giới thiệu về Socket
Giới thiệu về Windows Socket
Đầu tiên Windows Socket được phát triển cho hệ điều hành Linux, nhưng nay nó đã được cài đặt trền Windows và hỗ trợ cơ chế điều khiển thông điệp tự nhiên của Windows.
Windows Socket đã phát triền qua nhiều phiên bản
Windows Sockets Application Programming Interface (WinSock API) là một giao diện lập trình mạng dưới nền tảng của Windows.
Vd phiên bản chạy
Chương 1: Những vấn đề cơ bản của lập trình mạng
54
trên Windows XP và 2000 là 2.2
Giới thiệu về Socket
Giới thiệu về Windows Socket
Windows Sockets cho phép những nhà sản xuất cung cấp một giao
dụng theo những đặc tả của Windows Sockets và có thể chạy được
diện đồng nhầt để người lập trình có thể viết các chương trình ứng
Các phiên bản sau của Windows socket đều tương thích với các phiên
trên bất kỳ hệ thống nào có hỗ trợ Windows Sockets.
bản trước của nó. Điều đó có nghĩa là một ứng dụng được viết cho
của Windows Sockets.
phiền bản trước cũng hoàn toàn có thể chạy được trên phiên bản sau
Appletalk, ATM,….
Chương 1: Những vấn đề cơ bản của lập trình mạng
55
Windows Sockets hỗ trợ nhiều giao thức khác: IPX/SPX, Apple’s
Giới thiệu về Socket
Một số khái niệm
Một TCP/IP Sockets được xác định bằng sự kết nối của một địa chỉ và
Socket: Một điểm giao tiếp đầu cuối của một chương trình trên mạng.
một số hiệu cổng
Địa chỉ sẽ xác định máy mà Sockets đó làm việc
Cổng sẽ xác định chính xác tiến trình đang thực hiện Sockets trên
Chương 1: Những vấn đề cơ bản của lập trình mạng
56
máy có địa chỉ đó.
Khái niệm địa chỉ và cổng (Address & Port)
Chương 1: Những vấn đề cơ bản của lập trình mạng
57
Khái niệm địa chỉ và cổng (Address & Port)
Nguyên lý
Ví dụ: có 2 ứng dụng của máy A muốn trao đổi với với 2 ứng dụng trên máy B
Trong máy có rất nhiều ứng dụng muốn trao đổi với các ứng dụng khác thông qua mạng.
Mỗi máy tính chỉ có duy nhất một đường truyền dữ liệu (để gửi và nhận)
Vấn đề
Có thể xảy ra "nhầm lẫn" khi dữ liệu từ máy A gửi đến máy B thì trên máy B không biết là dữ liệu đó gửi cho ứng dụng nào?
Chương 1: Những vấn đề cơ bản của lập trình mạng
58
Mỗi ứng dụng trên máy B sẽ được gán một số hiệu (cổng: Port), từ 0..65535.
Khái niệm địa chỉ và cổng (Address & Port)
Cách giải quyết
Trên máy B, các ứng dụng chỉ việc kiểm tra giá trị cổng trên mỗi gói tin xem có trùng với số hiệu cổng của mình (đã được gán – chính là giá trị lại thì không làm gì (vì LocalPort) hay không? Nếu bằng thì xử lý, trái không phải là của mình).
Chương 1: Những vấn đề cơ bản của lập trình mạng
59
Khi ứng dụng trên máy A muốn gửi cho ứng dụng nào trên máy B thì chỉ việc điền thêm số hiệu cổng (vào trường RemotePort) vào gói tin cần gửi.
Khái niệm địa chỉ và cổng (Address & Port)
Một số quy định
Không bao giờ có 2 ứng dụng lại cùng dùng 1 port
Các port từ 0 – 1023 (Well-know): dùng cho các ứng dụng quan trọng
trên hệ điều hành
Các port từ 1024 – 49151 (Registered): dành cho người lập trình (khuyến
cáo tuân theo)
Chương 1: Những vấn đề cơ bản của lập trình mạng
60
Các port từ 49152 – 65535 (Dynamic): dự trữ
Lập trình Socket với C#
Giao tiếp sử dụng socket có thể ở chế độ hướng kết nối (giao thức TCP)
hoặc không hướng kết nối (giao thức UDP) bằng cách xác định giao thức
Program A
Program B
port
port
Transport protocol
Transport protocol
port Network protocol
port Network protocol
Network driver
Network driver
Host1
Host2
Giao tiÕp gi÷a hai qu¸ tr×nh sö dông Socket
Chương 1: Những vấn đề cơ bản của lập trình mạng
61
của tầng vận chuyển.
Lập trình Socket với C#
ChÕ ®é kh«ng nèi kÕt
• Chế độ có nối kết (connection):
(connectionless): Kh«ng tån t¹i kªnh giao tiÕp ¶o gi÷a
• Tồn tại kênh giao tiếp ảo giữa
D÷ liÖu được gëi ®i theo chÕ ®é
client vµ server. client và server.
kh«ng b¶o ®¶m: Kh«ng kiÓm tra lçi. Kh«ng ph¸t hiÖn, kh«ng truyÒn l¹i
gãi tin lçi, mÊt.
bảo đảm: – Kiểm tra lỗi. – Truyền lại gói tin lỗi, mất – Bảo đảm thứ tự các gói tin – . . .
Kh«ng b¶o ®¶m thø tù c¸c gãi tin . . .
• Dữ liệu được gởi đi theo chế độ
D÷ liÖu kh«ng chÝnh x¸c, tèc ®é
• Dữ liệu chính xác, Tốc độ truyền
truyÒn nhanh.
ThÝch hîp cho c¸c øng dông cÇn tèc ®é, kh«ng cÇn chÝnh x¸c cao: truyÒn ©m thanh, h×nh ¶nh . . .
Chương 1: Những vấn đề cơ bản của lập trình mạng
62
chậm.
Lập trình Socket với C#
Giao tiếp sử dụng socket có thể ở chế độ hướng kết nối (giao thức TCP)
hoặc không hướng kết nối (giao thức UDP) bằng cách xác định giao thức
Chương 1: Những vấn đề cơ bản của lập trình mạng
63
của tầng vận chuyển.
Lập trình Socket với C#
Các lớp trong .NET Framework được tạo ra để cung cấp một giao diện
dễ dàng cho các lập trình viên.
Nội dung phần này sẽ gồm:
IP Addresses in C#
Chương 1: Những vấn đề cơ bản của lập trình mạng
64
Using C# Sockets
Lớp IPAddress
Trên Internet mỗi một trạm (có thể là máy tính, máy in, thiết bị …) đều có một định danh duy nhất, định danh đó thường được gọi là một địa chỉ (Address).
Địa chỉ trên Internet là một tập hợp gồm 4 con số có giá trị từ 0-255 và cách nhau bởi dấu chấm.
Để thể hiện địa chỉ này, người ta có thể viết dưới các dạng sau:
Tên: ví dụ như May01, Server, …
Địa chỉ IP nhưng đặt trong một chuỗi: "192.168.1.1", "127.0.0.1“
Đặt trong một mảng 4 byte, mỗi byte chứa một số từ 0-255.
1 (byte 1)
168 (byte 2)
192 (byte 3)
2 (byte 0)
13/07/2016
65
Hoặc cũng có thể là một số (long), có độ dài 4 byte. Ví dụ, với địa chỉ 192.168.1.2 ở trên thì giá trị đó sẽ là 33663168 (số ở hệ thập phân khi xếp liền 4 byte ở trên lại với nhau) 00000010000000011010100011000000
Lớp IPAddress
• Như vậy, để đổi một địa chỉ chuẩn ra dạng số chúng ta chỉ việc tính toán
cho từng thành phần.
• Ví dụ: Đổi địa chỉ 192.168.1.2 ra số, ta tính như sau:
2 * 256 ^ 3 + 1 * 256 ^ 2 + 168 * 256 ^ 1 + 192 * 256 ^ 0 =
• IPAddress được sử dụng để biểu hiện một địa chỉ IP duy nhất
33663168
• Hàm tạo là : public IPAddress(long address)
• Tuy nhiên hàm tạo này không được sử dụng thường xuyên.
• Lớp IPAddress cung cấp một số phương thức khác để làm việc với địa chỉ
13/07/2016
66
IP
Lớp IPAddress: các thành viên
Tên phương thức Mô tả
AddressFamily
Trả về họ địa chỉ của địa chỉ IP hiện hành. Nếu địa chỉ ở dạng IPv4 thì kết quả là Internetwork và InternetworkV6 nếu là địa chỉ IPv6.
-
Constructor -
IPAddress(Số_Long) Tạo địa chỉ IP từ một số kiểu long IPAddress(Mảng_Byte) Tạo địa chỉ IP từ một mảng byte (4 byte).
HostToNetworkOrder
Đảo thứ tự byte của một số cho đúng với thứ tự byte trong địa chỉ IPAddress.
13/07/2016
67
GetAddressBytes Chuyển địa chỉ thành mảng byte (4 byte).
Lớp IPAddress: các thành viên
Tên phương thức Mô tả
IsLoopback Cho biết địa chỉ có phải là địa chỉ lặp hay không?
Parse
NetworkToHostOrder Đảo thứ tự byte của một địa chỉ cho đúng với thứ tự byte thông thường.
Chuyển một địa chỉ IP ở dạng chuỗi thành một địa chỉ IP chuẩn (Một đối tượng IPAddress)
ToString Trả về địa chỉ IP (một chuỗi) nhưng ở dạng ký pháp có dấu chấm. (Ví dụ "192.168.1.1").
Kiểm tra xem một địa chỉ IP (ở dạng chuỗi) có phải đúng là địa chỉ IP hợp lệ hay không? True = đúng
13/07/2016
68
TryParse (S: String)
IPAddress: Ví dụ tạo địa chỉ
• Cách 2: Dùng hàm khởi tạo
• Cách 1: Dùng hàm khởi tạo Byte[] b = new Byte[4]; b[0] = 192; b[1] = 168; b[2] = 1; b[3] = 2; IPAddress Ip1 = new IPAddress(b);
IPAddress Ip2 = new IPAddress(33663168);
• Cách 3: Dùng hàm khởi tạo
IPAddress Ip3 = IPAddress.Parse(“192.168.1.2")
• Cách 4: Thông qua tính toán
13/07/2016
69
Long So = 192* 256^0+168* 256^1+1* 256^2 + 2*256^3; IPAddress Ip4 = new IPAddress(So);
Lớp IPAddress: các thành viên
Tên thuộc tính Mô tả
Cung cấp một địa chỉ IP (thường là 0.0.0.0) để chỉ ra rằng Server phải lắng nghe các hoạt động của Client trên tất cả các Card mạng (sử dụng khi xây dựng Server). Thuộc tính này chỉ đọc.
Any
Broadcast
Cung cấp một địa chỉ IP quảng bá (Broadcast, thường là 255.255.255.255), ở dạng số Long. Muốn lấy ở dạng chuỗi, viết: Broadcast.ToString(). Thuộc tính này chỉ đọc.
Loopback Trả về một địa chỉ IP lặp (IP Loopback, ví dụ 127.0.0.1). Thuộc tính này chỉ đọc.
Address
13/07/2016
70
Một địa chỉ IP (An Internet Protocol (IP) address) ở dạng số Long. (Muốn chuyển sang dạng dấu chấm, viết : Address.ToString())
IPAddress: Ví dụ kiểm tra địa chỉ
private void KiemTra() {
}
13/07/2016
71
IPAddress ip; String Ip4 = "127.0.0.1"; String Ip5 = "999.0.0.1"; MessageBox.Show(IPAddress.TryParse(Ip4, out ip).ToString()); MessageBox.Show(IPAddress.TryParse(Ip5, out ip).ToString());
IPAddress: Ví dụ chuyển địa chỉ hiện hành ra mảng
void ChuyenDoi() {
IPAddress Ip3 = new IPAddress(16885952); Byte[] b= new Byte[4]; b = Ip3.GetAddressBytes(); MessageBox.Show("Address: " + b[0] + "." + b[1] + "." + b[2]
+ "." + b[3]);
13/07/2016
72
}
Lớp IPEndpoint
• Trong mạng, để hai trạm có thể trao đổi thông tin được với nhau thì chúng
cần phải biết được địa chỉ (IP) của nhau và số hiệu cổng mà hai bên dùng
• Lớp IPAddress mới chỉ cung cấp địa chỉ IP (IPAddress), như vậy vẫn còn
để trao đổi thông tin.
thiếu số hiệu cổng (Port number).
cổng và địa chỉ IP
• .NET Framework sử dụng IPEndPoint để biểu diễn một sự kết hợp giữa
• Hai hàm tạo của lớp này là:
– IPEndPoint(long address, int port)
– IPEndPoint(IPAddress address, int port)
13/07/2016
73
• Hàm tạo thứ 2 được sử dụng phổ biến hơn
Lớp IPEndpoint: các thành viên
Tên thuộc tính Mô tả
Address
Trả về hoặc thiết lập địa chỉ IP cho endpoint. (Trả về một đối tượng IPAddress)
AddressFamily Lấy về loại giao thức mà Endpoint này đang sử dụng.
13/07/2016
74
Port Lấy về hoặc thiết lập số hiệu cổng của endpoint.
Lớp IPEndpoint: các thành viên
Mô tả
Tên phương thức
IPEndPoint (Int64, Int32)
Tạo một đối tượng mới của lớp IPEndPoint, tham số truyền vào là địa chỉ IP (ở dạng số) và cổng sẽ dùng để giao tiếp.
IPEndPoint (IPAddress, Int32) Tạo một đối tượng mới của lớp IPEndPoint, Tham số truyền vào là một địa chỉ IPAddress và số hiệu cổng dùng để giao tiếp. (Tham khảo cách tạo IPAddress ở phần trên)
Create Tạo một endpoint từ một địa chỉ socket (socket address).
ToString
13/07/2016
75
Trả về địa chỉ IP và số hiệu cổng theo khuôn dạng ĐịaChỉ: Cổng, ví dụ: 192.168.1.1:8080
Lớp IPEndpoint: ví dụ khởi tạo
private void TaoEndpoint() {
}
13/07/2016
76
// Tạo một địa chỉ IP IPAddress IPAdd = IPAddress.Parse("127.0.0.1"); // Truyền vào cho hàm khởi tạo để tạo IPEndpoint IPEndPoint IPep = new IPEndPoint(IPAdd, 10000);
Lớp IPEndpoint: ví dụ khởi tạo
private void TaoEndPointBoiTenMay() {
IPAddress IPAdd = new IPAddress(); //tạo đối tượng IP từ tên của máy thông qua phương thức tĩnh Dns.GetHostAddresses của lớp DNS IPAdd = Dns.GetHostAddresses("Localhost")[0]; IPEndPoint IPep = new IPEndPoint(IPAdd, 10000);
13/07/2016
77
}
Lớp IPEndpoint: ví dụ khởi tạo
Lưu ý : Vì một máy tính có thể có nhiều card mạng (Interface) do vậy có
Hàm GetHostAddresses sẽ trả về cho chúng ta một mảng chứa tất cả các
thể có nhiều hơn 1 địa chỉ IP.
địa chỉ đó.
Chúng ta lấy chỉ số là 0 để chọn địa chỉ của card mạng đầu tiên.
IPHostEntry là lớp chứa (Container) về thông tin địa chỉ của các máy trạm
Lưu ý: Nó chỉ là nơi để "chứa", do vậy trước khi sử dụng cần phải “nạp"
trên Internet.
thông tin vào cho nó.
13/07/2016
78
Lớp này rất hay được dùng với lớp DNS
Lớp IPHostEntry: các thành viên
Tên thuộc tính Mô tả
AddressList
Lấy về hoặc thiết lập danh sách các địa chỉ IP liên kết với một host.
Aliases
HostName
Lấy về hoặc thiết lập DNS name của host.
13/07/2016
79
Lấy về hoặc thiết lập danh sách các bí danh (alias) liên kết với một host.
Sử dụng C# Sockets
System.Net.Sockets namespace có chứa các lớp cung cấp giao diện lập
trình Net cho các hàm mức thấp API winsock
Sử dụng hàm tạo của lớp Socket
Tạo socket
Socket(AddressFamily af, SocketType st, ProtocolType pt)
• Trong đó:
– An AddressFamilyto define the network type:
– A ProtocolTypeto define a specific network protocol
– A SocketTypeto define the type of data connection
• Giá trị của AddressFamilyluôn là InterNetwork
80
• Còn giá trị của SocketType và ProtocolType phải được kết hợp đúng 13/07/2016
Sử dụng C# Sockets
Bảng kết hợp
SocketType Protocoltype Description
Dgram Udp Connectionless communication
Stream Tcp Connection-oriented communication
Raw Icmp Internet Control Message Protocol
Raw Raw Plain IP packet communication
• Vị dụ về tạo Socket
Socket newsock = Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
13/07/2016
81
Sử dụng C# Sockets
Một số thuộc tính của lớp Socket
AddressFamily
Gets the address family of the Socket
Property Description
Available Gets the amount of data that is ready to be read
Blocking Gets or sets whether the Socket is in blocking mode
Connected Gets a value that indicates if the Socket is connected to a
remote device
Handle Gets the operating system handle for the Socket
LocalEndPoint Gets the local EndPoint object for the Socket
RemoteEndPoint Gets the remote EndPoint information for the Socket
ProtocolType Gets the protocol type of the Socket
13/07/2016
82
SocketType Gets the type of the Socket
DNS (Domain Name Service)
DNS (Domain Name Service) là một lớp giúp chúng ta trong việc phân giải
tên miền (Domain Resolution) đơn giản.
ta địa chỉ IP tương ứng của máy đó, ví dụ: ServerCNTT 192.168.3.8
Phân giải tên miền tức là: Đầu vào là tên của máy trạm thì đầu ra sẽ cho
Ngoài ra lớp Dns còn có rất nhiều phương thức cho chúng ta thêm thông
tin về máy cục bộ như tên, địa chỉ, v.v.
System.Net namespace có chứa lớp Dns trong đó có chứa tất cả các hàm
Trong các phương thức này có
cần thiết khi ta làm việc với hệ thống tên miền.
13/07/2016
83
– Các phương thức đồng bộ – Các phương thức không đồng bộ
Lớp DNS: các thành viên
Trả về thông tin (IPHostEntry) của trạm có địa chỉ IP được truyền vào.
GetHostByAddress (String IP) GetHostByAddress (IPAddress IP)
Tên phương thức Mô tả
Thay bằng GetHostEntry()
GetHostByName (String hostname)
Trả về thông tin (IPHostEntry) DNS của một trạm Đã bị loại bỏ. Thay bằng GetHostEntry()
HostName
13/07/2016
84
Cho ta biết tên của máy vừa được phân giải. Nếu không phân giải được thì có giá trị là địa chỉ IP.
Lớp DNS: các thành viên
GetHostAddresses (String IP_Or_HostName)
Trả về tất cả các địa chỉ IP của một trạm. Kiểu IPAddress
Tên phương thức Mô tả
Giải đáp tên hoặc địa chỉ IP truyền vào và trả về một đối tượng IPHostEntry tương ứng.
GetHostEntry (String IP_Or_HostName) GetHostEntry (IPAddress IP)
GetHostName Lấy về tên của máy tính cục bộ (String).
Resolve (String Hostname)
Chuyển tên của máy hoặc địa chỉ IP thành IPHostEntry tương ứng. Đã bị bỏ, thay bằng GetHostEntry()
• Lưu ý: Đây là các phương thức tĩnh, do vậy khi gọi thì gọi trực tiếp từ tên lớp mà không cần phải khai báo một đối tượng mới của lớp này.
13/07/2016
85
• Ví dụ: Dns.Resolve, Dns.GetHostname, Dns.GetHostEntry, v.v…
Lớp DNS: ví dụ 1
private void ShowIPs() {
// Lấy tất cả địa chỉ IP của máy IPAddress[] add = Dns.GetHostAddresses("PC"); foreach (IPAddress ip in add) {
MessageBox.Show(ip.ToString());
} //Cách 2 //for (int i = 0; i < add.Length; i++) //{ // MessageBox.Show(add[i].ToString()); //}
13/07/2016
86
}
Lớp DNS: ví dụ 2
private void CreatIPHostEntry() {
IPHostEntry iphe1, iphe2, iphe3; IPAddress ipadd = IPAddress.Parse("127.0.0.1"); iphe1 = Dns.GetHostEntry("Notebook"); iphe2 = Dns.GetHostEntry("127.0.0.1"); iphe3 = Dns.GetHostEntry(ipadd); MessageBox.Show(iphe1.HostName); MessageBox.Show(iphe2.HostName) ; MessageBox.Show(iphe3.HostName) ;
13/07/2016
87
}
TÓM LƯỢC BÀI HỌC
Cơ bản về mạng máy tính
Mô hình truyền thông
Các mô hình tham chiếu
Chương 1: Những vấn đề cơ bản của lập trình mạng
88
Tổng quan về lập trình mạng
Chương 1: Những vấn đề cơ bản của lập trình mạng
89