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

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
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
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:
bai_giang_mang_may_tinh_nang_cao_chapter_2_application_layer.pdf

