Bài giảng Lập trình mạng: Chương 1 Những vấn đề cơ bản của lập trình mạng, cung cấp cho người học những kiến thức như: 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. Mời các bạn cùng tham khảo!
Trang 1LẬP TRÌNH MẠNG (Network programming)
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
Chương 1: Những vấn đề cơ bản của 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/IPWindows 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
Chương 1: Những vấn đề cơ bản của 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
7
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ếntrú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 ?
Chương 1: Những vấn đề cơ bản của lập trình mạng
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
Chương 1: Những vấn đề cơ bản của lập trình mạng
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 12Cơ bản về mạng máy tính
Giao thức mạng
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
Chương 1: Những vấn đề cơ bản của lập trình mạng
Trang 14Mô 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
• 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ênkế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”
Chương 1: Những vấn đề cơ bản của lập trình mạng
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
OSI - Open System Interconnection: Bao gồm 7 tầng
Chương 1: Những vấn đề cơ bản của lập trình mạng
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ạngMạ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…
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 địnhvào một tầng duy nhất
Chương 1: Những vấn đề cơ bản của lập trình mạng
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 23Chương 1: Những vấn đề cơ bản của lập trình mạng
Đóng gói dữ liệu (Encapsulation)
Trang 25Data Data Ex:HTTP header
Họ giao thức TCP/IP và quá trình đóng gói
Trang 27Chươ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
Trang 29Chươ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
Trang 31CAT5 CAT5
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
Trang 33Chươ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
Trang 35Chươ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
Trang 37Chươ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
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→IPv6Nếu không phân tầng: Khi muốn thay đổi, phải làm toàn bộ
Trang 38IP
data link
e.g 00:11:24:79:8e:82physical
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 (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
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
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 41Chương 1: Những vấn đề cơ bản của lập trình mạng
Đị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ổngE.g HTTP cổng 80, FTP cổng 20, 21 …
Trang 42Các RFC quan trọng
RFC Document Giao thức
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
Chương 1: Những vấn đề cơ bản của 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
Chờ Server xử lý
Nhận kết quả trả về và
xử lý theo mục đích riêng
Trang 45Mô hình Client / Server
Trang 46Mô hình Client / Server
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):
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:
User Interface Business Rule Data Storage
Sử dụng trên 1 máy tính
Dễ cài đặt
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
Trang 51Các kiểu kiến trúc chương trình
51
• 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
Fat Client Fat Server
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ủaMicrosoft
=> 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
Chương 1: Những vấn đề cơ bản của lập trình mạng
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ềukhiể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 giaodiện đồng nhầt để người lập trình có thể viết các chương trình ứngdụng theo những đặc tả của Windows Sockets và có thể chạy đượctrê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ênbản trước của nó Điều đó có nghĩa là một ứng dụng được viết chophiền bản trước cũng hoàn toàn có thể chạy được trên phiên bản saucủa Windows Sockets
Windows Sockets hỗ trợ nhiều giao thức khác: IPX/SPX, Apple’sAppletalk, ATM,…
Giới thiệu về Socket
Chương 1: Những vấn đề cơ bản của lập trình mạng
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ênmáy có địa chỉ đó
Giới thiệu về Socket
Trang 57Khá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
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)
Chương 1: Những vấn đề cơ bản của lập trình mạng
Cách giải quyết
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 tinxem 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ọngtrên hệ điều hành
Các port từ 1024 – 49151 (Registered): dành cho người lập trình (khuyếncá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ứccủa tầng vận chuyển
Lập trình Socket với C#
Chương 1: Những vấn đề cơ bản của lập trình mạng
Network driver Network protocol Transport protocol
Network driver Network protocol Transport protocol
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
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
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ứccủa tầng vận chuyển
Lập trình Socket với C#
Chương 1: Những vấn đề cơ bản của lập trình mạng
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
13/07/2016 2 (byte 0) 1 (byte 1) 168 (byte 2) 192 (byte 3) 65
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ỉ
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
trong địa chỉ IPAddress
Trang 68Lớp IPAddress: các thành viên
byte thông thường
IP chuẩn (Một đối tượng IPAddress)
có dấu chấm (Ví dụ "192.168.1.1")
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
Thuộc tính này chỉ đọc
Một địa chỉ IP (An Internet Protocol (IP) address) ở dạng số
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úngcầ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ònthiế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ữacổ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
tượng IPAddress)
Port Lấy về hoặc thiết lập số hiệu cổng của endpoint
Trang 75để giao tiếp (Tham khảo cách tạo IPAddress ở phần trên)
Cổng, ví dụ: 192.168.1.1:8080