1. Basic Concepts, Protocols and Termiology

 Learning Objectives

After reading this chapter, you should:

+ have a high level appreciation of the basic means by which messages are sent and received on modern networks

+ be familiar with the most important protocols used on networks

+ understand the addressing mechanism used on the Internet.( Hiểu cơ chế đánh địa chỉ trên Internet).

+ understand the basic principles of client/server programming.

The fundamental purpose of this opening chapter is to introduce the underpinning network principles and associated terminology with which the reader will need to be familiar in order to make sense of the later chapters of this book. (Mục đích cơ bản của chương mở đầu này là giới thiệu các nguyên tắc cơ bản về mạng và các thuật ngữ liên quan mà người đọc sẽ cần phải làm quen để hiểu các chương sau của cuốn sách này). The material covered here is entirely generic (as fas as any programming language is concerned) and it is not until the next chapter that we shall begin to consider how Java may be used in network programming (Các tài liệu được đề cập ở đây hoàn toàn chung chung (như bất kỳ ngôn ngữ lập trình nào có liên quan) và phải đến chương tiếp theo, chúng ta mới bắt đầu xem xét cách Java có thể được sử dụng trong lập trình mạng). If the meaning of any term covered here is not clear when that term is later encountered in context, the reader should refer back to this chapter to refresh his/her memory (Nếu ý nghĩa của bất kỳ thuật ngữ nào được đề cập ở đây không rõ ràng khi thuật ngữ đó sau này được gặp trong ngữ cảnh, người đọc nên xem lại chương này để làm mới trí nhớ của mình.)

It would be very easy to make this chapter considerably larger than it currently is, simply by including a great deal of try, technical material that would be unlikely to intentionally brief, the author having avoided the inclusion of material that is not of relevance to the use of Java for network programming. The reader who already has a sound grasp of network concepts may safely skip this chapter entirely. (Sẽ rất dễ dàng để làm cho chương này lớn hơn đáng kể so với hiện tại, chỉ đơn giản bằng cách đưa vào rất nhiều tài liệu kỹ thuật có thể cố ý ngắn gọn, tác giả đã tránh đưa vào tài liệu không liên quan đến sử dụng Java để lập trình mạng. Người đọc đã nắm rõ các khái niệm mạng có thể bỏ qua chương này một cách an toàn). 


1.1. Clients, Servers and Peers

The most common categories of network software nowadays are clients and servers. These two categories have a symbiotic relationship and the term client/server programming has become very widely used in recent years. It is important to distinguish firstly between a server and the machine upon which the server is running (called the host machine), since I.T workers often refer loosely to the host machine as 'the server'. (Các loại phần mềm mạng phổ biến nhất hiện nay là máy chủ và máy khách. Hai phạm trù này có mối quan hệ cộng sinh và thuật ngữ lập trình máy khách / máy chủ đã được sử dụng rất rộng rãi trong những năm gần đây. Điều quan trọng trước tiên là phân biệt giữa máy chủ và máy mà máy chủ đang chạy (được gọi là máy chủ)). Vì công nhân I.T thường gọi máy chủ một cách lỏng lẻo là 'máy chủ '). Though this common usage has no detrimental pratical effects for the majority of I.T tasks, those I.T. personnel who are unaware of the distintion and subsequently undertake network programming are likely to be caused a significant amount of conceptual confusion until this distinction is made known to them.( Mặc dù cách sử dụng phổ biến này không có tác dụng thực tế bất lợi đối với phần lớn các tác vụ I.T, những I.T những nhân viên không biết về quá trình chưng cất và sau đó thực hiện việc lập trình mạng có thể gây ra một số lượng đáng kể nhầm lẫn về khái niệm cho đến khi họ biết rõ sự phân biệt này.

A server, as the the name implies, provides a service of some kind. This service is provided for clients that connect to the server's host machine specifically for the purpose of accessing the service. Thus, it is the clients that initiate a dialogue with the server. (These clients, of course, are also programs and are not human clients!) (Một máy chủ, như tên của nó, cung cấp một dịch vụ. Dịch vụ này được cung cấp cho các máy khách kết nối với máy chủ của máy chủ đặc biệt cho mục đích truy cập dịch vụ. Do đó, chính các máy khách bắt đầu một cuộc đối thoại với máy chủ (Tất nhiên, những khách hàng này cũng là chương trình và không phải là khách hàng của con người!)) 

Common services provided by such servers include the 'serving up' of Web pages (by Web servers) and the downloading of files from servers'host machines via the File Transfer Protocol (FTP servers).  (Các dịch vụ phổ biến do các máy chủ đó cung cấp bao gồm 'phục vụ' các trang Web (bởi các máy chủ Web) và tải xuống các tệp từ các máy chủ của máy chủ thông qua Giao thức truyền Tệp (máy chủ FTP)). For the former service, the corresponding client programs would be Web browsers (such as Netscape Communicator or Microsoft Explorer). Though a client and its corresponding server will normally run on different machines is a real-world application, its is often very convenient (as will be seen in subsequent chapters) for server and clients to be run on the same machine, since this provides a very convenient 'sandbox' within which such application may be tested before being released( or, more likely, before final testing on separate machines). Đối với dịch vụ cũ, các chương trình khách tương ứng sẽ là các trình duyệt Web (chẳng hạn như Netscape Communicator hoặc Microsoft Explorer). Mặc dù một máy khách và máy chủ tương ứng của nó thường sẽ chạy trên các máy khác nhau là môt ứng dụng trong thế giới thực, nó thường rất thuận tiện (như sẽ thấy trong các chương tiếp theo cho máy chủ và máy khách chạy trên cùng một máy, vì điều này cung cấp 'hộp cát' rất thuận tiện trong đó ứng dụng đó có thể được kiểm tra trước khi được phát hành (hoặc nhiều khả năng là trước khi kiểm tra lần cuối trên các máy riêng biệt)).This avoids the need for multiple machines and multiple testing personel.(Điều này tránh sự cần thiết của nhiều máy và nhiều nhân viên kiểm tra).

In some applications, such as messaging services, it is possible for programs on users's machines to communicate directly with each other in what is called peer-to-peer (or P2P) mode. However, for many applications, this is either not possible or prohibilitively costtly in terms of the number of simultaneous connections required.(Trong một số ứng dụng, chẳng hạn như dịch vụ nhắn tin, các chương trình trên máy của người dùng có thể giao tiếp với nhau ở chế độ được gọi là chế độ ngang hàng (hoặc p2p). Tuy nhiên, đối với nhiều ứng dụng, điều này là không thể thực hiện được hoặc tốn kém về số lượng kết nối đồng thời được yêu cầu). For example, the World Wide Web simply does not allow clients to communicate directly with each other. However, some applications use a server as an intermediary, in order to provide 'simulated' peer-to-peer facilities. Alternatively, both ends of the dialogue may act as both client and server. Peer-to-peer systems are beyond the intended scope of this text, though, and no further mention will be made of them.(Ví dụ, World Wide Web chỉ đơn giản là không cho phép các máy khách giao tiếp trực tiếp với nhau. Tuy nhiên, một số ứng dụng sử dụng máy chỉ làm trung gian, nhằm cung cấp các tiện ích ngang hàng 'mô phỏng'. Ngoài ra, cả hai đầu cuộc đối thoại có thể hoạt động như cả máy khách và máy chủ. Tuy nhiên, các hệ thống ngang hàng nằm ngoài phạm vi dự kiến của văn bản này và sẽ không được đề cập thêm về chúng.)

1.2. Ports and Sockets

These entities lie at the heart of network communications.For anybody not already familiar with the use of these terms in a network programming context, the two words very probably conjure up images of hardware components. However, although they are closely associated with the hardware communication links between computers within a network, ports and sockets are not themselve hardware elements, but abstract concepts that allow the programmer to make use of those communication links.( Đối với bất kì ai chưa quen với việc sử dụng các thuật ngữ này trong bối cảnh lập trình mạng, hai từ này rất có thể gợi lên hình ảnh của các thành phần phần cứng. Tuy nhiên, mặc dù chúng liên kết chặt chẻ với các liên kết giao tiếp phần cứng giữa các máy tính trong một mạng, các cổng và ổ cắm không phải là những thành phần của phần cứng, nhưng cách sử dụng nhũng khái niệm trừu tượng cho phép lập trình viên sử dụng các liên kết giao tiếp đó.)

A port is a logical connection to a computer (as opposed to a physical connection) and is identified by a number in the range 1-65535. This number has no correspondence with the number of physical connections to the number, of which there may be only one (even though the number of ports used on that machine may be much greater than this). Ports are implemented upon all computers attached to a network, but it is only those machines that have server programs running on them for which the network programmer will refer explicitly to port numbers. Each port may be dedicated to a particular server/service (though the number of available ports will normally greatly exceed the number that is actually used). Port number in the 1-1023 are normally set aside for the use of specified standard servieces, often referred to as 'well-known' services. For example, port 80 is normally used by Web servers. Some of the more common well-known services are listed in Section 1.4. Application programs wishing to use ports for non-standard services should avoid using port numbers 1-1023. (A range of 1024-65535 should be more than enough for even the most prolific of network programmers!) (Cổng là kết nối logic với máy tính (trái ngược với kết nối vật lý)) và được xác định bằng một số trong phạm vi 1-65535. Con số này không tương ứng với số lượng kết nối vật lý với số lượng, trong đó có thể chỉ có một (mặc dù số lượng cổng được sử dụng trên máy đó có thể lớn hơn nhiều). Các cổng được thực hiện trên tất cả các máy tính được gắn vào mạng, nhưng chỉ những máy có chương trình máy chủ đang chạy trên chúng mà người lập trình mạng sẽ chỉ rõ ràng đến số cổng. Mỗi cổng có thể dành riêng cho một máy chủ/ dich vụ cụ thể (mặc dù số lượng cổng khả dụng thường sẽ vượt quá số lượng thực sự được sử dụng). Số cổng trong 1-1023 thường được dành riêng cho việc sử dụng các mũi khoan tiêu chuẩn cụ thể, thường được gọi là các dịch vụ 'nổi tiếng'. Ví dụ, cổng 80 thường được sử dụng bởi các máy chủ Web. Một số dịch vụ nổi tiếng phổ biến hơn được liệt kê trong phần 1.4. Các chương trình ứng dụng muốn sử dụng cổng cho các dịch vụ phi tiêu chuẩn nên tránh sử dụng số cổng 1-1023. (Phạm vi 1024-65535 là quá đủ cho ngay cả những lập trình viên mạng sung mãn nhất !)

For each port supplying a service, there is a server program waiting for any requests. All such programs run together in parallel on the host machine. When a client attempts to make connection with a particular server program, it supplies the port number of the associated service. The host machine examines the port number and passes the client's transmission to the appropriate server program for processing. (Đối với mỗi cổng cung cấp dịch vụ, có một chương trình máy chủ đang chờ bất kỳ yêu cầu nào. Tất cả các chưng trình này cùng chạy song song trên máy chủ. Khi một máy khách cố gắng tạo kết nối với một chương trình máy chủ cụ thể, nó sẽ cung cấp số cổng của dịch vụ liên quan. Máy chủ kiểm tra số cổng và chuyển đường truyền của máy khách đến chương trình máy chủ thích hợp để xử lý). 

In most application, of course , there are likely to be multiple clients wanting the same service at the same time. A common example of this requirement is that of multiple browsers (quite possibly thousands of them) wanting Web pages from the same server. The server, of course, needs some way of distingguishing between clients and keeping their dialogues separate from each other. This is achieved via the use of sockets. As stated earlier, a socket is an abstract concept and not an element of computer hardware. It is used to indicate one of the two end-points of a communication link between two processes. When a client wishes to make connection to a server, it will create a socket at its end of the communication link. Upon receiving the client's initial request (on a particular port number), the server will create a new socket at its end that will be dedicated to communication with that particular client. Just as one hardware link to a server may be associated with many ports, so too may one port be associated with many sockets. More will be said about sockets in Chapter 2. (Tuy nhiên, trong hầu hết các ứng dụng, có thể có nhiều khách hàng muốn cùng một dịch vụ cùng một lúc. Một ví dụ phổ biến của yêu cầu này là nhiều trình duyệt (có thể là hàng nghìn trình duyệt) muốn các trang Web từ cùng một máy chủ. Máy chủ, tất nhiên, cần một số cách phân biệt giữa các máy khách và giữ cho các cuộc đối thoạt của họ tách biệt với nhau. Điều này được thông qua việc sử dụng các ổ cắm. Như đã nói trước đó, socket là một khái niệm trừu tượng và không phải là một phần tử của phần cứng máy tính. Nó được sử dụng để chỉ một trong hai điểm cuối của một liên kết giao tiếp giữa hai quá trình. Khi một máy khách muốn tạo kết nối với máy chủ, nó sẽ tạo một ổ căm ở cuối liên kết giao tiếp. Khi nhận được yêu cầu ban đầu của khách hành (trên một số cổng cụ thể), máy mới ở cuối của nó sẽ dành riêng cho giao tiếp với máy khách cụ thể đó. Cũng giống như một liên kết phần cứng tới một máy chủ có thể được liên kết với nhiều cổng, thì một cổng cũng có thể được liên kết với nhiều ổ cắm. Sẽ nói thêm về các ổ cắm trong chương 2.

1.3 The Internet and IP Addresses

An internet (lower-case 'i') is a collection of computer networks that allows any computer on any of the associated networks to communicate with any other computer located on any of the other associated networks (or on the same network, of course). The protocol used for such communication is called the Internet Protocol (IP). The Internet (upper-case 'I') is the world's largest IP-based network. Each computer on the Internet has a unique IP address, the current version of which is IPv4 (Internet Protocol version 4). This represents machine addresses in what is called quad notation. This is made up of four eight-bit numbers (i.e, numbers in the decimal in range 0-255), separated by dots. For example. 131.122.3.219 would be one such address. Due to a growing shortage of IPv4 addresses, IPv4 is due to be replaced with IPv6, the draft standard for which was published on the 10th of August, 1998. IPv6 uses 128-bit addresses, which provide massively more addresses. Many common Internet applications already work with IPv6 and it is expected that IPv6 will gradually IPv4, with the two coexisting for a number of years during a transition period. (internet (viết thường 'i') là một tập hợp các mạng máy tính cho phép bất kỳ máy tính nào trên bất kỳ mạng liên kết nào giao tiếp với bất kỳ máy tính nào khác nằm trên bất kì mạng liên kết nào khác (tất nhiên, trên cùng một mạng). Giao thức được sử dụng để liên lạc như vậy được gọi là giao thức Internet (IP). Internet( chữ 'I' viết hoa) là mạng dựa trên IP lớn nhất thế giới. Mỗi máy tính trên Internet có một địa chỉ IP duy nhất, phiên bản hiện tại của nó là IPv4 (Giao thức Internet phiên bản 4). Điều này đại diện cho địa chỉ máy trong cái được gọi là ký hiệu quad. Số này được tạo thành từ bốn số tám bít (tức là các số ở phần thập phân trong phạm vi 0-255), được phân tách bằng dấu chấm. Ví dụ: 131.122.3.213 sẽ là một trong những địa chỉ như vậy. Do sự thiếu hụt ngày càng tăng của địa chỉ IPv4, IPv4 sẽ được thay thế bằng IPv6, tiêu chuẩn dự thảo được xuất bản vào ngày 10 tháng 8 năm 1998. IPv6 sử dụng địa chỉ 128-bit. cung cấp nhiều địa chỉ hơn. Nhiều ứng dụng Internet phổ biến đã hoạt động với IPv6 và dự kiến IPv6 sẽ dần trở thành IPv4, hai ứng dụng này cùng tồn tại trong một số năm trong giai đoạn chuyển tiếp.)

Recent years have witnessed an explosion in the growth and use of the Internet. As a result, there has arisen a need for a programming language with features designed specifically for network programming. Java provides these features and does so in a platform-independent manner, which is vital for a heterogeneous network such as the Internet. Java is sometimes referred to as 'the language of the Internet' and it is the use of Java in this context that has had a major influence on the popularisation of the language. For many programmers, the need to program for the Internet is one of the main reasons, if not the reason, for learning to program in Java. (Những năm gần đây đã chứng kiến sự bùng nổ về tốc độ phát triển và sử dụng Internet. Do đó, đã nảy sinh nhu cầu về một ngôn ngữ lập trình với các tính năng được thiết kế đặc biệt cho lập trình mạng. Java cung cấp các tính năng này và làm như vậy theo cách độc lập với nền tảng, điều này rất quan trọng đối với một mạng không đồng nhất như Internet. Java đôi khi được coi là 'ngôn ngữ của Internet' và việc sử dụng Java trong bối cảnh này đã có ảnh hưởng lớn đến sự phổ biến của ngôn ngữ này. Đối với nhiều lập trình viên, nhu cầu lập trình trình cho Internet là một trong những lý do chính, nếu không muốn nói là lý do, để học lập trình bằng Java).

1.4 Internet Services, URLs and DNS

Whatever the service provided by a server, there must be some established protocol governing the communication that takes place between server and client. Each end of the dialogue must know what may/must be sent to the other, the format in which it should be sent, the sequence in which it must be sent (if sequence matters) and, for 'open-ended' dialogues, how the dialogue is to be terminated. For the standard services, such protocols are made available in public documents, usually by either the Internet Engineering Task Force (IETF) or the World Wide Web Consortium (W3C). Some of the more common services and their associated ports are shown in Figure 1.1. For a more esoretic or 'bespoke' service, the application writer must establish a protocol and convey it to the inteded users of that service. (Bất kể dịch vụ được cung cấp bởi máy chủ là gì, phải có một số giao thức được thiết lập để điều chỉnh giao tiếp diễn ra giữa máy chủ và máy khách. Mỗi kết thúc của cuộc đối thoại phải biết những gì có thể / phải được gửi cho người kia, định dạng mà nó sẽ được gửi, trình tự mà nó phải được gửi (nếu trình tự quan trọng ) và, đối với các cuộc đối thoại 'kết thúc mở', cách cuộc đối thoại sẽ được chấm dứt. Đối với các dịch vụ tiêu chuẩn, các giao thức như vậy được cung cấp trong các tài liệu công khai, thường là của lực lượng đặc nhiệm Kỹ thuật Internet (IETF) hoặc World Wide Web Consortium (W3C). Một số dịch vụ phổ biến hơn và các cổng kết hợp của chúng được thể hiện trong hình 1.1. Đối với một dịch vụ bí ẩn hơn hoặc 'đặt trước', người viết ứng dụng phải thiết lập một giao thức và truyền tải nó đến những người dùng có mục đích của dịch vụ đó).





A URL (Uniform Resource Locator) is a unique identifier for any resource located on the Internet. It has the following structure (in which BNF notation is used):

<protocol>://<hostname>[:<port>][/<pathname>][/<filename>[#<section>]]

For example:

http://java.sun.com/j2se/1.5.0/download.jsp

For a well-known protocol, the port number may be omitted and the default port number will be assumed. Thus, since the example above specifies the HTTP protocol (the protocol of the Web) and does not specify on which port of the host machine the service is available, it will be assumed that the service is running on port 80 (the default port for Web servers). If the file name is omitted, then the server sends a default file from the directory specified in the path name. (This default file will commonly be called index.html or default.html). The 'section' part of the URL (not often specified) indicates a name 'anchor' in an HTML document. For example, the HTML anchor in the tag. (Đối với một giao thức nổi tiếng, số cổng có thể bị bỏ qua và số cổng mặc định sẽ được giả định. Do đó, vì ví dụ trên chỉ định giao thức HTTP (giao thức của Web) và không chỉ định dịch vụ khả dụng trên cổng nào của máy chủ, nên sẽ được giả định rằng dịch vụ đang chạy trên cổng 80 (cổng mặc định cho máy chủ của Web). Nếu tên tệp bị bỏ qua, thì máy chủ sẽ gửi tệp mặc định từ thư mục được chỉ định trong tên đường dẫn. (Tệp mặc định này thường được gọi là index.html hoặc default.html). Phần (không thường được chỉ định) chỉ ra một tên 'anchor' trong tài liệu HTML. Ví dụ ký tự liên kết HTML trong thẻ).

<A NAME="thisPlace"></A>

would be referred to as thisPlace by the section component of the URL

Since human beings are generally much better at remembering meaningful strings of characters than they are at remembering long strings of numbers, the Domain Name System was developed. A domain name, also known as a host name, is the user-friendly equivalent of an IP address. In the previous example of a URL, the domain name was java.sun.com. The individual parts of a domain name don't correspond to the individual parts of an IP adress. In fact, domain names don't always have four parts (as IPv4 addresses must have). (sẽ được gọi là thisPlace bởi thành phần của URL.

Vì con người thường ghi nhớ các chuỗi ký tự có ý nghĩa tốt hơn nhiều so với việc ghi nhớ các chuỗi số dài, nên hệ thống tên miền đã được phát triển. Tên miền, còn được gọi là tên máy, tương đương với địa chỉ IP thân thiện với người dùng. Trong ví dụ trước về URL, tên miền là java.sun.com. Các phần riêng lẻ của tên miền không tương ứng với các phần riêng lẻ của địa chỉ IP. Trên thực tế, tên miền không phải lúc nào cũng có bốn phần (như địa chỉ IPv4 phải có).)


Nhận xét