Kỹ thuật lập trình mạng Cơ bản về mạng: OSI, TCPIP Giao thức TCP, UDP Mô hình ClientServer Trao đổi dữ liệu giữa các máy tính Giới thiệu kỹ thuật socket tìm hiểu kỹ chuyên sâu hơn để tạo giao tiếp và trao đổi dữ liệu giữa các máy tính với nhau.
Trang 1Chapter 1
KỸ THUẬT
LẬP TRÌNH MANG CLIENT - SERVER
1
Trang 2 Trao đổi dữ liệu giữa các máy tính
Giới thiệu kỹ thuật socket
Nội dung
Trang 3Java Simplified / Session 22 / 3 of 45
Một ứng dụng chạy trên máy đơn cục bộ: không
còn thích hợp với nhu cầu thực tế.
ứng dụng: tích hợp và triệu gọi lẫn nhau trên mạng Intranet, Internet một cách hiệu quả và an toàn:
kỹ thuật lập trình mạng.
Yêu cầu người lập trình những hiểu biết và kỹ năng chuyên sâu hơn để tạo giao tiếp và trao đổi dữ liệu giữa các máy tính với nhau.
Giới thiệu
3
Trang 5Java Simplified / Session 22 / 5 of 45
Thực hiện được nhiều chức năng:
Trang 7Java Simplified / Session 22 / 7 of 45
3 Các khái niệm cơ bản:
là một tập hợp các máy tính được nối với nhau bởi
với nhau ra sao và tập hợp các qui tắc, qui ước mà tất cả các thực thể tham gia truyền thông trên mạng phải tuân theo
Hình trạng/đồ hình mạng – Topology: Topo
Point to point, Broadcast
Giao thức mạng – Protocol
7
Network: Các khái niệm cơ bản
Trang 8 Phân loại theo khoảng cách địa lý:
Phân loại theo đồ hình mạng (Topo):
◦ Point to point,
◦ Broadcast
Phân loại theo cách truyền tin
◦ Chuyển mạch kênh (circuit-switched),
◦ Chuyển mạch gói (packet-switched)
Phân loại theo kiến trúc quản lý:
◦ Peer to peer,
Phân loại mạng
Trang 9Java Simplified / Session 22 / 9 of 45
Đặc điểm:
◦ Thực hiện sự trao đổi thông tin giữa hai đối tượng theo thời gian thực.
◦ Đối tượng sử dụng làm chủ kênh dẫn trong suốt quá trình trao đổi tin
◦ Hiệu suất thấp vì có lúc cả 2 bên đều hết thông tin để truyền
◦ Lãng phí thời gian do có giai đoạn thiết lập kênh và giải phóng kênh
◦ Nội dung thông tin không mang thông tin địa chỉ
◦ Phù hợp với dịch vụ thoại
◦ Khi lưu lượng tăng đến một mức ngưỡng nào đó thì một số cuộc gọi
có thể bị khoá, mạng từ chối mọi yêu cầu kết nối cho đến khi có thể
Chuyển mạch kênh – Circuit switched
9
Trang 10Chuyển mạch gói (packet-switched)
Trang 11Java Simplified / Session 22 / 11 of 45
a Môi trường truyền dẫn
cáp, sóng điện từ, sóng vi ba, tia hồng ngoại
b Thiết bị phần cứng:
Kết nối các môi trường truyền: Card mạng (NIC hay
Adapter), Hub, Switch, Router
Điều khiển quá trình truyền dữ liệu
Trang 12Xuất phát từ ý tưởng Kiến trúc phân tầng:
Mục đích: giảm độ phức tạp của việc thiết kế và cài đặt mạng
Kiến trúc mạng
Tầng n
Tầng i+1 Tầng i Tầng i-1
Tầng n
Tầng i+1 Tầng i Tầng i-1
Giao thức tầng i
Hệ thống A Hệ thống B
Giao diện tầng i
và tầng
Trang 13Java Simplified / Session 22 / 13 of 45
- Mỗi mức được thiết kế để cung cấp một số dịch vụ xác
định cho mức trên nó
Kiến trúc phân tầng
Một số NSX:
• SNA của IBM (6 layer)
• DECnet của Digital Equipment Corporation (8)
• Appletalk của Apple,
• Netware của Novell Inc
Trang 14 Không thống nhất về kiến trúc giữa các hệ thống
mạng, gây ra sự khác nhau về:
- Phương pháp truy nhập đường truyền
- Giao thức giữa các mạng.
OSI : Reference Model for Open Systems
Interconnection – Mô hình tham chiếu cho việc nối kết
các hệ thống mở:
• Xuất phát từ kiến trúc phân tầng
• Xây dựng một khung chuẩn về kiến trúc mạng, làm căn
cứ cho các nhà thiết kế và chế tạo các sản phẩm về mạng
OSI Model
Trang 15Java Simplified / Session 22 / 15 of 45
OSI Model
15
Trang 17Java Simplified / Session 22 / 17 of 45
Trang 18 Có 4 tầng:
◦ Mức liên kết dữ liệu (Data Link/ Network Access)
Giao tiếp với thiết bị phần cứng 1 cách phù hợp
Trang 19Java Simplified / Session 22 / 19 of 45
TCP/IP và OSI Các giao thức
19
Trang 20Đóng gói và mở gói dữ liệu
Trang 21Java Simplified / Session 22 / 21 of 45
đúng
Địa chỉ
21
Trang 22 TCP (Transmission Control Protocol) là giao thức truyền thông cơ bản giúp trao đổi dữ
liệu qua lại giữa 2 hay nhiều máy tính một
cách tin cậy và chính xác
Giao thức TCP
Trang 23Java Simplified / Session 22 / 23 of 45
gửi dữ liệu và kết thúc kết nối khi việc gửi dữ
liệu hoàn tất
◦ thiết lập kết nối
◦ truyền dữ liệu
◦ kết thúc kết nối
23 1
TCP – Hoạt động
Trang 24Three-Way Handshake in Establishing
a Connection
1
2
3
Trang 25Java Simplified / Session 22 / 25 of 45
Hủy kết nối trong TCP (4 bước)
1
2
4
3
Trang 26Báo nhận dữ liệu từ trạm đích;
tin đến không theo thứ tự;
Đặc điểm
Trang 27Java Simplified / Session 22 / 27 of 45
UDP (User Datagram Protocol) là giao thức
truyền nhận dữ liệu dưới dạng các gói tin độc lập giữa các máy tính với nhau nhưng không đảm bảo sự toàn vẹn dữ liệu (không tin cậy) UDP là giao thức phi kết nối
Giao thức UDP
27
Trang 28 Mô hình được phổ biến nhất trong các hệ
thống phân tán là mô hình client/server
việc cung cấp dịch vụ
Truyền một yêu cầu từ tiến trình client tới tiến
trình server
Yêu cầu được server xử lý
Truyền đáp ứng cho client
Mô hình client/server
Trang 29Java Simplified / Session 22 / 29 of 45
Mô hình client/server thường được cài đặt dựa trên các thao tác cơ bản là gửi (send)
và nhận (receive)
Quá trình trao đổi dữ liệu theo client/server
29
Trang 30 Kiến trúc client/server đơn giản nhất là kiến trúc hai
tầng
Một ứng dụng hai tầng cung cấp nhiều trạm:
◦ tầng trình diễn (client): xử lý các công việc
◦ tầng lưu trữ dữ liệu tập trung (server) kiểm soát luồng vào ra giữa ứng dụng và dữ liệu
Hầu hết các ứng dụng Internet như là email, telnet, ftp, Web là các ứng dụng hai tầng
Hạn chế:
◦ hiệu năng ứng dụng giảm do hạn chế tại CLient
◦ dữ liệu truyền trên mạng tăng
Client/Server 2 tầng (two-tier client/server)
Trang 31Java Simplified / Session 22 / 31 of 45
Client/Server 2 tầng (two-tier client/server)
31
Trang 32 Một ứng dụng được chia thành ba tầng tách biệt nhau về mặt logic:
◦ Tầng đầu tiên là tầng trình diễn thường bao gồm các giao diện đồ họa
◦ Tầng thứ hai, còn được gọi là tầng trung gian hay tầng tác nghiệp
◦ Tầng thứ ba chứa dữ liệu cần cho ứng dụng, thực hiện các lời gọi hàm để tìm kiếm dữ liệu cần thiết Tầng trình diễn nhận dữ liệu và định dạng nó để
hiển thị.
Client/Server 3 tầng (three-tier client/server)
Trang 33Java Simplified / Session 22 / 33 of 45
Client/Server 3 tầng (three-tier client/server)
33
Trang 34 Kiến trúc n-tầng được chia thành các tầng như
◦ Tầng logic tác nghiệp: Mô hình hóa các quy tắc tác
nghiệp,
◦ Tầng các dịch vụ hạ tầng: Cung cấp một chức năng bổ trợ cần thiết cho ứng dụng như các thành phần (truyền
Client/Server n tầng (n-tier client/server)
Trang 35Java Simplified / Session 22 / 35 of 45
Client/Server n tầng (n-tier client/server)
35
Trang 36 Khi kết nối vào máy chủ ta có thể yêu cầu máy chủ nhiều
dịch vụ khác nhau: HTTP, mail, DNS, FTP
Mỗi dịch vụ đều có cách gửi nhận dữ liệu theo quy ước
riêng => quy định bởi cổng (hay port).
Mỗi chương trình dịch vụ sẽ sử dụng một cổng khác để truy xuất thông tin Cổng là một số nguyên dương có giá trị từ 1 đến 16383
Server sẽ quy định cổng được sử dụng cho mỗi loại dịch vụ
Thông tin giữa Client và Server phải sử dụng cổng tương
ứng nhau thì mới trao đổi được với nhau.
Dịch vụ từ phía máy chủ Port
Trang 37Java Simplified / Session 22 / 37 of 45
Giao tiếp trên mạng theo mô hình
Client/Server
37
Trang 38 Làm thế nào để
truyển dữ liệu từ máy
này đến máy kia?
Trang 39Java Simplified / Session 22 / 39 of 45
Cho phép các ứng dụng trong các máy tính liên lạc bên trong LAN
Được dùng trong các mạng Ethernet và Token Ring và coi
như là một phần của NetBIOS Extended User Interface
(NetBEUI), trong Windows Được phát triển bởi IBM.
Cung cấp các dịch vụ session và transport (OSI)
NetBIOS cung cấp 2 kiểu liên lạc là session và datagram
◦ Session: là kiểu liên lạc giữa 2 máy tính thông qua thủ tục kết nối,
nó cho phép truyền được các messages kích thước lớn, xác định lỗi
và sửa lỗi.
◦ Datagram là kiểu liên lạc không cần thủ tục kết nối messages nhỏ,
và nó hỗ trợ kiểu truyên quảng bá một message đến mỗi máy tính trên mạng LAN.
NetBIOS (Network Basic Input/Output System)
39
Trang 41Java Simplified / Session 22 / 41 of 45
Liên lạc kiểu datagram
Trang 42 Pipe:
◦ là một bộ đệm dữ liệu được thực hiện trong bộ nhớ hệ thống,
◦ được sử dụng như là chuyển dòng dữ liệu liên tục giữa các tiến trình hoặc giữa các máy tính.
Các Pipe làm việc như là các file giả Do đó, một số hàm I/O API về file có thể áp dụng (không phải là tất cả)
Có 2 kiểu pipe: anonymous và named pipes
- Anonymous pipes : kiểu unidirectional, được sử dụng để
liên lạc giữa các tiến trình
- Named pipes: có thể là bi directional và thường được sử
dụng để liên lạc giữa các trạm trên mạng.
Pipe
Trang 43Java Simplified / Session 22 / 43 of 45
pipe
43
Trang 44Named pipe
Trang 45Java Simplified / Session 22 / 45 of 45
hiện điều gì đó, Client phải có khả năng kết
nối được với máy chủ => Thực hiện thông
qua cơ chế socket (ổ cắm)
khiển truyền thông giữa 2 máy sử dụng các
giao thức TCP, UDP
Lập trình mạng thông qua Socket
45
Trang 46 Socket API – Socket Application
Programming Interface
qua socket API:
◦ unreliable datagram (UDP)
◦ reliable, byte stream-oriented (TCP)
Giới thiệu Socket
Trang 47Java Simplified / Session 22 / 47 of 45
Socket
47
Trang 49Java Simplified / Session 22 / 49 of 45
Các loại Socket
49
Trang 50 Stream Socket: dùng cho
connection-oriented protocol như TCP
protocol như UDP
một số ứng dụng đặc biệt, dùng các dịch vụ trực tiếp của lớp IP
Các loại Socket
Trang 51Java Simplified / Session 22 / 51 of 45
Hàm bind() để đăng ký với hệ thống
Hàm connect() để kết nối đến server
Hàm listen() đặt socket ở trạng thái chờ, lắng nghe kết nối từ phía client
Hàm accept() : chấp nhận kết nối từ client đến
Hàm read() để đọc dữ liệu từ socket
Hàm write() để ghi dữ liệu
Hàm sendto() để gởi dữ liệu đến một địa chỉ socket từ xa
Hàm recvfrom() để nhận dữ liệu đến một địa chỉ
socket từ xa
Các hàm socket
51
Trang 52TCP socket - hoạt động
Trang 53Java Simplified / Session 22 / 53 of 45
UDP socket – hoạt động
53
Trang 54 Một trong 2 quá trình phải công bố số hiệu
Trang 55Java Simplified / Session 22 / 55 of 45
Trang 56 Socket API dựa trên nền Berkeley socket.
sockets được cung cấp dưới dạng các thư
Trang 57Java Simplified / Session 22 / 57 of 45
kernel của hệ điều hành Nó cung cấp các
dịch vụ IPC cục bộ hoặc giữa các tiến trình
trên mạng
Socket trên BSD Unix
57
Trang 58 WinSock hiện thực Berkeley Sockets
Interface trên môi trường Windows
Berkeley Sockets
socket trên Windows
Trang 59Java Simplified / Session 22 / 59 of 45
Sockets Application Programming Interface )
để hiện thực
◦ Cần có thư viện WINSOCK.DLL hoặc
◦ WINSOCK32.DLL (32-bit Windows ).
◦ Cần include các hàm và cấu trúc từ WINSOCK.H hoặc WINSOCK2.H
◦ Có thể biên dịch dạng dòng lệnh :
cl –o dest-file src-file ws2_32.lib
WinSock API
59