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
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:
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).pdf

