Bài giảng Mạng máy tính - Nguyễn Cao Đạt - Chương 2: Tầng ứng dụng (Bài giảng 3)
máy chủ không luôn luôn mở
nhiều máy đầu cuối khác
nhau giao tiếp trực tiếp với
nhau
các bên kết nối không liên
tục và thay đổi địa chỉ IP
Ba chủ đề:
Phân phối tệp tin
Tìm kiếm thông tin
Tình huống nghiên cứu:
Skype
nối Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 28 o u tT o S e rv e r to network from network in F ro m S e rv e r in F ro m U s e r keyboard monitor Process clientSocket input stream input stream output stream TCP socket Tiến trình khách socket TCP khách Thuật ngữ Stream – luồng Một luồng là một chuỗi các kí tự chảy (đi) vào hoặc ra từ một tiến trình. Một luồng đầu vào được gắn vào nguồn đầu vào nào đó của tiến trình, vd: bàn phím hoặc socket Một luồng đầu ra được gắn vào một nguồn đầu ra, vd: màn hình hoặc socket. Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 29 Lập trình Socket với TCP Ví dụ ứng dụng khách-chủ: 1) khách đọc từng 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 từng dòng từ socket 3) chủ chuyển từng dòng sang dạng viết HOA, gửi lại cho khách 4) khách đọc, in dòng đã được chỉnh sửa từ socket (luồng inFromServer) Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 30 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; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Tạo luồng đầu vào Tạo socket khách, kết nối tới chủ Tạo luồng đầu ra gắn vào Socket Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 31 Ví dụ: Khách Java (TCP), tt. BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } Tạo luồng đầu vào gắn với socket Gửi dòng tới chủ Đọc dòng từ chủ Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 32 Ví dụ: chủ Java (TCP) import java.io.*; import java.net.*; class TCPServer { 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())); Tạo Socket đón khách tại cổng 6789 Chờ khách tới liên hệ tại 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 và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 33 Ví dụ: máy chủ Java (TCP), tt DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } } Đọc vào 1 dòng từ socket Tạo luồng đầu ra, gắn vào socket Viết một dòng ra socket đoạn cuối vòng lặp “while”, quay trở lại và chờ kết nối của khách khác Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 34 Chương 2: Tầng ứng dụng 2.1 Các nguyên lý của tầng ứng dụng 2.2 Web và HTTP 2.3 FTP 2.4 Thư điện tử SMTP, POP3, IMAP 2.5 DNS 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 Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 35 Lập trình Socket với UDP UDP: không “kết nối” giữa khách và chủ không bắt tay người gửi gán địa chỉ IP và cổng của người nhận vào mỗi gói tin máy chủ phải tách địa chỉ IP và cổng của người gửi từ gói tin nhận được UDP: dữ liệu truyền tải có thể bị lộn xộn trật tự hoặc là bị mất từ góc nhìn của ứ/d UDP cung cấp sự truyền tải không tin cậy của một nhóm byte (“datagrams”) giữa khách và chủ Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 36 Tương tác socket khách/chủ: UDP Máy chủ (chạy trên hostid) đóng clientSocket đọc gói tin từ clientSocket tạo socket, clientSocket = DatagramSocket() Khách tạo gói tin với IP máy chủ và port=x; gửi gói tin thông qua clientSocket tạo socket, port= x. serverSocket = DatagramSocket() đọc gói tin từ serverSocket viết phản hồi tới serverSocket chỉ rõ địa chỉ, số cổng của khách Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 37 Ví dụ: Khách Java (UDP) se n d P a ck e t to network from network re ce iv e P a ck e t in F ro m U se r keyboard monitor Process clientSocket UDP packet input stream UDP packet UDP socket Đầu ra: gửi gói tin (nhắc lại: TCP gửi “luồng byte”) Đầu vào: nhận gói tin (nhắc lại: TCP nhận “luồng byte”) Tiến trình khách socket UDP khách Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 38 Ví dụ: khách Java (UDP) import java.io.*; import java.net.*; 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(); Tạo luồng đầu vào Tạo socket khách Dịch tên máy sang địa chỉ IP sử dụng DNS Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 39 Ví dụ: khách Java client (UDP), tt. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } Tạo gói tin với dữ liệu, độ dài, IP, cổng Gửi gói tin tới máy chủ Đọc gói tin từ máy chủ Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 40 Ví dụ: máy chủ Java (UDP) import java.io.*; import java.net.*; 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) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Tạo socket UDP tại cổng 9876 Tạo bộ 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 và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 41 Ví dụ: Máy chủ Java (UDP), tt String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } } } Lấy địa chỉ IP số cổng, của người gửi Viết gói tin ra socket Đoạn cuối vòng lặp, quay lại và chờ gói tin khác Tạo ra gói tin để gửi tới khách Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 42 Chương 2: Tổng kết kiến trúc ứng dụng khách-chủ P2P lai các yêu cầu dịch vụ của ứng dụng: sự 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 Kết thúc tìm hiểu về các ứng dụng mạng! các giao thức cụ thể: HTTP FTP SMTP, POP, IMAP DNS P2P: BitTorrent, Skype lập trình hốc kết nối Trường Đại Học Bách Khoa Tp.HCM Khoa Khoa Học và Kỹ Thuật Máy Tính © 2011 MẠNG MÁY TÍNH CĂN BẢN Bài giảng 3 - Chương 2: Tầng ứng dụng 43 Chương 2: Tổng kết sự trao đổi truy vấn/phản hồi phổ biến: khách yêu cầu thông tin hoặc dịch vụ máy chủ phản hồi với dữ liệu, mã trạng thái các định dạng t/điệp: mào đầu: các trường mang thông tin về dữ liệu dữ liệu: thông tin được trao đổi Quan trọng nhất: hiểu về các giao thức Các chủ đề quan trọng: t/điệp điều khiển vs. dữ 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
File đính kèm:
- Bài giảng Mạng máy tính - Nguyễn Cao Đạt - Chương 2 Tầng ứng dụng (Bài giảng 3).pdf