59
Chapter 1 Introduction GV: Nguyễn Thị Thanh Vân - CNTT 1

Chapter 1. Introduction network programming

Embed Size (px)

Citation preview

Page 1: Chapter 1. Introduction network programming

Chapter 1

IntroductionGV: Nguyễn Thị Thanh Vân - CNTT

1

Page 2: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 2 of 45

Giới thiệu Kỹ thuật lập trình mạng Cơ bản về mạng: OSI, TCP/IP Giao thức TCP, UDP Mô hình Client/Server Trao đổi dữ liệu giữa các máy tính Giới thiệu kỹ thuật socket

Nội dung

2

Page 3: Chapter 1. Introduction network programming

Java 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

Page 4: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 4 of 45

Học lập trình mạng để làm gì?

◦Có được sự hiểu biết để quản trị các dịch vụ có sẵn trên mạng tốt hơn.

◦Có kiến thức để có thể lập được các tiện ích khai thác tài nguyên trên mạng internet

◦Bước đầu lập được các ứng dụng server và client phục vụ cho một mục đích riêng nào đó.

Giới thiệu

4

Page 5: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 5 of 45

Thực hiện được nhiều chức năng:◦ 1 Retrieve Data◦ 2 Send Data

1 File storage 2 Massively parallel computing

◦ 3 Peer-to-Peer Interaction 1 Games 2 Chat 3 File Sharing

◦ 4 Server◦ 5 Searching the Web◦ 6 Electronic Commerce◦ 7 Ubiquitous Computing◦ 8 Interactive Television

Kỹ thuật lập trình mạng

5

Page 6: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 6 of 45

Các khái niệm Các thành phần OSI Model TCP/IP Giao thức TCP Giao thức UDP Các dịch vụ mạng

Review Network

6

Page 7: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 7 of 45

3. Cac khai niêm cơ ban:

Mang may tinh: la môt tâp hơp cac may tinh đươc nôi vơi nhau bơi

cac đương truyên vât ly theo môt kiên truc nao đo Đương truyên vât ly: Kiên truc mang: Thê hiên cach nôi cac may tinh

vơi nhau ra sao va tâp hơp cac qui tăc, qui ươc ma tât ca cac thưc thê tham gia truyên thông trên mang phai tuân theo.

Hinh trang/đồ hinh mang – Topology: TopoPoint to point, Broadcast

Giao thưc mang – Protocol7

Network: Các khái niệm cơ bản

Page 8: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 8 of 45

Phân loai theo khoang cach địa ly:◦ LAN, WAN, MAN…

Phân loai theo đồ hinh mang (Topo): ◦ Point to point, ◦ Broadcast

Phân loai theo cach truyên tin◦ Chuyên mach kênh (circuit-switched),◦ Chuyên mach goi (packet-switched).

Phân loai theo kiên truc quan ly: ◦ Peer to peer, ◦ Server based

Phân loại mạng

8

Page 9: Chapter 1. Introduction network programming

Java 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

Page 10: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 10 of 45

Chuyển mạch goi (packet-switched)

10

Page 11: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 11 of 45

a. Môi trường truyền dẫncá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 Chạy các phần mềm: PC, Server Các thiết bị ngoại vi: máy in, máy fax, Modem, Scanner

c. Phần mềm mạng Các protocol Các hệ điều hành mạng Các tài nguyên: file, thư mục Các ứng dụng mạng

Các thành phần của mạng máy tính:

11

Page 12: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 12 of 45

Xuấ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

12

Tầng n

Tầng i+1Tầng i

Tầng i-1

Tầng 1

Tầng n

Tầng i+1Tầng i

Tầng i-1

Tầng 1

Giao thức tầng i

Liên kết vật lý

Hệ thống A Hệ thống B

Giao diện tầng i và tầng i-1

Page 13: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 13 of 45

- Mỗi mưc đươc thiêt kê đê cung câp môt sô dịch vụ xac định cho mưc trên no

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

Page 14: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 14 of 45

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

14

Page 15: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 15 of 45

OSI Model

15

OSI 7 layers

Page 16: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 16 of 4516

Page 17: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 17 of 45

Một số đăc tính- Độc lập về hình thái của mạng.- Độc lập về phần cứng của mạng.- Mô hình địa chỉ toàn cầu.- Nền tảng client/server mạnh mẽ.- Các chuẩn về giao thức ứng dụng mạnh mẽ.

Giao thức TCP/IP

17

Page 18: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 18 of 45

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◦Mức mạng (Network / Internet) Đánh địa chỉ, routing, vận chuyển gói tin◦Mức chuyển (Transport)Đảm bảo dữ liệu được truyền một cách tin cậy◦Mức ứng dụng (Aplication)Các ứng dụng, các dịch vụ

Giao thức TCP/IP

18

Page 19: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 19 of 45

TCP/IP và OSI. Các giao thức

19

Page 20: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 20 of 45

Đong goi và mở goi dữ liệu

20

Page 21: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 21 of 45

Địa chỉ là thông tin giúp gói tin đi đến đích đúng

Địa chỉ

21

Page 22: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 22 of 45

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

22

Page 23: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 23 of 45

TCP đòi hỏi thiêt lâp kêt nôi trươc khi băt đầu gửi dữ liêu va kêt thuc kêt nôi khi viêc gửi dữ liêu hoan tât.

Cụ thê, cac kêt nôi TCP co ba pha:◦thiêt lâp kêt nôi◦truyên dữ liêu◦kêt thuc kêt nôi

231

TCP – Hoạt động

Page 24: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 24 of 45

Three-Way Handshake in Establishing a Connection

CTL = Which control bits in the TCP header are set to 1

1

2

3

Page 25: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 25 of 45

Hủy kết nối trong TCP (4 bước)

1

2

4

3

Page 26: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 26 of 45

•Bao nhân dữ liêu từ tram đich; •Co cơ chê đê phat hiên mât goi tin hoặc cac goi

tin đên không theo thư tư; • Co cơ chê tư đông gơi lai những goi tin bị mât; • Co cơ chê điêu khiên luồng dữ liêu,•Châm

Đặc điểm

26

Page 27: Chapter 1. Introduction network programming

Java 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

Page 28: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 28 of 45

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.

Mô hình truyền tin client/server hướng tới việc cung cấp dịch vụ.

Quá trình trao đổi dữ liệu bao gồm: 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

28

Page 29: Chapter 1. Introduction network programming

Java 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

Page 30: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 30 of 45

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◦Bảo trì (affect to Client & Server

Client/Server 2 tầng (two-tier client/server)

30

Page 31: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 31 of 45

Client/Server 2 tầng (two-tier client/server)

31

Page 32: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 32 of 45

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ị.

Oracle, SQL Server hoăc tài liệu XML.

Client/Server 3 tầng (three-tier client/server)

32

Page 33: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 33 of 45

Client/Server 3 tầng (three-tier client/server)

33

Page 34: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 34 of 45

Kiến trúc n-tầng được chia thành các tầng như sau: ◦Tầng giao diện người dùng: quản lý tương tác của

người dùng với ứng dụng ◦Tầng logic trình diễn: Xác định cách thức hiển thị giao

diện người dùng và các yêu cầu của người dùng được quản lý như thế nào.

◦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 thông điệp, hỗ trợ giao tác).

Client/Server n tầng (n-tier client/server)

34

Page 35: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 35 of 45

Client/Server n tầng (n-tier client/server)

35

Page 36: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 36 of 45

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

36

Page 37: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 37 of 45

Giao tiếp trên mạng theo mô hình Client/Server

37

Page 38: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 38 of 45

Làm thế nào để truyển dữ liệu từ máy này đến máy kia?

Có thể sử dụng một trong các kỹ thuật như:

NetBIOS Pipe Socket

Liên lạc dữ liệu giữa các máy tính

38

Page 39: Chapter 1. Introduction network programming

Java 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

Page 40: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 40 of 45

Liên lạc session

40

1. ADD NAME

3. CALL

4. SEND

7. RECEIVE

CLIENT

1. ADD NAME

2. LISTEN

5. RECEIVE

6. SEND

SERVER

8. HANGUP 9. HANGUP

Page 41: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 41 of 45

Liên lạc kiểu datagram

41

SEND DATAGRAM SEND_BCST_DATAGRAM_WAIT

DELETE NAME

ADD NAME

RECEIVE DATAGRAM RECEIVE_BCST_DATAGRAM_WAIT

DELETE NAME

STATION 1 STATION 2

ADD NAME

Page 42: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 42 of 45

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

42

Page 43: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 43 of 45

pipe

43

Page 44: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 44 of 45

Named pipe

44

Page 45: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 45 of 45

khi yêu cầu một dịch vụ trên máy chủ thực 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)

Socket là một API => ta có thể lập trình điều khiển truyền thông giữa 2 máy sử dụng các giao thức TCP, UDP.

Kết nối theo socket cần: IP và port.

Lập trình mạng thông qua Socket

45

Page 46: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 46 of 45

Socket API – Socket Application Programming Interface

Ðược giới thiệu ở BSD4.1 UNIX, 1981 Ðược ứng dụng khởi tạo, sử dụng và hủy bỏ. Dùng cơ chế client/server Cung cấp hai dịch vụ chuyển dữ liệu thông

qua socket API:◦unreliable datagram (UDP)◦reliable, byte stream-oriented (TCP)

Giới thiệu Socket

46

Page 47: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 47 of 45

Socket

47

Page 48: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 48 of 4548

Page 49: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 49 of 45

Các loại Socket

49

Page 50: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 50 of 45

Stream Socket: dùng cho connection-oriented protocol như TCP.

Datagram Socket: dùng cho connectionless protocol như UDP.

Raw Socket: dùng cho một số protocol của 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

50

Page 51: Chapter 1. Introduction network programming

Java 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

Page 52: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 52 of 45

TCP socket - hoạt động

52

Page 53: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 53 of 45

UDP socket – hoạt động

53

Page 54: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 54 of 45

Một trong 2 quá trình phải công bố số hiệu cổng của socket mà mình sử dụng

Mỗi cổng giao tiếp thể hiện 1 địa chỉ xác định trong hệ thống

Có thể nhận dữ liệu gửi đến cổng giao tiếp này từ các quá trình khác.

Số hiệu cổng của socket

54

Page 55: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 55 of 45

Ex: các dịch vụ

55

Dịch vụ Giao thức Cổng dịch vụDNS lookup UDP 53FTP TCP 21HTTP TCP 80POP3 TCP 110Windows sharedprinter name lookup

UDP 137

Telnet TCP 23

Page 56: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 56 of 45

Socket API dựa trên nền Berkeley socket. Socket trên BSD Unix Socket trên Windows Trong MS-DOS, Windows, MacOS và OS/2,

sockets được cung cấp dưới dạng các thư viện lập trình.

Hầu hết ngôn ngữ lập trình đều hỗ trợ lập trình mạng: C/C++, Python, Java, VB, …

Các môi trường lt Socket API

56

Page 57: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 57 of 45

Trong BSD Unix, socket là một phần trong 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

Page 58: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 58 of 45

WinSock hiện thực Berkeley Sockets Interface trên môi trường Windows.

WinSock có nhiều mở rộng thêm so với Berkeley Sockets.

socket trên Windows

58

Page 59: Chapter 1. Introduction network programming

Java Simplified / Session 22 / 59 of 45

Dùng thư viện WinSock API (Windows 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