Bài giảng Mạng máy tính - Chương 2: Lớp Application
Tóm tắt Bài giảng Mạng máy tính - Chương 2: Lớp Application: ...), bạn đã gửi yêu cầu GET tối thiểu (nhưng đầy đủ) đến HTTP server GET /~ross/ HTTP/1.1 Host: cis.poly.edu 3. Xem thông điệp đáp ứng gửi từ HTTP server! Lớp Application 35 Khảo sát hành động của HTTP telnet Ethereal Lớp Application 36 Trạng thái User-server: các cookie Nhiều Web...t (reader) Lớp Application 56 SMTP SMTP dùng các kết nối bền vững SMTP yêu cầu các thông điệp (header & body) phải ở dạng thức 7-bit ASCII SMTP server dùng CRLF.CRLF xác định kết thúc thông điệp So sánh với HTTP: HTTP: kéo SMTP: đẩy tất cả đều có tương tác lệnh/đáp ứ... 1 trong những peer, là Bob. File được sao chép từ máy tính của Bob: HTTP Trong khi Alice tải xuống, các user khác tải lên từ Alice. Alice là 1 peer đóng cả vai trò Web client và Web server tạm thời. Tất cả peer là server = độ linh hoạt cao! Lớp Application 78 P2P: directory ...
au POP3 không giữ trạng thái của các phiên làm việc IMAP Giữ tất cả thông điệp tại 1 vị trí: server Cho phép user tổ chức các thông điệp theo dạng thư mục IMAP giữ trạng thái xuyên suốt các phiên làm việc: các tên của thư mục và ánh xạ giữa ID của thông điệp và tên thư mục 2.5 DNS Lớp Application 62 Lớp Application 63 DNS: Domain Name System Con người: nhiều cách nhận dạng: SSN, tên, #hộ chiếu Internet hosts, routers: địa chỉ IP (32 bit) dùng cho các gói định địa chỉ “tên”, ví dụ: www.yahoo.com – dùng bởi con người Ánh xạ giữa địa chỉ IP và tên? Domain Name System: cơ sở dữ liệu phân bố hiện thực theo tổ chức phân cấp của nhiều servers tên giao thức lớp application host, routers, name servers để truyền thông với các tên phân giải (địa chỉ/dịch ra tên) lưu ý: chức năng lõi Internet, hiện thực như giao thức lớp application phức tạp ở “biên” mạng Lớp Application 64 DNS Tại sao không tập trung hóa DNS? một điểm chịu lỗi lưu lượng khoảng cách cơ sở dữ liệu tập trung bảo trì không linh hoạt! Các dịch vụ DNS Tên Host chuyển thành địa chỉ IP Bí danh Host các tên đúng chuẩn và bí danh Bí danh Mail server Tải phân bố Các Web server bản sao: tập các địa chỉ IP cho 1 tên đúng chuẩn Lớp Application 65 DNS Servers gốc com DNS servers org DNS servers edu DNS servers poly.edu DNS servers umass.edu DNS serversyahoo.comDNS servers amazon.com DNS servers pbs.org DNS servers Cơ sở dữ liệu cấu trúc, phân bố Client muốn IP cho www.amazon.com: Client hỏi một server gốc (root) để tìm com DNS server Client hỏi com DNS server để lấy amazon.com DNS server Client hỏi amazon.com DNS server để lấy địa chỉ IP của www.amazon.com Lớp Application 66 DNS: các server tên gốc tiếp xúc qua server tên cục bộ nào không thể phân giải tên server tên gốc: tiếp xúc server tên có thẩm quyền nếu ánh xạ tên không xác định lấy ánh xạ trả về ánh xạ đến server tên cục bộ 13 name servers gốc trên toàn cầu b USC-ISI Marina del Rey, CA l ICANN Los Angeles, CA e NASA Mt View, CA f Internet Software C. Palo Alto, CA (and 17 other locations) i Autonomica, Stockholm (plus 3 other locations) k RIPE London (also Amsterdam, Frankfurt) m WIDE Tokyo a Verisign, Dulles, VA c Cogent, Herndon, VA (also Los Angeles) d U Maryland College Park, MD g US DoD Vienna, VA h ARL Aberdeen, MD j Verisign, ( 11 locations) Lớp Application 67 TLD và Server có thẩm quyền Các server Top-level domain (TLD) : chịu trách nhiệm cho tên miền com, org, net, edu, và các tên miền quốc gia như uk, fr, ca, jp. Lĩnh vực giáo dục cho edu TLD Các DNS server có thẩm quyền: DNS server của tổ chức, cung cấp các tên host có thẩm quyền để ánh xạ IP cho server (ví dụ: Web và mail). Không thể duy trì bởi tổ chức hoặc người cung cấp dịch vụ Lớp Application 68 Server tên cục bộ Không hoàn toàn theo cấu trúc phân cấp Mỗi ISP (ISP cá nhân, công ty, trường học) có một server cục bộ như vậy. cũng gọi là “server tên mặc nhiên” Khi một host tạo một truy vấn DNS, truy vấn đó được gửi tới DNS server cục bộ của nó Hoạt động như một proxy, chuyển truy vấn vào cho tổ chức phân cấp Lớp Application 69 host yêu cầu cis.poly.edu gaia.cs.umass.edu DNS server gốc DNS server cục bộ dns.poly.edu 2 3 4 5 6 1 DNS server có thẩm quyền dns.cs.umass.edu 78 TLD DNS server Ví dụ Host tại cis.poly.edu muốn địa chỉ IP của gaia.cs.umass.edu Lớp Application 70 host yêu cầu cis.poly.edu gaia.cs.umass.edu DNS server gốc DNS server cục bộ dns.poly.edu 1 2 45 6 DNS server có thẩm quyền dns.cs.umass.edu 7 8 TLD DNS server 3 Các truy vấn đệ quy truy vấn đệ quy: đẩy trách nhiệm phân giải tên cho server tên đã tiếp xúc được tải quá nặng? truy vấn tuần tự: tên đã tiếp xúc được trả lời với tên của server “Tôi không biết tên đó, nhưng có thể hỏi server này” Lớp Application 71 DNS: caching và cập nhật các record một khi server tên học cách ánh xạ, nó cache ánh xạ điểm đăng nhập cache sẽ thoát ra (biến mất) sau một vài lần TLD servers điển hình sẽ được cache trong các server tên cục bộ • Do đó server tên gốc sẽ không thường xuyên được truy cập cơ chế cập nhật/thông báo bên dưới được thiết kế bởi IETF RFC 2136 Lớp Application 72 Các DNS record DNS: cơ sở dữ liệu phân bố lưu trữ các record tài nguyên (RR) Type=NS name là tên miền (vd: foo.com) value là tên host của server tên có thẩm quyền cho tên miền này dạng thức RR: (name, value, type, ttl) Type=A name là tên host value là địa chỉ IP Type=CNAME name là bí danh của tên “chuẩn” (tên thực) www.ibm.com là tên thực servereast.backup2.ibm.com value là tên chuẩn Type=MX value là tên của email server liên kết với name Lớp Application 73 Giao thức và các thông điệp DNS Giao thức DNS: các thông điệp truy vấn và trả lời, đều có cùng dạng thức thông điệp header thông điệp identification: 16 bit # cho truy vấn, trả lời cho truy vấn dùng cùng # flags: truy vấn hoặc trả lời đệ quy mong chờ đệ quy sẵn sàng trả lời được cấp phép Lớp Application 74 Giao thức và các thông điệp DNS các trường Name, type cho 1 truy vấn các RR trong đáp ứng cho truy vấn các record cho các server có thẩm quyền thông tin “hữu ích” bổ sung có thể sẽ dùng Lớp Application 75 Chèn các record vào DNS Ví dụ: mới tạo “Network Utopia” Đăng ký tên miền networkuptopia.com tại một registrar (ví dụ: Network Solutions) Cần cung cấp cho registrar tên và địa chỉ IP của server tên có thẩm quyền (primary và secondary) của bạn Registrar chèn 2 RR vào trong com TLD server: (networkutopia.com, dns1.networkutopia.com, NS) (dns1.networkutopia.com, 212.212.212.1, A) Đưa vào trong server có thẩm quyền record Type A cho www.networkuptopia.com và bản ghi Type MX cho networkutopia.com Làm sao người khác có thể biết được địa chỉ IP Web site của bạn? 2.6 Chia sẻ file P2P Lớp Application 76 Lớp Application Chia sẻ file P2P 77 Ví dụ Alice chạy ứng dụng P2P client trên máy tính xách tay của cô Kết nối không liên tục vào Internet; lấy địa chỉ IP cho mỗi kết nối Hỏi về “Hey Jude” Ứng dụng sẽ hiển thị những peer khác có bản sao của Hey Jude. Alice chọn 1 trong những peer, là Bob. File được sao chép từ máy tính của Bob: HTTP Trong khi Alice tải xuống, các user khác tải lên từ Alice. Alice là 1 peer đóng cả vai trò Web client và Web server tạm thời. Tất cả peer là server = độ linh hoạt cao! Lớp Application 78 P2P: directory tập trung đầu tiên do “Napster” thiết kế 1) khi peer kết nối, nó thông báo cho server trung tâm: địa chỉ IP nội dung 2) Alice truy vấn “Hey Jude” 3) Alice yêu cầu file từ Bob directory server trung tâm peers Alice Bob 1 1 1 12 3 Lớp Application 79 P2P: các vấn đề với directory tập trung Một điểm chịu lỗi Hiện tượng tắc nghẽn “cổ chai” Xâm phạm bản quyền truyền file không tập trung nhưng tìm kiếm nội dung thì tập trung cao độ Lớp Application 80 Tràn ngập truy vấn: Gnutella hoàn toàn phân bố không có server tập trung giao thức tên miền chung nhiều Gnutella client hiện thực giao thức overlay network: đồ thị có cạnh giữa peer X và Y nếu có 1 kết nối TCP tất cả các peer đang hoạt động và các cạnh là mạng overlay network cạnh không phải là một liên kết vật lý peer sẽ kết nối với < 10 peer lân cận Lớp Application 81 Gnutella: giao thức Truy vấn QueryHit Truy vấn Truy vấn QueryHit T r u y v ấ n Truy vấn Q u e r y H i t Truyền File: HTTPTruy vấn thông điệp gửi trên các kết nối TCP đang có peer chuyển thông điệp truy vấn QueryHit gửi trên đường ngược chiều Độ linh hoạt: hạn chế tràn ngập theo phạm vi Lớp Application 82 Gnutella: hội tụ Peer 1. Hội tụ peer X phải tìm một số peer khác trong Gnutella network: dùng một danh sách các peer dự tuyển 2. X lần lượt thử tạo TCP với các peer trên danh sách cho đến khi kết nối thiết lập được với Y 3. X gửi thông điệp Ping đến Y; Y chuyển thông điệp Ping. 4. Tất cả các peer nhận thông điệp Ping sẽ trả lời bằng thông điệp Pong 5. X nhận được nhiều thông điệp Pong. Nó sau đó có thể thiết lập thêm các kết nối TCP. Peer leaving: xem một số vấn đề mạng gia đình! Lớp Application 83 KaZaA Mỗi peer là một hoặc được gán thành chỉ huy nhóm TCP kết nối giữa peer và nhóm chỉ huy của nó TCP kết nối giữa một số cặp nhóm chỉ huy. Nhóm chỉ huy theo dõi nội dung trong tất cả thành viên bên trong ordinary peer group-leader peer neighoring relationships in overlay network Lớp Application 84 KaZaA: Truy vấn Mỗi file có một băm (hash) hoặc một mô tả Client gửi từ khóa truy vấn đến nhóm chỉ huy của nó Nhóm chỉ huy đáp ứng với truy vấn của nhóm: ứng với mỗi so trùng: metadata, hash, địa chỉ IP Nếu nhóm chỉ huy chuyển truy vấn cho nhóm khác, chúng phản hồi thích hợp Client sau đó chọn các file để download Các yêu cầu HTTP dùng hash như một nhân dạng gửi đến cho peer quản lý file mong muốn Lớp Application 85 KaZaA: các thủ thuật Hạn chế khi tải lên đồng thời Xếp hàng yêu cầu Khích lệ ưu tiên tải xuống song song Tìm hiểu thêm thông tin ở: J. Liang, R. Kumar, K. Ross, “Understanding KaZaA,” (Web site: cis.poly.edu/~ross) 2.7 Lập trình socket vớiTCP Lớp Application 86 (xem thêm slide Lập trình socket) Lớp Application 87 Lập trình socket Socket API đã được giới thiệu trong BSD4.1 UNIX, 1981 rõ ràng tại, sử dụng và giải phóng bởi ứng dụng mô hình client/server 2 kiểu dịch vụ lưu thông qua socket API: datagram không tin cậy tin cậy, truyền byte theo streaming một giao diện host-cục bộ, tạo bởi ứng dụng, điều khiển bởi hệ điều hành interface (một “cửa”) trong đó tiến trình ứng dụng có thể gửi và nhận các thông điệp đến/từ các tiến trình khác socket Mục tiêu: nghiên cứu cách xây dựng ứng dụng truyền thông client/server dùng sockets Lớp Application 88 Lập trình socket dùng TCP Socket: một cánh cửa giữa tiến trình ứng dụng và giao thức transport (UCP hoặc TCP) Dịch vụ TCP: truyền tin cậy các bytes từ một tiến trình đến tiến trình khác tiến trình TCP với bộ đệm, các biến socket điều khiển bởi người phát triển ứng dụng điều khiển bởi hệ điều hành host hoặc server tiến trình TCP với bộ đệm, các biến socket điều khiển bởi người phát triển ứng dụng điều khiển bởi hệ điều hành host hoặc server internet Lớp Application 89 Lập trình socket với TCP Client phải tiếp xúc với server tiến trình server phải chạy trước server phải tạo socket (cửa) mời client đến tiếp xúc Client tiếp xúc server bằng: tạo socketTCP client cục bộ xác định địa chỉ IP, số port của tiến trình server Khi client tạo socket: client TCP thiết lập kết nối với server TCP Khi đã được tiếp xúc bởi client, server TCP tạo socket mới cho tiến trình server để truyền thông với client cho phép server “nói chuyện” với nhiều client số port dùng để phân biệt các client (xem tiếp trong chương 3) TCP cung cấp việc truyền các byte tin cậy và theo thứ tự giữa client và server Nhìn dưới góc độ ứng dụng Lớp Application 90 Giao tiếp socket Client/server: TCP wait for incoming connection request connectionSocket = welcomeSocket.accept() create socket, port=x, for incoming request: welcomeSocket = ServerSocket() create socket, connect to hostid, port=x clientSocket = Socket() close connectionSocket read reply from clientSocket close clientSocket Server (chạy trên hostid) Client send request using clientSocketread request from connectionSocket write reply to connectionSocket TCP connection setup Lớp Application 91 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 i n F r o m U s e r keyboard monitor Process clientSocket input stream input stream output stream TCP socket tiến trình Client client TCP socket Thuật ngữ Stream Một stream là một chuỗi các ký tự được “chảy” vào hoặc ra khỏi một tiến trình Một input stream để chỉ nguồn vào của một tiến trình, vd: bàn phím hoặc socket. Một output stream để chỉ nguồn ra của một tiến trình, vd: màn hình hoặc socket. Lớp Application 92 Lập trình socket dùng TCP Ví dụ ứng dụng client-server : 1) client đọc các dòng từ input chuẩn (inFromUser stream) , gửi đến server thông qua socket (outToServer stream) 2) server đọc các dòng từ socket 3) server chuyển các dòng thành chữ hoa, gửi ngược trở lại cho client 4) client đọc, in các dòng đã sửa đổi từ socket (inFromServer stream) Lớp Application 93 Ví dụ: Java client (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 input stream tạo client socket, kết nối vào server tạo output stream gắn vào socket Lớp Application 94 Ví dụ: Java client (TCP) 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 input stream gắn vào socket Gửi dòng đến server đọc dòng từ server Lớp Application 95 Ví dụ: Java server (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 mời tiếp xúc tại port 6789 Chờ, client tiếp cận với server Tạo input stream, gắn vào socket Lớp Application 96 Ví dụ: Java server (TCP) DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } } Đọc dòng từ socket Tạo output stream, gắn vào socket Viết dòng ra từ socket kết thúc vòng lặp while quay lại và chờ cho kết nối của client khác 2.8 Lập trình socket với UDP Lớp Application 97 (xem thêm slide Lập trình socket) Lớp Application 98 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 người gửi rõ ràng gắn địa chỉ IP và port của đích vào mỗi gói phải trích địa chỉ IP, port của người gửi từ gói đã nhận UDP: dữ liệu truyền có thể không theo thứ tự, hoặc bị mất mát góc nhìn ứng dụng UDP cung cấp việc truyền không tin cậy một nhóm các byte (“datagrams”) giữa client và server Lớp Application 99 Giao tiếp socket Client/server: UDP close clientSocket Server (chạy trên hostid) read reply from clientSocket create socket, clientSocket = DatagramSocket() Client Create, address (hostid, port=x, send datagram request using clientSocket create socket, port=x, for incoming request: serverSocket = DatagramSocket() read request from serverSocket write reply to serverSocket specifying client host address, port number Lớp Application 100 Ví dụ: Java client (UDP) 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 i n F r o m U s e r keyboard monitor Process clientSocket UDP packet input stream UDP packet UDP socket Output: gửi gói (còn gọi là TCP gửi “dòng byte”) Input: nhận gói (còn gọi là TCP nhận “dòng byte”) Client process client UDP socket Lớp Application 101 Ví dụ: Java client (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 input stream tạo client socket dịch hostname thành địa chỉ IP dùng DNS Lớp Application 102 Ví dụ: Java client (UDP). 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 datagram với dữ liệu để gửi, độ dài, địa chỉ IP, port gửi datagram đến server đọc datagram từ server Lớp Application 103 Ví dụ: Java server (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 datagram socket tại port 9876 Tạo không gian để nhận datagram nhận datagram Lớp Application 104 Ví dụ: Java server (UDP) 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 port #, của người gửi viết datagram vào socket kết thúc vòng lặp while, quay lại và chờ datagram khác tạo datagram để gửi tới client 2.9 Xây dựng một Web server Lớp Application 105 Lớp Application 106 Xây dựng 1 Web server đơn giản quản lý 1 yêu cầu HTTP chấp nhận yêu cầu phân tích cú pháp header lấy file được yêu cầu từ hệ thống file của server tạo thông điệp đáp ứng HTTP: các dòng header + file gửi đáp ứng đến client sau khi tạo server, bạn có thể yêu cầu file dùng trình duyệt (ví dụ: IE) xem giáo trình để biết thêm chi tiết Lớp Application 107 Chương 2: Tổng kết Các kiến trúc ứng dụng client-server P2P lai các yêu cầu dịch vụ: tin cậy, bandwidth, trễ mô hình dịch vụ Internet transport connection-oriented, tin cậy: TCP không tin cậy, datagrams: UDP Tổng quan một số vấn đề về ứng dụng mạng! các giao thức đặc biệt: HTTP FTP SMTP, POP, IMAP DNS lập trình socket Lớp Application 108 Chương 2: Tổng kết trao đổi thông điệp yêu cầu/trả lời điển hình: client yêu cầu thông tin hoặc dịch vụ service server đáp ứng với dữ liệu, mã trạng thái các dạng thông điệp: headers: các trường cho biết thông tin về dữ liệu dữ liệu: thông tin để truyền thông Phần quan trọng: nghiên cứu về các giao thức điều khiển với các thông điệp dữ liệu in-band, out-of-band tập trung và không tập trung không trạng thái và có trạng thái truyền thông điệp tin cậy và không tin cậy “sự phức tạp của các vấn đề liên quan đến mạng”
File đính kèm:
- bai_giang_mang_may_tinh_chuong_2_lop_application.pdf