MÔN HỌC: LẬP TRÌNH MẠNGChươ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ợ giu
Trang 1LẬP TRÌNH MẠNG (Network programming)
Giảng viên: Ths Trần Đắc Tốt – Khoa CNTT
Trang 2MÔ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)
Trang 3CHƯƠ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
Tổng quan về lập trình mạng
Trang 4Mụ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
Mô hình OSI, TCP/IP Windows Socket
Trang 5CHƯƠ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
Tổng quan về lập trình mạng
Trang 6Cơ bản về mạng máy tính
Trang 7Cơ bản về 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
Theo một kiến trúc nào đó
Các dạng máy tính ?
Trang 8Cơ bản về mạng máy tính
Internet ngày nay
Trang 9Cơ bản về mạng máy tính
Xử lý tập trung hay phân tán
Trang 10Cơ bản về mạng máy tính
Kiến trúc mạng: Hình trạng (topology) và giao thức (protocol)
Thực tế là sự kết hợp của nhiều hình trạng Trục (Bus) Vòng (Ring) Sao (Star)
Trang 11Cơ bản về mạng máy tính
Giao thức là gì?
Trang 12Cơ 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,
Trang 13CHƯƠ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
Tổng quan về lập trình mạng
Trang 14Mô hình truyền thông
• Trao đổi dữ liệu sử dụng một kênh riêng
• 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 khác cho đến khi đóng liên kết
• 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
Trang 15Mô 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
Trang 16Mô hình truyền thông
So sánh
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
Trang 17Mô 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 kết.
Đáng tin cậy
Truyền thông không hướng liên kết
Không thiết lập liên kết, chỉ có giai đoạn truyền dữ liệu
Không tin cậy - “Best effort”
Trang 18CHƯƠ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
Tổng quan về lập trình mạng
Trang 19Các mô hình tham chiếu
Trang 20Cá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…
Ứng dụng: Hỗ trợ các ứng dụng trên mạng
Trang 21Các mô hình tham chiếu
Mô hình OSI và TCP/IP
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
Trang 22Ví 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
Mô hình phân tầng của Internet
Trang 24(N+1) PDU
(N) PDU (N-1) PDU
Trang 25Data Data Ex:HTTP header
Trang 26IP
FTP TCP
Protocol stack và quá trình đóng gói
Trang 27IP
FTP TCP
Trang 29IP
FTP TCP
Protocol stack và quá trình đóng gói
Trang 30IP
FTP TCP
Trang 31CAT5 CAT5
Ethernet/10M
IP
FTP TCP
Ethernet/100M
IP
FTP TCP
Trang 32IP
FTP TCP
Trang 33IP
FTP TCP
Protocol stack và quá trình đóng gói
Trang 34IP
FTP TCP
Trang 35IP
FTP TCP
Trang 36IP
FTP TCP
Trang 37Tó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
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 Nếu không phân tầng: Khi muốn thay đổi, phải làm toàn bộ
Trang 38application TCP/UDP
IP
data link
e.g 00:11:24:79:8e:82 physical
Port Number , e.g Port 80
IP address , e.g 203.12.15.165
Physical address / MAC address
Định danh trên Internet và quan hệ với các tầng
Trang 39Đị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á
00:11:24:79:8e:82
00000000 00010001 00100100 01111001 10001110 10000010 HEX
OUI Gán bởi nhà sản xuất
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 BIN
Địa chỉ dùng trong tầng liên kết dữ liệu
Trang 40Địa chỉ IP
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
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)
Định danh dùng trên Internet
Trang 41Đị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 E.g HTTP cổng 80, FTP cổng 20, 21 …
Trang 42Các RFC quan trọng
RFC 821 SMTP (email, outgoing)
RFC 954 WHOIS
RFC 959 FTP (uploading and downloading)
RFC 1939 POP3 (email, incoming)
Trang 43CHƯƠ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
Tổng quan về lập trình mạng
Trang 44Mô hình Client / Server
Xử lý Yêu cầu
Tạo ra 1 yêu cầu
Gửi yêu cầu qua Server
Trang 45Mô hình Client / Server
Trang 46Mô hình Client / Server
Các chế độ giao tiếp:
Chế độ giao tiếp nghẽn Chế độ giao tiếp không nghẽn
Trang 47Cá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):
Trang 48Các kiểu kiến trúc chương trình
Interfaces to Presentation GUI
Business Logic
Actual Program Rules
Trang 49Các kiểu kiến trúc chương trình
• Kiến trúc đơn tầng:
Nhiều nhược điểm
Cần có kiến trúc mới – Client/Server
Trang 50Cá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
Trang 51Cá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.
– Mỗi thành phần có nhiệm vụ riêng.
Mô hình Client/Server 3 tầng
Client
Application Server
Database Server Middleware
Trang 52Các kiểu kiến trúc chương trình
GOLDMAN: CSIS
Fat Client Fat Server TWO-TIERED ARCHITECTURE
THREE-TIERED ARCHITECTURES
Presentation Logic
Database Logic
Database Logic
Business Logic
Presentation Logic Presentation Logic
Business Logic
Database Logic
• So sánh kiến trúc 2 tầng và kiến trúc
3 tầng của ứng dụng
Trang 53Sockets cung cấp một interface để lập trình mạng tại tầng Transport.
Một socket là một end-point của một liên kết giữa hai ứng dụng mạng.
Nhiều NNLT: C, C++, Java, VB, C#,
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
client/server dùng Sockets
Giới thiệu về Socket
Trang 54Giới thiệu về Windows Socket
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.
Đầ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
Vd phiên bản chạy
trên Windows XP và 2000 là 2.2
Giới thiệu về Socket
Trang 55Giới thiệu về Windows Socket
Windows Sockets cho phép những nhà sản xuất cung cấp một giao diện đồng nhầt để người lập trình có thể viết các chương trình ứng dụng theo những đặc tả của Windows Sockets và có thể chạy được trên bất kỳ hệ thống nào có hỗ trợ Windows Sockets.
Các phiên bản sau của Windows socket đều tương thích với các phiên bản trước của nó Điều đó có nghĩa là một ứng dụng được viết cho phiền bản trước cũng hoàn toàn có thể chạy được trên phiên bản sau của Windows Sockets.
Windows Sockets hỗ trợ nhiều giao thức khác: IPX/SPX, Apple’s
Giới thiệu về Socket
Trang 56Một số khái niệm
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 TCP/IP Sockets được xác định bằng sự kết nối của một địa chỉ và 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 máy có địa chỉ đó.
Giới thiệu về Socket
Trang 57Khái niệm địa chỉ và cổng (Address & Port)
Trang 58Khái niệm địa chỉ và cổng (Address & Port)
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?
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.
Trang 59Khái niệm địa chỉ và cổng (Address & Port)
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 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ị LocalPort) hay không? Nếu bằng thì xử lý, trái lại thì không làm gì (vì không phải là của mình).
Trang 60Khá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)
Các port từ 49152 – 65535 (Dynamic): dự trữ
Trang 61Giao 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 của tầng vận chuyển.
Lập trình Socket với C#
Network driver Network protocol Transport protocol
Network driver Network protocol Transport protocol Program A Program B
Giao tiÕp gi÷a hai qu¸ tr×nh sö dông Socket
Trang 62– 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
–
• Dữ liệu chớnh xỏc, Tốc độ truyền
chậm.
Chế độ không nối kết (connectionless):
Không tồn tại kênh giao tiếp ảo giữa client và server.
Dữ liệu được gởi đi theo chế độ 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.
Không bảo đảm thứ tự các gói tin
Dữ liệu không chính xác, tốc độ 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
Trang 63Giao 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 của tầng vận chuyển.
Lập trình Socket với C#
Trang 64Các lớp trong NET Framework được tạo ra để cung cấp một giao diện
Trang 65Lớ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.
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
Trang 66• IPAddress được sử dụng để biểu hiện một địa chỉ IP duy nhất
• 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ỉ IP
Trang 67Lớp IPAddress: các thành viên
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
GetAddressBytes Chuyển địa chỉ thành 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.
Trang 68Lớp IPAddress: các thành viên
IsLoopback Cho biết địa chỉ có phải là địa chỉ lặp hay không?
NetworkToHostOrder Đảo thứ tự byte của một địa chỉ cho đúng với thứ tự
byte thông thường.
Parse 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")
TryParse (S: String) 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
Trang 69IPAddress: Ví dụ tạo địa chỉ
IPAddress Ip3 = IPAddress.Parse( “192.168.1.2")
• Cách 4: Thông qua tính toán
Long So = 192* 256^0+168* 256^1+1* 256^2 + 2*256^3;
IPAddress Ip4 = new IPAddress(So);
Trang 70Cung 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)
Trang 71IPAddress: Ví dụ kiểm tra địa chỉ
private void KiemTra()
{
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());
}
Trang 72IPAddress: 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]);
}
Trang 73Lớ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
để trao đổi thông tin.
• Lớp IPAddress mới chỉ cung cấp địa chỉ IP (IPAddress), như vậy vẫn còn thiếu số hiệu cổng (Port number).
• NET Framework sử dụng IPEndPoint để biểu diễn một sự kết hợp giữa cổng và địa chỉ IP
• Hai hàm tạo của lớp này là:
– IPEndPoint(long address, int port)
– IPEndPoint(IPAddress address , int port )
• Hàm tạo thứ 2 được sử dụng phổ biến hơn
Trang 74Lớp IPEndpoint: các thành viên
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.
Port Lấy về hoặc thiết lập số hiệu cổng của endpoint.
Trang 75Lớp IPEndpoint: các thành viên
Tên phương
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.
để 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 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