Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn

Our goals:

 conceptual,

implementation

aspects of network

application protocols

transport-layer

 learn about protocols

by examining popular

application-level

protocols

 HTTP

FTP

2: Application Layer 4

service models

 client-server

paradigm

 peer-to-peer

paradigm

 SMTP / POP3 / IMAP

 DNS

 programming network

applications

 socket API

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 1

Trang 1

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 2

Trang 2

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 3

Trang 3

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 4

Trang 4

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 5

Trang 5

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 6

Trang 6

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 7

Trang 7

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 8

Trang 8

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 9

Trang 9

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 120 trang xuanhieu 4100
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn

Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn
d có thể được biểu diễn qua chuỗi n bits.
 Đòi hỏi mỗi trị key là một số nguyên thuộc cùng 
vùng [0,2n-1]
 Để thu được trị key nguyên như đòi hỏi trên, sử 
dụng hàm băm h, h nhận trị key gốc và trả về trị 
nguyên trong vùng [0,2n-1]
 eg, key = h(“Led Zeppelin IV”)
 Đây là lý do tại sao ta gọi nó là DHT (distributed “hash” 
table)
Lưu cặp (key, value) ở peer nào?
 Vấn đề: Lưu trữ cặp (key, value) ở peer nào?
 Quy tắc: Lưu tại peer có id=key. Nếu không 
có peer như vậy thì lưu tại peer có id gần 
nhất.
 Quy ước trong bài giảng: id gần nhất là id 
nằm liền sau trong danh sách các id. 
 VD: n=4; peers: 1,3,4,5,8,10,12,14; 
 key = 13, thì peer liền sau là 14
 key = 15, thì peer liền sau là 1
13
4
12
15
Circular DHT (1)
5
8
10
 Mỗi peer chỉ biết peer liền trước và liền sau.
 “Overlay network”
Circle DHT (2)
0001
0011
1111
Ai chịu trách nhiệm
cho key 1110 ?
Là tôi
O(N) messages
on avg to resolve
query, when there
are N peers
0100
0101
1000
1010
1100
1110
1110
1110
1110
1110
1110
Define closest
as closest
successor
Circular DHT with Shortcuts
1
3
4
5
12
15
Ai chịu trách nhiệm
cho key 14 (1110) ?
(1111)
(0011)
 Mỗi peer quản lý địa chỉ IP của peer liền trước, peer 
liền sau và các short cuts.
 Giảm từ 6 còn 2 messages.
 Có thể thiết kế shortcuts sao cho số láng giềng và
số message khi truy vấn đều bằng O(log N)
8
10
(1000)
Peer Churn
1
3
4
5
12
15
 Để xử lý trình trạng các peer đến và 
đi mà không báo trước (peer churn), 
mỗi peer cần phải biết các địa chỉ IP 
của 2 peer liền sau của nó.
 Mỗi peer sẽ ping định kỳ 2 peer liền 
sau của nó để xác định là chúng còn 
hiện hữu hay đã rút lui.
 Peer 5 đột ngột rời khỏi vòng.
 Peer 4 phát hiện ra điều này; nhận peer 8 làm peer liền
sau (thứ nhất); và hỏi peer 8 “peer liền sau của 8?”; sau
đó xem peer liền sau của 8 là peer kế liền sau (thứ
hai)của nó.
 Nếu peer 13 muốn gia nhập vòng thì sao?
8
10
P2P Case study: Skype
 Bản chất P2P: các cặp 
user có thể truyền thông 
trực tiếp.
 Giao thức tầng ứng dụng 
sở hữu của Skype.
Skype clients (SC)
Supernode 
(SN)
Skype 
login server
2: Application Layer 93
 Tổ chức phân cấp, sử 
dụng các Supernode
 Ánh xạ giữa username và 
địa chỉ IP, được lưu phân 
bố giữa các Supernode.
Peers as relays
 Vấn đề gặp phải khi cả 2 
peer (VD Alice và Bob) đều 
nằm đằng sau “NAT”
 NAT ngăn chặn các peer từ 
bên ngoài khởi tạo các kết nối 
(hay cuộc gọi) đến các peer 
bên trong
Giải pháp:
2: Application Layer 94

 Sử dụng các supernode của 
Alice và Bob, 1 supernode 
được chọn ra làm relay node 
(nút chuyển tiếp)
 Từng peer sẽ khởi tạo kết nối 
với nút chuyển tiếp. 
 Do đó các peer có thể truyền 
thông cho nhau vượt qua NAT 
nhờ nút chuyển tiếp.
Chapter 2: Application layer
 2.1 Principles of 
network applications
 2.2 Web and HTTP
 2.3 FTP 
 2.4 Electronic Mail
 2.6 P2P applications
 2.7 Socket programming 
with UDP
 2.8 Socket programming 
with TCP
2: Application Layer 95
 SMTP, POP3, IMAP
 2.5 DNS
Socket programming
 Socket API
 Được giới thiệu trong BSD4.1 
UNIX, 1981 A application-created, 
OS-controlled interface 
socket
Mục tiêu: học cách xây dựng ứng dụng client/server 
truyền thông với nhau sử dụng sockets
2: Application Layer 96
 Được các ứng dụng tạo ra, sử 
dụng và giải phóng một cách 
tường minh.
 client/server paradigm 
 Có 2 loại dịch vụ vận chuyển 
thông qua socket API
 UDP
 TCP
(a “door”) into which
application process can 
both send and 
receive messages to/from 
another application 
process
Socket programming basics
 Server phải đang 
chạy trước khi client 
có thể gửi dữ liệu cho 
nó.
 Socket có thể xác định 
trong nội bộ nhờ số 
hiệu cổng (port 
number)
Tương tự như số hiệu  Server phải có 1 
socket (cửa) mà nhờ 
đó nó có thể nhận/ 
gửi đi các segment
 Tương tự, client cũng 
cần có 1 socket

căn hộ trong 1 tòa nhà
 Client cần phải biết địa 
chỉ IP của Server và số 
hiệu cổng của socket.
2: Application Layer 97
Socket programming with UDP
UDP: không có “kết nối” giữa 
client và server
 Không bắt tay
 Bên gửi gắn địa chỉ IP và số 
hiệu cổng lên từng segment
 Server có thể trích xuất địa 
Quan điểm ứng dụng
UDP cung cấp dịch vụ vận chuyển 
datagram “không đ m b o tin 
2: Application Layer 98
chỉ IP và số hiểu cổng của 
bên gửi từ segment nhận 
được.
ả ả
cậy” giữa client and server
Lưu ý: Thuật ngữ chính thức gọi gói 
tin UDP là “datagram”. Trong lớp 
này chúng ta sẽ gọi là “UDP 
segment”
Running example
 Client:
 Người sử dụng gõ vào một dòng văn bản
 Chương trình client gửi dòng này đến server
 Server:
 Server nhận được dòng văn bản
 Server chuyển thành chữ hoa tất cả các ký tự
 Gửi dòng văn bản đã được sửa đổi đến client
 Client:
 Nhận dòng văn bản
 Hiển thị
2: Application Layer 99
Client/server socket interaction: UDP
Server (running on hostid)
create socket,
clientSocket = 
DatagramSocket()
Client
Tạo datagram với server IP và
create socket,
port= x.
serverSocket = 
DatagramSocket()
2: Application Layer 100
Đóng
clientSocket
Đọc datagram từ
clientSocket
port=x; gửi datagram thông qua 
clientSocketĐọc datagram từ
serverSocket
Soạn trả lời cho 
client (với địa 
chỉ IP client và 
số hiệu cổng), 
gửi thông qua 
serverSocket
Example: Java client (UDP)
i
n
F
r
o
m
U
s
e
r
keyboard monitor
Process
input
stream
sends 
Input: receives 
packet (recall 
thatTCP received 
Client
process
2: Application Layer 101
s
e
n
d
P
a
c
k
e
t
to network from network
r
e
c
e
i
v
e
P
a
c
k
e
t
clientSocket
UDP
packet
UDP
packet
UDP
socket
Output: 
packet (recall
that TCP sent 
“byte stream”)
“byte stream”)
client UDP 
socket
Example: Java client (UDP)
import java.io.*; 
import java.net.*; 
class UDPClient { 
public static void main(String args[]) throws Exception 
{ 
BufferedReader inFromUser = 
Create
input stream
2: Application Layer 102
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();
Create 
client socket
Translate
hostname to IP 
address using DNS
Example: Java client (UDP), cont.
DatagramPacket sendPacket = 
new DatagramPacket(sendData, sendData.length, IPAddress, 9876); 
clientSocket.send(sendPacket); 
DatagramPacket receivePacket = 
new DatagramPacket(receiveData, receiveData.length); 
Create datagram 
with data-to-send,
length, IP addr, port
Send datagram
to server
2: Application Layer 103
clientSocket.receive(receivePacket); 
String modifiedSentence = 
new String(receivePacket.getData()); 
System.out.println("FROM SERVER:" + modifiedSentence); 
clientSocket.close(); 
} 
}
Read datagram
from server
Example: Java server (UDP)
import java.io.*; 
import java.net.*; 
class UDPServer { 
public static void main(String args[]) throws Exception 
{ 
DatagramSocket serverSocket = new DatagramSocket(9876); 
Create
datagram socket
at port 9876
2: Application Layer 104
byte[] receiveData = new byte[1024]; 
byte[] sendData = new byte[1024]; 
while(true) 
{ 
DatagramPacket receivePacket = 
new DatagramPacket(receiveData, receiveData.length); 
serverSocket.receive(receivePacket);
Create space for
received datagram
Receive
datagram
Example: Java server (UDP), cont
String sentence = new String(receivePacket.getData()); 
InetAddress IPAddress = receivePacket.getAddress(); 
int port = receivePacket.getPort(); 
String capitalizedSentence = sentence.toUpperCase(); 
Get IP addr
port #, of
sender
2: Application Layer 105
sendData = capitalizedSentence.getBytes(); 
DatagramPacket sendPacket = 
new DatagramPacket(sendData, sendData.length, IPAddress, 
port); 
serverSocket.send(sendPacket); 
} 
} 
}
Write out 
datagram
to socket
End of while loop,
loop back and wait for
another datagram
Create datagram
to send to client
UDP observations & questions
 Cả client và server đều dùng DatagramSocket
 Địa chỉ IP bên nhận và số hiệu cổng được gắn 
tường minh vào segment.
 Điều gì sẽ xảy ra nếu thay đổi cả hai clientSocket , 
serverSocket thành “mySocket”?
 Liệu client có thể gửi 1 segment đến 1 server mà 
không biết đến địa chỉ IP của server và/hoặc port 
number?
 Có thể nào nhiều client sử dụng server này?
2: Application Layer 106
Chapter 2: Application layer
 2.1 Principles of 
network applications
 2.2 Web and HTTP
 2.3 FTP 
 2.4 Electronic Mail
 2.6 P2P applications
 2.7 Socket programming 
with UDP
 2.8 Socket programming 
with TCP
2: Application Layer 107
 SMTP, POP3, IMAP
 2.5 DNS
Socket-programming using TCP
TCP service: reliable transfer of bytes from one process 
to another
2: Application Layer 108
process
TCP with
buffers,
variables
socket
controlled by
application
developer
controlled by
operating
system
host or
server
process
TCP with
buffers,
variables
socket
controlled by
application
developer
controlled by
operating
system
host or
server
internet
Socket programming with TCP
Client phải liên lạc với server
 Trước tiên, tiến trình server 
phải đang chạy.
 Server phải có socket được 
tạo sẵn, chờ đón các liên lạc 
từ phía client.
 Khi được client liên lạc, server 
TCP tạo mới một socket để 
server process liên lạc với 
client
 Cho phép server trao đổi 
với nhiều client
source port numbers được 
2: Application Layer 109
Client liên lạc với server bằng 
cách:
 Tạo client-local TCP socket
 Chỉ định địa chỉ IP, port 
number của server process
 Khi client tạo socket: client 
TCP thiết lập kết nới đến 
server TCP

dùng để phân biệt client 
(nói rõ trong Ch. 3)
TCP provides reliable, in-order
transfer of bytes (“pipe”) 
between client and server
Quan điểm ứng dụng
Client/server socket interaction: TCP
wait for incoming
create socket,
port=x, for
incoming request:
welcomeSocket = 
ServerSocket()
create socket,
connect to hostid, port=x
Server (running on hostid) Client
TCP 
connection setup
2: Application Layer 110
connection request
connectionSocket =
welcomeSocket.accept()
clientSocket = 
Socket()
close
connectionSocket
read reply from
clientSocket
close
clientSocket
send request using
clientSocketread request from
connectionSocket
write reply to
connectionSocket
in
F
r
o
m
U
s
e
r
keyboard monitor
Process
input
stream
Client
process
Stream jargon
 Stream là dãy các ký tự đi 
vào hoặc ra khỏi một 
process
 Một input stream đươc liên 
kết với một vài nguồn nhập 
liệu dành cho process, VD 
2: Application Layer 111
o
u
t
T
o
S
e
r
v
e
r
to network from network
i
n
F
r
o
m
S
e
r
v
e
r
clientSocket
input
stream
output
stream
TCP
socket
client TCP 
socket
bàn phím hoặc socket.
 Một output stream được liên 
kết với một đầu ra, VD màn 
hình hoặc socket.
Socket programming with TCP
VD về ứ/dụng client-server:
1) Client đọc dòng từ standard 
input (inFromUser stream), 
gửi đến server thông qua 
socket (outToServer stream)
2) Server đọc dòng từ socket
2: Application Layer 112
3) Server chuyển đổi ký tự trong 
dòng thành chữ hoa, gửi ngược 
lại client.
4) Client đọc, in ra dòng bị sửa đổi 
từ socket (inFromServer
stream)
Example: Java client (TCP)
import java.io.*; 
import java.net.*; 
class TCPClient { 
public static void main(String argv[]) throws Exception 
{ 
String sentence; 
2: Application Layer 113
String modifiedSentence; 
BufferedReader inFromUser = 
new BufferedReader(new InputStreamReader(System.in)); 
Socket clientSocket = new Socket("hostname", 6789); 
DataOutputStream outToServer = 
new DataOutputStream(clientSocket.getOutputStream());
Create
input stream
Create 
client socket, 
connect to server
Create
output stream
attached to socket
Example: Java client (TCP), cont.
BufferedReader inFromServer = 
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream())); 
sentence = inFromUser.readLine(); 
Create
input stream
attached to socket
Send line
2: Application Layer 114
outToServer.writeBytes(sentence + '\n'); 
modifiedSentence = inFromServer.readLine(); 
System.out.println("FROM SERVER: " + modifiedSentence); 
clientSocket.close(); 
} 
}
to server
Read line
from server
Example: Java server (TCP)
import java.io.*; 
import java.net.*; 
class TCPServer { 
public static void main(String argv[]) throws Exception 
{ 
String clientSentence; 
String capitalizedSentence; Create
2: Application Layer 115
ServerSocket welcomeSocket = new ServerSocket(6789); 
while(true) { 
Socket connectionSocket = welcomeSocket.accept(); 
BufferedReader inFromClient = 
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream())); 
welcoming socket
at port 6789
Wait, on welcoming
socket for contact
by client
Create input
stream, attached 
to socket
Example: Java server (TCP), cont
DataOutputStream outToClient = 
new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine(); Read in linefrom socket
Create output
stream, attached 
to socket
2: Application Layer 116
capitalizedSentence = clientSentence.toUpperCase() + '\n'; 
outToClient.writeBytes(capitalizedSentence); 
} 
} 
}
Write out line
to socket
End of while loop,
loop back and wait for
another client connection
TCP observations & questions
 Server có 2 kiểu socket: 
 ServerSocket và Socket 
 Khi client gõ vào cửa “serverSocket”, server tạo ra 
connectionSocket và hoàn tất TCP conx.
 Địa chỉ IP đích và số hiệu cổng không được gắn 
vào segment tường minh.
 Liệu nhiều clients có thể sử dụng server?.

2: Application Layer 117
Chapter 2: Summary
 application architectures
 client-server
 P2P
 hybrid
 application service 
our study of network apps now complete!
 specific protocols:
 HTTP
 FTP
 SMTP, POP, IMAP
 DNS
2: Application Layer 118
requirements:
 reliability, bandwidth, delay
 Internet transport service 
model
 connection-oriented, 
reliable: TCP
 unreliable, datagrams: UDP
 P2P: BitTorrent, Skype
 socket programming
Chapter 2: Summary
 typical request/reply 
message exchange:
 client requests info or 
service
Most importantly: learned about protocols
 Important themes: 
 control vs. data msgs
 in-band, out-of-band
2: Application Layer 119
 server responds with 
data, status code
 message formats:
 headers: fields giving info 
about data
 data: info being 
communicated
 centralized vs. 
decentralized 
 stateless vs. stateful
 reliable vs. unreliable 
msg transfer 
 “complexity at network 
edge”

File đính kèm:

  • pdfbai_giang_mang_may_tinh_nang_cao_chapter_2_application_layer.pdf