Bài giảng Mạng máy tính: Bài 5 (Chương II) trình bày về ứng dụng P2P, lập trình Socket với TCP, lập trình Socket với UDP. Tài liệu phục vụ cho các bạn chuyên ngành Công nghệ Thông tin và các bạn quan tâm tới mạng máy tính.
Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính Bài giảng Mạng máy tính ThS NGUYỄN CAO ĐẠT E-mail:dat@cse.hcmut.edu.vn Bài giảng 5: Tầng ứng dụng (tt) Tham khảo: Chương 2: “Computer Networking – A top-down approach” Kurose & Ross, 5th ed., Addison Wesley, 2010 Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Chương 2: Tầng ứng dụng 2.1 Các nguyên lý tầng ứng dụng 2.2 Web HTTP 2.3 FTP 2.4 Thư điện tử SMTP, POP3, IMAP 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 2.5 DNS Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Cấu trúc P2P túy máy chủ không luôn mở nhiều máy đầu cuối khác giao tiếp trực tiếp với bên kết nối không liên tục thay đổi địa IP Ba chủ đề: Phân phối tệp tin Tìm kiếm thơng tin Tình nghiên cứu: Skype Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 peer-peer MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Phân phối tệp tin: Chủ-khách so với P2P Câu hỏi : Cần thời gian để phân phối tệp từ máy chủ tới N người dùng? us: băng thông tải lên máy chủ máy chủ Tệp, kích thước F us ui: băng thông tải lên u1 d1 u2 khách d2 di: băng thông tải xuống khách dN Mạng(băng thông rộng) uN Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Thời gian phân phối tệp: chủ-khách chủ gửi N sao: NF/us s khách i cần F/di t/g để tải xuống máy chủ F us dN tăng tuyến tính theo N (với N lớn) u1 d1 u2 d2 Mạng(băng thông rộng) uN Thời gian để phân phối F tới N khách sử dụng = d = max { NF/u , F/min(d ) } cs s i mơ hình khách/chủ i Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Phân phối tệp tin: P2P máy chủ phải gửi phản sao: F/us đvtg khách i cần F/di t/g để tải NF bit phải tải máy chủ F u1 d1 u2 us dN uN d2 Mạng(băng thông rộng) Vận tốc tải lên nhanh có thể: u s + Su i dP2P = max { F/us, F/min(di) , NF/(us + i Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 Sui) } MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Khách-chủ so với P2P: ví dụ tốc độ tải lên n/d = u, F/u = hour, us = 10u, dmin ≥ us Minimum Distribution Time 3.5 P2P Client-Server 2.5 1.5 0.5 0 10 15 20 N 25 30 35 Phân phối tệp tin: BitTorrent phân phối tệp kiểu P2P máy chủ (tracker): theo dõi cá nhân tham gia vào torrent lấy danh sách người tham gia torrent: nhóm cá nhân chia sẻ đoạn tệp trao đổi đoạn tệp peer Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng BitTorrent (1) tệp chia thành đoạn 256KB cá nhân tham gia torrent: ko có đoạn nào, tích lũy chúng theo t/g đăng kí với tracker để lấy danh sách thành viên, liên kết tới nhóm nhỏ thành viên (“hàng xóm”) tải về, người tải đồng thời chia sẻ đoạn tệp cho người khác cá nhân tham gia từ bỏ torrent n/d tải xong tệp, họ rời mạng torrent lại để chia sẻ cho người khác Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 10 Lập trình Socket với TCP Ví dụ ứng dụng khách-chủ: 1) khách đọc 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 dòng từ socket 3) chủ chuyển dòng sang dạng viết HOA, gửi lại cho khách 4) khách đọc, in dòng chỉnh sửa từ socket (luồng inFromServer) Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 29 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; Tạo luồng đầu vào Tạo socket khách, kết nối tới chủ Tạo luồng đầu gắn vào Socket Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 30 Ví dụ: Khách Java (TCP), tt Tạo luồng đầu vào gắn với socket BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Gửi dòng tới chủ outToServer.writeBytes(sentence + '\n'); Đọc dòng từ chủ modifiedSentence = inFromServer.readLine(); System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 31 Ví dụ: chủ Java (TCP) import java.io.*; import java.net.*; class TCPServer { Tạo Socket đón khách cổng 6789 Chờ khách tới liên hệ 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 Kỹ Thuật Máy Tính © 2011 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())); MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 32 Ví dụ: máy chủ Java (TCP), tt Tạo luồng đầu ra, gắn vào socket DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); Đọc vào dòng từ socket clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; Viết dòng socket outToClient.writeBytes(capitalizedSentence); } } } Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 đoạn cuối vòng lặp “while”, quay trở lại chờ kết nối khách khác MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 33 Chương 2: Tầng ứng dụng 2.1 Các nguyên lý tầng ứng dụng 2.2 Web HTTP 2.3 FTP 2.4 Thư điện tử SMTP, POP3, IMAP 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 2.5 DNS Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 34 Lập trình Socket với UDP UDP: không “kết nối” khách chủ không bắt tay người gửi gán địa IP cổng người nhận vào gói tin máy chủ phải tách địa IP cổng người gửi từ gói tin nhận UDP: liệu truyền tải bị lộn xộn trật tự bị Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 từ góc nhìn ứ/d UDP cung cấp truyền tải khơng tin cậy nhóm byte (“datagrams”) khách chủ MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 35 Tương tác socket khách/chủ: UDP Máy chủ (chạy hostid) tạo socket, port= x serverSocket = DatagramSocket() đọc gói tin từ serverSocket viết phản hồi tới serverSocket rõ địa chỉ, số cổng khách Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 Khách tạo socket, clientSocket = DatagramSocket() tạo gói tin với IP máy chủ port=x; gửi gói tin thơng qua clientSocket đọc gói tin từ clientSocket đóng clientSocket MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 36 Ví dụ: Khách Java (UDP) input stream Tiến trình Process monitor inFromUser keyboard Đầu vào: nhận gói khách tin (nhắc lại: TCP nhận “luồng byte”) UDP packet receivePacket (nhắc lại: TCP gửi “luồng byte”) sendPacket Đầu ra: gửi gói tin UDP packet socket UDP clientSocket khách to network Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 UDP socket from network MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 37 Ví dụ: khách Java (UDP) import java.io.*; import java.net.*; Tạo luồng đầu vào Tạo socket khách Dịch tên máy sang địa IP sử dụng DNS 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(); Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 38 Ví dụ: khách Java client (UDP), tt Tạo gói tin với liệu, độ dài, IP, cổng DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); Gửi gói tin tới máy chủ clientSocket.send(sendPacket); Đọc gói tin từ máy chủ clientSocket.receive(receivePacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 39 Ví dụ: máy chủ Java (UDP) import java.io.*; import java.net.*; Tạo socket UDP cổng 9876 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) { Tạo 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 Kỹ Thuật Máy Tính © 2011 DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 40 Ví dụ: Máy chủ Java (UDP), tt String sentence = new String(receivePacket.getData()); Lấy địa IP số cổng, người gửi InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); Tạo gói tin để gửi tới khách DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); Viết gói tin socket serverSocket.send(sendPacket); } } } Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 Đoạn cuối vịng lặp, quay lại chờ gói tin khác MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 41 Chương 2: Tổng kết Kết thúc tìm hiểu ứng dụng mạng! kiến trúc ứng dụng yêu cầu dịch vụ ứng dụng: khách-chủ P2P lai giao thức cụ thể: HTTP FTP SMTP, POP, IMAP DNS P2P: BitTorrent, Skype lập trình hốc kết nối 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 Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 42 Chương 2: Tổng kết Quan trọng nhất: hiểu giao thức trao đổi truy vấn/phản hồi phổ biến: khách yêu cầu thông tin dịch vụ máy chủ phản hồi với liệu, mã trạng thái định dạng t/điệp: mào đầu: trường mang thông tin liệu liệu: thông tin trao đổi Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 Các chủ đề quan trọng: t/điệp điều khiển vs 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 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng 43 ... BẢN Bài giảng - Chương 2: Tầng ứng dụng Khách-chủ so với P2P: ví dụ tốc độ tải lên n/d = u, F/u = hour, us = 10u, dmin ≥ us Minimum Distribution Time 3 .5 P2P Client-Server 2 .5 1 .5 0 .5 0 10 15 20... Học Kỹ Thuật Máy Tính © 2011 peer-peer MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Phân phối tệp tin: Chủ-khách so với P2P Câu hỏi : Cần thời gian để phân phối tệp từ máy chủ tới... 2 .5 DNS Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng - Chương 2: Tầng ứng dụng Cấu trúc P2P túy máy chủ không luôn mở nhiều máy