Bài giảng Mạng máy tính - Nguyễn Cao Đạt - Chương 2: Tầng ứng dụng (Bài giảng 3)

máy chủ không luôn luôn mở

 nhiều máy đầu cuối khác

nhau giao tiếp trực tiếp với

nhau

 các bên kết nối không liên

tục và thay đổi địa chỉ IP

 Ba chủ đề:

 Phân phối tệp tin

 Tìm kiếm thông tin

 Tình huống nghiên cứu:

Skype

pdf43 trang | Chuyên mục: Mạng Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 1626 | Lượt tải: 3download
Tóm tắt nội dung Bài giảng Mạng máy tính - Nguyễn Cao Đạt - Chương 2: Tầng ứng dụng (Bài giảng 3), để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 nối 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
28 
o
u
tT
o
S
e
rv
e
r
to network from network
in
F
ro
m
S
e
rv
e
r
in
F
ro
m
U
s
e
r
keyboard monitor
Process
clientSocket
input
stream
input
stream
output
stream
TCP
socket
Tiến 
trình 
khách 
socket TCP 
khách 
Thuật ngữ Stream – luồng 
 Một luồng là một chuỗi các kí tự 
chảy (đi) vào hoặc ra từ một tiến 
trình. 
 Một luồng đầu vào được gắn vào 
nguồn đầu vào nào đó của tiến 
trình, vd: bàn phím hoặc socket 
 Một luồng đầu ra được gắn vào 
một nguồn đầu ra, vd: màn hình 
hoặc socket. 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
29 
Lập trình Socket với TCP 
Ví dụ ứng dụng khách-chủ: 
1) khách đọc từng dòng từ đầu 
vào chuẩn (luồng 
inFromUser) , gửi cho chủ 
thông qua socket (luồng 
outToServer) 
2) chủ đọc từng dòng từ socket 
3) chủ chuyển từng dòng sang 
dạng viết HOA, gửi lại cho 
khách 
4) khách đọc, in dòng đã được 
chỉnh sửa từ socket (luồng 
inFromServer) 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
30 
Ví dụ: khách Java (TCP) 
import java.io.*; 
import java.net.*; 
class TCPClient { 
 public static void main(String argv[]) throws Exception 
 { 
 String sentence; 
 String modifiedSentence; 
 BufferedReader inFromUser = 
 new BufferedReader(new InputStreamReader(System.in)); 
 Socket clientSocket = new Socket("hostname", 6789); 
 DataOutputStream outToServer = 
 new DataOutputStream(clientSocket.getOutputStream()); 
Tạo 
luồng đầu vào 
Tạo 
socket khách, 
kết nối tới chủ 
Tạo 
luồng đầu ra 
gắn vào Socket 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
31 
Ví dụ: Khách Java (TCP), tt. 
 BufferedReader inFromServer = 
 new BufferedReader(new 
 InputStreamReader(clientSocket.getInputStream())); 
 sentence = inFromUser.readLine(); 
 outToServer.writeBytes(sentence + '\n'); 
 modifiedSentence = inFromServer.readLine(); 
 System.out.println("FROM SERVER: " + modifiedSentence); 
 clientSocket.close(); 
 } 
} 
Tạo 
luồng đầu vào 
gắn với socket 
Gửi dòng 
tới chủ 
Đọc dòng 
từ chủ 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
32 
Ví dụ: chủ Java (TCP) 
import java.io.*; 
import java.net.*; 
class TCPServer { 
 public static void main(String argv[]) throws Exception 
 { 
 String clientSentence; 
 String capitalizedSentence; 
 ServerSocket welcomeSocket = new ServerSocket(6789); 
 while(true) { 
 Socket connectionSocket = welcomeSocket.accept(); 
 BufferedReader inFromClient = 
 new BufferedReader(new 
 InputStreamReader(connectionSocket.getInputStream())); 
Tạo 
Socket đón khách 
tại cổng 6789 
Chờ khách tới 
liên hệ tại Socket 
Tạo 
luồng đầu vào, 
gắn với socket 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
33 
Ví dụ: máy chủ Java (TCP), tt 
 DataOutputStream outToClient = 
 new DataOutputStream(connectionSocket.getOutputStream()); 
 clientSentence = inFromClient.readLine(); 
 capitalizedSentence = clientSentence.toUpperCase() + '\n'; 
 outToClient.writeBytes(capitalizedSentence); 
 } 
 } 
} 
Đọc vào 1 
dòng từ socket 
Tạo luồng đầu ra, 
gắn vào socket 
Viết một 
dòng ra socket 
đoạn cuối vòng lặp “while”, 
quay trở lại và chờ kết nối của khách khác 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
34 
Chương 2: Tầng ứng dụng 
 2.1 Các nguyên lý của tầng 
ứng dụng 
 2.2 Web và HTTP 
 2.3 FTP 
 2.4 Thư điện tử 
 SMTP, POP3, IMAP 
 2.5 DNS 
 2.6 Ứng dụng P2P 
 2.7 Lập trình Socket với 
TCP 
 2.8 Lập trình Socket với 
UDP 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
35 
Lập trình Socket với UDP 
UDP: không “kết nối” giữa khách và 
chủ 
 không bắt tay 
 người gửi gán địa chỉ IP và cổng 
của người nhận vào mỗi gói tin 
 máy chủ phải tách địa chỉ IP và 
cổng của người gửi từ gói tin 
nhận được 
UDP: dữ liệu truyền tải có thể bị lộn 
xộn trật tự hoặc là bị mất 
từ góc nhìn của ứ/d 
UDP cung cấp sự truyền tải 
không tin cậy của một nhóm byte 
(“datagrams”) giữa khách và chủ 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
36 
Tương tác socket khách/chủ: UDP 
Máy chủ (chạy trên hostid) 
đóng 
clientSocket 
đọc gói tin từ 
clientSocket 
tạo socket, 
 clientSocket = 
DatagramSocket() 
Khách 
tạo gói tin với IP máy chủ và 
port=x; gửi gói tin thông qua 
 clientSocket 
tạo socket, 
port= x. 
serverSocket = 
DatagramSocket() 
đọc gói tin từ 
serverSocket 
viết phản hồi tới 
serverSocket 
chỉ rõ địa chỉ, 
số cổng của khách 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
37 
Ví dụ: Khách Java (UDP) 
se
n
d
P
a
ck
e
t
to network from network
re
ce
iv
e
P
a
ck
e
t
in
F
ro
m
U
se
r
keyboard monitor
Process
clientSocket
UDP
packet
input
stream
UDP
packet
UDP
socket
Đầu ra: gửi gói tin 
(nhắc lại: TCP gửi 
“luồng byte”) 
Đầu vào: nhận gói 
tin (nhắc lại: TCP 
nhận “luồng byte”) 
Tiến trình 
khách 
socket UDP 
khách 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
38 
Ví dụ: khách Java (UDP) 
import java.io.*; 
import java.net.*; 
class UDPClient { 
 public static void main(String args[]) throws Exception 
 { 
 BufferedReader inFromUser = 
 new BufferedReader(new InputStreamReader(System.in)); 
 DatagramSocket clientSocket = new DatagramSocket(); 
 InetAddress IPAddress = InetAddress.getByName("hostname"); 
 byte[] sendData = new byte[1024]; 
 byte[] receiveData = new byte[1024]; 
 String sentence = inFromUser.readLine(); 
 sendData = sentence.getBytes(); 
Tạo 
luồng đầu vào 
Tạo 
socket khách 
Dịch tên máy 
sang địa chỉ IP 
sử dụng DNS 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
39 
Ví dụ: khách Java client (UDP), tt. 
 DatagramPacket sendPacket = 
 new DatagramPacket(sendData, sendData.length, IPAddress, 9876); 
 clientSocket.send(sendPacket); 
 DatagramPacket receivePacket = 
 new DatagramPacket(receiveData, receiveData.length); 
 clientSocket.receive(receivePacket); 
 String modifiedSentence = 
 new String(receivePacket.getData()); 
 System.out.println("FROM SERVER:" + modifiedSentence); 
 clientSocket.close(); 
 } 
} 
Tạo gói tin 
với dữ liệu, 
độ dài, IP, cổng 
Gửi gói tin 
tới máy chủ 
Đọc gói tin 
từ máy chủ 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
40 
Ví dụ: máy chủ Java (UDP) 
import java.io.*; 
import java.net.*; 
class UDPServer { 
 public static void main(String args[]) throws Exception 
 { 
 DatagramSocket serverSocket = new DatagramSocket(9876); 
 byte[] receiveData = new byte[1024]; 
 byte[] sendData = new byte[1024]; 
 while(true) 
 { 
 DatagramPacket receivePacket = 
 new DatagramPacket(receiveData, receiveData.length); 
 serverSocket.receive(receivePacket); 
Tạo 
socket UDP 
tại cổng 9876 
Tạo bộ nhớ cho 
gói tin đến 
Nhận 
gói tin 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
41 
Ví dụ: Máy chủ Java (UDP), tt 
 String sentence = new String(receivePacket.getData()); 
 InetAddress IPAddress = receivePacket.getAddress(); 
 int port = receivePacket.getPort(); 
 String capitalizedSentence = sentence.toUpperCase(); 
 sendData = capitalizedSentence.getBytes(); 
 DatagramPacket sendPacket = 
 new DatagramPacket(sendData, sendData.length, IPAddress, 
 port); 
 serverSocket.send(sendPacket); 
 } 
 } 
} 
Lấy địa chỉ IP 
số cổng, của 
người gửi 
Viết gói tin 
ra socket 
Đoạn cuối vòng lặp, quay lại và 
chờ gói tin khác 
Tạo ra gói tin 
để gửi tới khách 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
42 
Chương 2: Tổng kết 
 kiến trúc ứng dụng 
 khách-chủ 
 P2P 
 lai 
 các yêu cầu dịch vụ của ứng 
dụng: 
 sự tin cậy, băng thông, độ trễ 
 mô hình dịch vụ truyền tải 
Internet 
 hướng kết nối, tin cậy:: TCP 
 ko tin cậy, gói tin: UDP 
Kết thúc tìm hiểu về các ứng dụng mạng! 
 các giao thức cụ thể: 
 HTTP 
 FTP 
 SMTP, POP, IMAP 
 DNS 
 P2P: BitTorrent, Skype 
 lập trình hốc kết nối 
Trường Đại Học Bách Khoa Tp.HCM 
Khoa Khoa Học và Kỹ Thuật Máy Tính 
© 2011 
MẠNG MÁY TÍNH CĂN BẢN 
Bài giảng 3 - Chương 2: Tầng ứng dụng 
43 
Chương 2: Tổng kết 
 sự trao đổi truy vấn/phản 
hồi phổ biến: 
 khách yêu cầu thông tin 
hoặc dịch vụ 
 máy chủ phản hồi với dữ 
liệu, mã trạng thái 
 các định dạng t/điệp: 
 mào đầu: các trường mang 
thông tin về dữ liệu 
 dữ liệu: thông tin được trao 
đổi 
Quan trọng nhất: hiểu về các giao thức 
Các chủ đề quan trọng: 
 t/điệp điều khiển vs. dữ liệu 
 nội tuyến, ngoại tuyến 
 tập trung vs. phân tán 
 ko trạng thái vs. có trạng 
thái 
 truyền tải t/điệp tin cậy vs. 
ko tin cậy 

File đính kèm:

  • pdfBài giảng Mạng máy tính - Nguyễn Cao Đạt - Chương 2 Tầng ứng dụng (Bài giảng 3).pdf