Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn
Our goals:
conceptual,
implementation
aspects of network
application protocols
transport-layer
learn about protocols
by examining popular
application-level
protocols
HTTP
FTP
2: Application Layer 4
service models
client-server
paradigm
peer-to-peer
paradigm
SMTP / POP3 / IMAP
DNS
programming network
applications
socket API
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Mạng máy tính nâng cao - Chapter 2: Application Layer - Lê Ngọc Sơn
d có thể được biểu diễn qua chuỗi n bits. Đòi hỏi mỗi trị key là một số nguyên thuộc cùng vùng [0,2n-1] Để thu được trị key nguyên như đòi hỏi trên, sử dụng hàm băm h, h nhận trị key gốc và trả về trị nguyên trong vùng [0,2n-1] eg, key = h(“Led Zeppelin IV”) Đây là lý do tại sao ta gọi nó là DHT (distributed “hash” table) Lưu cặp (key, value) ở peer nào? Vấn đề: Lưu trữ cặp (key, value) ở peer nào? Quy tắc: Lưu tại peer có id=key. Nếu không có peer như vậy thì lưu tại peer có id gần nhất. Quy ước trong bài giảng: id gần nhất là id nằm liền sau trong danh sách các id. VD: n=4; peers: 1,3,4,5,8,10,12,14; key = 13, thì peer liền sau là 14 key = 15, thì peer liền sau là 1 13 4 12 15 Circular DHT (1) 5 8 10 Mỗi peer chỉ biết peer liền trước và liền sau. “Overlay network” Circle DHT (2) 0001 0011 1111 Ai chịu trách nhiệm cho key 1110 ? Là tôi O(N) messages on avg to resolve query, when there are N peers 0100 0101 1000 1010 1100 1110 1110 1110 1110 1110 1110 Define closest as closest successor Circular DHT with Shortcuts 1 3 4 5 12 15 Ai chịu trách nhiệm cho key 14 (1110) ? (1111) (0011) Mỗi peer quản lý địa chỉ IP của peer liền trước, peer liền sau và các short cuts. Giảm từ 6 còn 2 messages. Có thể thiết kế shortcuts sao cho số láng giềng và số message khi truy vấn đều bằng O(log N) 8 10 (1000) Peer Churn 1 3 4 5 12 15 Để xử lý trình trạng các peer đến và đi mà không báo trước (peer churn), mỗi peer cần phải biết các địa chỉ IP của 2 peer liền sau của nó. Mỗi peer sẽ ping định kỳ 2 peer liền sau của nó để xác định là chúng còn hiện hữu hay đã rút lui. Peer 5 đột ngột rời khỏi vòng. Peer 4 phát hiện ra điều này; nhận peer 8 làm peer liền sau (thứ nhất); và hỏi peer 8 “peer liền sau của 8?”; sau đó xem peer liền sau của 8 là peer kế liền sau (thứ hai)của nó. Nếu peer 13 muốn gia nhập vòng thì sao? 8 10 P2P Case study: Skype Bản chất P2P: các cặp user có thể truyền thông trực tiếp. Giao thức tầng ứng dụng sở hữu của Skype. Skype clients (SC) Supernode (SN) Skype login server 2: Application Layer 93 Tổ chức phân cấp, sử dụng các Supernode Ánh xạ giữa username và địa chỉ IP, được lưu phân bố giữa các Supernode. Peers as relays Vấn đề gặp phải khi cả 2 peer (VD Alice và Bob) đều nằm đằng sau “NAT” NAT ngăn chặn các peer từ bên ngoài khởi tạo các kết nối (hay cuộc gọi) đến các peer bên trong Giải pháp: 2: Application Layer 94 Sử dụng các supernode của Alice và Bob, 1 supernode được chọn ra làm relay node (nút chuyển tiếp) Từng peer sẽ khởi tạo kết nối với nút chuyển tiếp. Do đó các peer có thể truyền thông cho nhau vượt qua NAT nhờ nút chuyển tiếp. Chapter 2: Application layer 2.1 Principles of network applications 2.2 Web and HTTP 2.3 FTP 2.4 Electronic Mail 2.6 P2P applications 2.7 Socket programming with UDP 2.8 Socket programming with TCP 2: Application Layer 95 SMTP, POP3, IMAP 2.5 DNS Socket programming Socket API Được giới thiệu trong BSD4.1 UNIX, 1981 A application-created, OS-controlled interface socket Mục tiêu: học cách xây dựng ứng dụng client/server truyền thông với nhau sử dụng sockets 2: Application Layer 96 Được các ứng dụng tạo ra, sử dụng và giải phóng một cách tường minh. client/server paradigm Có 2 loại dịch vụ vận chuyển thông qua socket API UDP TCP (a “door”) into which application process can both send and receive messages to/from another application process Socket programming basics Server phải đang chạy trước khi client có thể gửi dữ liệu cho nó. Socket có thể xác định trong nội bộ nhờ số hiệu cổng (port number) Tương tự như số hiệu Server phải có 1 socket (cửa) mà nhờ đó nó có thể nhận/ gửi đi các segment Tương tự, client cũng cần có 1 socket căn hộ trong 1 tòa nhà Client cần phải biết địa chỉ IP của Server và số hiệu cổng của socket. 2: Application Layer 97 Socket programming with UDP UDP: không có “kết nối” giữa client và server Không bắt tay Bên gửi gắn địa chỉ IP và số hiệu cổng lên từng segment Server có thể trích xuất địa Quan điểm ứng dụng UDP cung cấp dịch vụ vận chuyển datagram “không đ m b o tin 2: Application Layer 98 chỉ IP và số hiểu cổng của bên gửi từ segment nhận được. ả ả cậy” giữa client and server Lưu ý: Thuật ngữ chính thức gọi gói tin UDP là “datagram”. Trong lớp này chúng ta sẽ gọi là “UDP segment” Running example Client: Người sử dụng gõ vào một dòng văn bản Chương trình client gửi dòng này đến server Server: Server nhận được dòng văn bản Server chuyển thành chữ hoa tất cả các ký tự Gửi dòng văn bản đã được sửa đổi đến client Client: Nhận dòng văn bản Hiển thị 2: Application Layer 99 Client/server socket interaction: UDP Server (running on hostid) create socket, clientSocket = DatagramSocket() Client Tạo datagram với server IP và create socket, port= x. serverSocket = DatagramSocket() 2: Application Layer 100 Đóng clientSocket Đọc datagram từ clientSocket port=x; gửi datagram thông qua clientSocketĐọc datagram từ serverSocket Soạn trả lời cho client (với địa chỉ IP client và số hiệu cổng), gửi thông qua serverSocket Example: Java client (UDP) i n F r o m U s e r keyboard monitor Process input stream sends Input: receives packet (recall thatTCP received Client process 2: Application Layer 101 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 clientSocket UDP packet UDP packet UDP socket Output: packet (recall that TCP sent “byte stream”) “byte stream”) client UDP socket Example: Java client (UDP) import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = Create input stream 2: Application Layer 102 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(); Create client socket Translate hostname to IP address using DNS Example: Java client (UDP), cont. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); Create datagram with data-to-send, length, IP addr, port Send datagram to server 2: Application Layer 103 clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } Read datagram from server Example: Java server (UDP) import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); Create datagram socket at port 9876 2: Application Layer 104 byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Create space for received datagram Receive datagram Example: Java server (UDP), cont String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); Get IP addr port #, of sender 2: Application Layer 105 sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } } } Write out datagram to socket End of while loop, loop back and wait for another datagram Create datagram to send to client UDP observations & questions Cả client và server đều dùng DatagramSocket Địa chỉ IP bên nhận và số hiệu cổng được gắn tường minh vào segment. Điều gì sẽ xảy ra nếu thay đổi cả hai clientSocket , serverSocket thành “mySocket”? Liệu client có thể gửi 1 segment đến 1 server mà không biết đến địa chỉ IP của server và/hoặc port number? Có thể nào nhiều client sử dụng server này? 2: Application Layer 106 Chapter 2: Application layer 2.1 Principles of network applications 2.2 Web and HTTP 2.3 FTP 2.4 Electronic Mail 2.6 P2P applications 2.7 Socket programming with UDP 2.8 Socket programming with TCP 2: Application Layer 107 SMTP, POP3, IMAP 2.5 DNS Socket-programming using TCP TCP service: reliable transfer of bytes from one process to another 2: Application Layer 108 process TCP with buffers, variables socket controlled by application developer controlled by operating system host or server process TCP with buffers, variables socket controlled by application developer controlled by operating system host or server internet Socket programming with TCP Client phải liên lạc với server Trước tiên, tiến trình server phải đang chạy. Server phải có socket được tạo sẵn, chờ đón các liên lạc từ phía client. Khi được client liên lạc, server TCP tạo mới một socket để server process liên lạc với client Cho phép server trao đổi với nhiều client source port numbers được 2: Application Layer 109 Client liên lạc với server bằng cách: Tạo client-local TCP socket Chỉ định địa chỉ IP, port number của server process Khi client tạo socket: client TCP thiết lập kết nới đến server TCP dùng để phân biệt client (nói rõ trong Ch. 3) TCP provides reliable, in-order transfer of bytes (“pipe”) between client and server Quan điểm ứng dụng Client/server socket interaction: TCP wait for incoming create socket, port=x, for incoming request: welcomeSocket = ServerSocket() create socket, connect to hostid, port=x Server (running on hostid) Client TCP connection setup 2: Application Layer 110 connection request connectionSocket = welcomeSocket.accept() clientSocket = Socket() close connectionSocket read reply from clientSocket close clientSocket send request using clientSocketread request from connectionSocket write reply to connectionSocket in F r o m U s e r keyboard monitor Process input stream Client process Stream jargon Stream là dãy các ký tự đi vào hoặc ra khỏi một process Một input stream đươc liên kết với một vài nguồn nhập liệu dành cho process, VD 2: Application Layer 111 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 clientSocket input stream output stream TCP socket client TCP socket bàn phím hoặc socket. Một output stream được liên kết với một đầu ra, VD màn hình hoặc socket. Socket programming with TCP VD về ứ/dụng client-server: 1) Client đọc dòng từ standard input (inFromUser stream), gửi đến server thông qua socket (outToServer stream) 2) Server đọc dòng từ socket 2: Application Layer 112 3) Server chuyển đổi ký tự trong dòng thành chữ hoa, gửi ngược lại client. 4) Client đọc, in ra dòng bị sửa đổi từ socket (inFromServer stream) Example: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; 2: Application Layer 113 String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Create input stream Create client socket, connect to server Create output stream attached to socket Example: Java client (TCP), cont. BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); Create input stream attached to socket Send line 2: Application Layer 114 outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } to server Read line from server Example: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; Create 2: Application Layer 115 ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); welcoming socket at port 6789 Wait, on welcoming socket for contact by client Create input stream, attached to socket Example: Java server (TCP), cont DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); Read in linefrom socket Create output stream, attached to socket 2: Application Layer 116 capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } } Write out line to socket End of while loop, loop back and wait for another client connection TCP observations & questions Server có 2 kiểu socket: ServerSocket và Socket Khi client gõ vào cửa “serverSocket”, server tạo ra connectionSocket và hoàn tất TCP conx. Địa chỉ IP đích và số hiệu cổng không được gắn vào segment tường minh. Liệu nhiều clients có thể sử dụng server?. 2: Application Layer 117 Chapter 2: Summary application architectures client-server P2P hybrid application service our study of network apps now complete! specific protocols: HTTP FTP SMTP, POP, IMAP DNS 2: Application Layer 118 requirements: reliability, bandwidth, delay Internet transport service model connection-oriented, reliable: TCP unreliable, datagrams: UDP P2P: BitTorrent, Skype socket programming Chapter 2: Summary typical request/reply message exchange: client requests info or service Most importantly: learned about protocols Important themes: control vs. data msgs in-band, out-of-band 2: Application Layer 119 server responds with data, status code message formats: headers: fields giving info about data data: info being communicated centralized vs. decentralized stateless vs. stateful reliable vs. unreliable msg transfer “complexity at network edge”
File đính kèm:
- bai_giang_mang_may_tinh_nang_cao_chapter_2_application_layer.pdf