Các nguyên tắccủa
ứng dụng mạng
2.2 Web và HTTP
2.3 FTP
2.4 E-Mail
SMTP, POP3, IMAP
2.5 DNS
2.6 Chia sẻfile P2P
2.7 Lập trình Socket với
TCP
2.8 Lập trình Socket với 2.8 Lập trình Socket với
Lập t
98 trang |
Chia sẻ: Mr Hưng | Lượt xem: 967 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Mạng máy tính - Chương 2: Tầng ứng dụng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
networkuptopia.com và bản ghi kiểu MX cho
networkutopia.com
Người khác xác định địa chỉ IP của Web site này như
thế nào?
1-72
Chương 2: Tầng ứng dụng
2.1 Nguyên tắc của các
ứng dụng mạng
2.2 Web và HTTP
2.3 FTP
2.4 Electronic Mail
SMTP, POP3, IMAP
2.5 DNS
2.6 Chia sẻ file P2P
2.7 Lập trình Socket với
TCP
2.8 Lập trình Socket với
UDP
2.9 Xây dựng Web Server
1-73
Chia sẻ file P2P
Ví dụ
Alice chạy ứng dụng
P2P client
Kết nối tới Internet và
nhận một địa chỉ IP mới
Tìm “Hey Jude”
Ứng dụng các peer
khác có bản sao chép
của Hey Jude không.
Alice chọn một peer,
Bob
File được sao chép từ
máy của Bob tới máy
của Alice: HTTP
Trong khi Alice đang tải,
người sử dụng khác lấy
dữ liệu đã có trên máy
Alice
Peer của Alice vừa là
Web client vừa là Web
server.
Mọi peer là server = quy
mô lớn!
1-74
P2P: thư mục trung tâm
Thiết kế của “Napster” ban
đầu
1) Khi peer kết nối, nó thông
báo server trung tâm:
Địa chỉ IP
Nội dung
2) Alice yêu cầu “Hey Jude”
3) Alice yêu cầu file từ Bob
Server thư mục
trung tâm
peers
Alice
Bob
1
1
1
12
3
1-75
P2P: Vấn đề của thư mục trung tâm
Một điểm chịu lỗi
Hiệu năng
Xâm phạm bản quyền
Truyền file là không
tập trung,
xác định vị trí nội dung
là không tập chung
1-76
Phát tán các query: Gnutella
Hoàn toàn phân tán
Không có server trung
tâm
Giao thức công khai
Nhiều Gnutella clients
cài đặt giao thức
Mạng bao phủ: đồ thị
Cạnh giữa peer X và Y:
nếu có một kết nối TCP
Tất cả peer hoạt động
và các cạnh là mạng
bao phủ
Các cạnh không là
đường truyền vật lý
Peer thường kết nối với
< 10 hàng xóm
1-77
Gnutella: Giao thức
Query
QueryHit
Query
Query
QueryHit
Q u
e r y
Query
Q u
e r y
H i t
Truyền file:
HTTP Query gửi qua kết nối TCP đã có
Các peers chuyển tiếp
bản tin Query
QueryHit gửi theo
đường ngược lại
Ổn định:
giới hạn phạm vi phát tán
1-78
Gnutella: Peer gia nhập
1. Peer gia nhập X phải tìm một số peer khác trong
mạng Gnutella: sử dụng danh sách các peer ứng
viên
2. X cố gắng tạo kết nối TCP với peer khác trong danh
sách tới khi thiết lập được kết nối với Y
3. X gửi bản tin Ping tới Y; Y chuyển tiếp bản tin Ping .
4. Mọi peer nhận được bản tin Ping sẽ trả lời bằng
bản tin Pong
5. X nhận nhiều bản tin Pong. Nó có thể thiết lập thêm
các kết nối TCP
1-79
Lai: KaZaA
Mỗi peer là đứng đầu
của một nhóm hoặc là
con của một nhóm.
Kết nối TCP giữa peer và
các đứng đầu của nhóm.
Kết nối TCP giữa các cặp
đứng đầu nhóm.
Đứng đầu nhóm theo dõi
nội dung của tất cả các
con của nó. ordinary peer
group-leader peer
neighoring relationships
in overlay network
1-80
KaZaA: Truy vấn
Mỗi file có một hash và một mô tả
Client gửi từ khóa tới đứng đầu nhóm
Đứng đầu nhóm trả lời các kết quả:
Mỗi kết quả: metadata, hash, địa chỉ IP
Nếu đứng đầu nhóm chuyển tiếp truy vấn tới
đứng đầu nhóm khác, đứng đầu nhóm khác
trả lời
Sau đó, client chọn file để tải xuống
Yêu cầu HTTP sử dụng hash làm định danh để
gửi tới peer giữ file đó
1-81
Kazaa
Hạn chế số upload đồng thời
Xếp hàng yêu cầu
Ưu tiên
Download song song
1-82
Chương 2: Tầng ứng dụng
2.1 Nguyên tắc của các
ứng dụng mạng
2.2 Web và HTTP
2.3 FTP
2.4 Electronic Mail
SMTP, POP3, IMAP
2.5 DNS
2.6 Chia sẻ file P2P
2.7 Lập trình Socket với
TCP
2.8 Lập trình Socket với
UDP
2.9 Xây dựng Web Server
1-83
Lập trình Socket với TCP
Client phải liên lạc với server
• Tiến trình server phải đang chạy
• Server phải tạo socket (cửa) để client
liên lạc
Client liên lạc với server bằng cách:
• Tạo client-local TCP socket
• Gán địa chỉ IP, cổng của tiến trình
server
• Khi client tạo socket: client TCP giành
kết nối tới server TCP
• Khi nhận được sự liên lạc của
client, server TCP tạo một socket
mới cho tiến trình server để giao
tiếp với client
– Cho phép server nói chuyện
với nhiều client
– Giá trị source port dùng để
phân biệt các client (chi tiết
hơn trong chương 3)
TCP cung cấp dịch vụ truyền
tin cậy các byte giữa client và server
Góc nhìn ứng dụng
1-84
Ví dụ: C client (TCP)
/* client.c */
void main(int argc, char *argv[])
{
struct sockaddr_in sad; /* cấu trúc chứa 1 địa chỉ IP */
int clientSocket; /* mô tả socket */
struct hostent *ptrh; /* con trỏ tới một entry trong host table */
char Sentence[128];
char modifiedSentence[128];
host = argv[1]; port = atoi(argv[2]);
clientSocket = socket(PF_INET, SOCK_STREAM, 0);
memset((char *)&sad,0,sizeof(sad)); /* xóa cấu trúc sockaddr */
sad.sin_family = AF_INET; /* thiết lập family Internet */
sad.sin_port = htons((u_short)port);
ptrh = gethostbyname(host); /* Chuyển tên host thành địa chỉ IP */
memcpy(&sad.sin_addr, ptrh->h_addr, ptrh->h_length);
connect(clientSocket, (struct sockaddr *)&sad, sizeof(sad));
Tạo client socket,
Kết nối tới server
1-85
Ví dụ: C client (TCP) (tiếp)
gets(Sentence);
n=write(clientSocket, Sentence, strlen(Sentence)+1);
n=read(clientSocket, modifiedSentence, sizeof(modifiedSentence
printf(“TỪ SERVER: %s\n”, modifiedSentence);
close(clientSocket);
}
Đọc
input stream
từ user
Gửi tới server
Đọc từ server
Đóng
kết nối
1-86
Ví dụ: C server (TCP)
/* server.c */
void main(int argc, char *argv[])
{
struct sockaddr_in sad; /* cấu trúc chứa một địa chỉ IP */
struct sockaddr_in cad;
int welcomeSocket, connectionSocket; /* mô tả socket */
struct hostent *ptrh; /* con trỏ tới một entry trong host table */
char clientSentence[128];
char capitalizedSentence[128];
port = atoi(argv[1]);
welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);
memset((char *)&sad,0,sizeof(sad)); /* xóa cấu trúc sockaddr */
sad.sin_family = AF_INET; /* thiết lập family Internet */
sad.sin_addr.s_addr = INADDR_ANY; /* thiết lập địa chỉ IP address */
sad.sin_port = htons((u_short)port);/* thiết lập giá trị cổng */
bind(welcomeSocket, (struct sockaddr *)&sad, sizeof(sad));
Tạo một socket chờ tại một cổng
&
Gắn với một địa chỉ cục bộ
1-87
Ví dụ: C server (TCP) (tiếp)
/* Chỉ định số client lớn nhất được xếp hàng */
listen(welcomeSocket, 10)
while(1) {
connectionSocket=accept(welcomeSocket, (struct sockaddr *)&cad, &alen);
n=read(connectionSocket, clientSentence, sizeof(clientSentence));
/* Chuyển clientSentence thành chữ hoa, chứa kết quả trong
capitalizedSentence*/
n=write(connectionSocket, capitalizedSentence, strlen(capitalizedSentence)+1);
close(connectionSocket);
}
}
Đưa kết quả ra socket
Kết thúc vòng lặp While,
Quay trở lại và đợi một kết nối client khác
Đợi client liên lạc
1-88
Chương 2: Tầng ứng dụng
2.1 Nguyên tắc của các
ứng dụng mạng
2.2 Web và HTTP
2.3 FTP
2.4 Electronic Mail
SMTP, POP3, IMAP
2.5 DNS
2.6 Chia sẻ file P2P
2.7 Lập trình Socket với
TCP
2.8 Lập trình Socket với
UDP
2.9 Xây dựng Web Server
1-89
Lập trình Socket với UDP
UDP: Không kết nối giữa client và
server
• Không bắt tay
• Bên gửi chỉ ra địa chỉ IP và
cổng của bên nhận cho mỗi gói
tin
• Server phải tìm địa chỉ IP, cổng
của bên gửi trong gói tin đã
nhận
UDP: dữ liệu đã truyền có thể nhận
không theo thứ tự hoặc bị mất
Góc nhìn ứng dụng
UDP cung cấp
dịch vụ truyền không tin cậy
một nhóm các byte (“datagrams”)
giữa client và server
1-90
Tương tác giữa client socket
và server socket: UDP
Đóng
clientSocket
Server (đang chạy trên hostid)
Đọc trả lời từ
clientSocket
Tạo socket,
clientSocket =
DatagramSocket()
Client
Tạo, địa chỉ (hostid, port=x,
Gửi yêu cầu datagram sử dụng clientSocket
Tạo socket,
Cổng=x, đối với
gói tin đến:
serverSocket =
DatagramSocket()
Đọc yêu cầu từ
serverSocket
Ghi trả lời ra
serverSocket
chỉ định địa chỉ host của client
và giá trị cổng
1-91
Ví dụ: C client (UDP)
/* client.c */
void main(int argc, char *argv[])
{
struct sockaddr_in sad; /* cấu trúc chứa một địa chỉ IP */
int clientSocket; /* mô tả socket */
struct hostent *ptrh; /* con trỏ tới một entry trong host table */
char Sentence[128];
char modifiedSentence[128];
host = argv[1]; port = atoi(argv[2]);
clientSocket = socket(PF_INET, SOCK_DGRAM, 0);
/* xác định địa chỉ của server */
memset((char *)&sad,0,sizeof(sad)); /* xóa cấu trúc sockaddr */
sad.sin_family = AF_INET; /* thiết lập family Internet */
sad.sin_port = htons((u_short)port);
ptrh = gethostbyname(host); /* Chuyển tên host thành địa chỉ IP */
memcpy(&sad.sin_addr, ptrh->h_addr, ptrh->h_length);
Tạo client socket,
Không kết nối tới server
1-92
Ví dụ: C client (UDP) (tiếp)
gets(Sentence);
addr_len =sizeof(struct sockaddr);
n=sendto(clientSocket, Sentence, strlen(Sentence)+1,
(struct sockaddr *) &sad, addr_len);
n=recvfrom(clientSocket, modifiedSentence, sizeof(modifiedSentence).
(struct sockaddr *) &sad, &addr_len);
printf(“TỪ SERVER: %s\n”,modifiedSentence);
close(clientSocket);
}
Đọc
input stream
từ user
Gửi
tới server
Đọc
từ server
Đóng
kết nối
1-93
Ví dụ: C server (UDP)
/* server.c */
void main(int argc, char *argv[])
{
struct sockaddr_in sad; /* cấu trúc chứa một địa chỉ IP */
struct sockaddr_in cad;
int serverSocket; /* mô tả socket */
struct hostent *ptrh; /* con trỏ tới một entry trong host table */
char clientSentence[128];
char capitalizedSentence[128];
port = atoi(argv[1]);
serverSocket = socket(PF_INET, SOCK_DGRAM, 0);
memset((char *)&sad,0,sizeof(sad)); /* xóa cấu trúc sockaddr */
sad.sin_family = AF_INET; /* thiết lập family Internet */
sad.sin_addr.s_addr = INADDR_ANY; /* thiết lập địa chỉ IP cục bộ */
sad.sin_port = htons((u_short)port);/* thiết lập giá trị cổng */
bind(serverSocket, (struct sockaddr *)&sad, sizeof(sad));
Tạo socket chờ ở cổng
&
Gắn với một địa chỉ cục bộ
1-94
Ví dụ: C server (UDP) (tiếp)
while(1) {
n=recvfrom(serverSocket, clientSentence, sizeof(clientSentence), 0
(struct sockaddr *) &cad, &addr_len );
/* chuyển clientSentence thành chữ hoa, chứa kết quả trong capitalizedSentence*/
n=sendto(connectionSocket, capitalizedSentence, strlen(capitalizedSentence)+1,0
(struct sockaddr *) &cad, &addr_len);
close(connectionSocket);
}
}
Ghi kết quả ra socket
Kết thúc vòng lặp While,
quay trở lại và đợi kết nối client khác
Nhận bản tin từ các client
1-95
Chương 2: Tầng ứng dụng
2.1 Nguyên tắc của các
ứng dụng mạng
2.2 Web và HTTP
2.3 FTP
2.4 Electronic Mail
SMTP, POP3, IMAP
2.5 DNS
2.6 Chia sẻ file P2P
2.7 Lập trình Socket với
TCP
2.8 Lập trình Socket với
UDP
2.9 Xây dựng Web Server
1-96
Xây dựng một Web server đơn giản
Điều khiển một yêu cầu
HTTP
Chấp nhận yêu cầu
Phân tích header
Giành file đã yêu cầu từ
hệ thống file của server
Tạo bản tin trả lời HTTP:
header lines + file
Gửi trả lời cho client
Sau khi tạo server, có
thể yêu cầu file sử dụng
một trình duyệt (ví dụ IE
explorer)
1-97
Chương 2: Tổng kết
Các kiến trúc ứng dụng
Client-Server
P2P
Hybrid
Các yêu cầu ứng dụng:
Tính tin cậy, băng thông, độ
trễ
Mô hình dịch vụ giao vận
của Internet
Tin cậy, hướng kết nối
Không tin cậy, datagrams:
UDP
Nội dung đã học: Ứng dụng mạng
Các giao thức cụ thể:
HTTP
FTP
SMTP, POP, IMAP
DNS
Lập trình socket
1-98
Chương 2: Tổng kết
Trao đổi bản tin yêu
cầu/bản tin trả lời:
Client yêu cầu thông tin
hoặc dịch vụ
Server gửi dữ liệu trả lời,
mã trạng thái
Định dạng bản tin:
Header: Các trường
mang thông tin về Data
Data: thông tin truyền
thông
Quan trọng: đã học về các giao thức
Bản tin dữ liệu và bản tin điều
khiển
in-band, out-of-band
Tập chung (centralized) và
không tập chung
(decentralized)
Không hướng trạng thái
(stateless) và hướng trạng
thái (stateful)
Truyền bản tin kiểu tin cậy
(reliable) và không tin cậy
(unreliable)
Sự phức tạp tại network edge
Các file đính kèm theo tài liệu này:
- baigiangmangmaytinhchuong2dhsuphamhn_5242.pdf