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