Mạng máy tính - Chương 2: Tầng ứng dụng

 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

pdf98 trang | Chia sẻ: Mr Hưng | Lượt xem: 849 | Lượt tải: 0download
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:

  • pdfbaigiangmangmaytinhchuong2dhsuphamhn_5242.pdf