Similar presentations:
Сетевые средства Java
1. Сетевые средства Java
2. Семиуровневая сетевая модель OSI
3.
4. Уровень 1, физический
Физический уровень получает пакеты данных отвышележащего канального уровня и
преобразует их в оптические или электрические
сигналы, соответствующие 0 и 1 бинарного
потока. Эти сигналы посылаются через среду
передачи на приемный узел.
IEEE 802.3 -- Ethernet
IEEE 802.5 -- Token ring
5. Уровень 2, канальный
Канальный уровень обеспечивает создание,передачу и прием кадров данных.
Этот уровень обслуживает запросы сетевого
уровня и использует сервис физического
уровня для приема и передачи пакетов.
6. Стандарты канального уровня
EthernetToken ring
FDDI
X.25
Frame relay
7.
В сети ETHERNET циркулируют сетевые кадрыпеременного размера:
8. Что такое FDDI
Это стандарт передачи данных нарасстояния до 200 км.
Среда – оптоволокно.
Топология – двойное кольцо (похоже на
TokenRing). Данные по кольцам
циркулируют в разных направлениях.
Одно кольцо основное, другое запасное.
9. Что такое X.25
Протокол для построения глобальных сетейна основе телефонных линий
Протокол содержит очень развитые средства
коррекции ошибок.
10. Что такое Frame Relay
Это дальнейшее развитие идей X.25, норассчитанное на качественные линии связи.
Поэтому FR не содержит таких мощных средств
коррекции ошибок (как X.25)
Отличительной особенностью FR является
возможность организации виртуальных
каналов.
11. Уровень 3, сетевой
На сетевом уровне происходитмаршрутизация пакетов на основе
преобразования MAC-адресов в сетевые
адреса.
Сетевой уровень обеспечивает также
прозрачную передачу пакетов на
транспортный уровень.
12.
Источник: http://latysheva2007.narod.ru13. Протоколы сетевого уровня
IP - протокол InternetIPX - протокол межсетевого обмена
X.25 (частично реализован на уровне 2)
14. Уровень 4, транспортный
Транспортный уровень делит потокиинформации на достаточно малые
фрагменты (пакеты) для передачи их на
сетевой уровень.
Наиболее распространенные протоколы
транспортного уровня включают:
TCP - протокол управления передачей
NCP - Netware Core Protocol
SPX - упорядоченный обмен пакетами
15. Уровень 5, сеансовый
Сеансовый уровень отвечает заорганизацию сеансов обмена данными
между оконечными машинами.
16. Уровень 6, уровень представления
Уровень представления отвечает завозможность диалога между
приложениями на разных машинах. Этот
уровень обеспечивает преобразование
данных (кодирование, компрессия и т.п.)
прикладного уровня в поток информации
для транспортного уровня.
17. Уровень 7, прикладной
Прикладной уровень отвечает за доступприложений в сеть.
Задачами этого уровня является перенос
файлов, обмен почтовыми сообщениями
и управление сетью.
18. Протоколы 7-го уровня
FTP - протокол переноса файлов
TFTP - упрощенный протокол переноса файлов
X.400 - электронная почта
Telnet – удаленное выполнение команд
SMTP - простой протокол почтового обмена
CMIP - общий протокол управления информацией
SNMP - простой протокол управления сетью
NFS - сетевая файловая система
19.
Семиуровневая модель, пожалуй, излишне “тяжеловесна”.Вполне достаточно пятиуровневой модели:
20.
Основа сетевого взаимодействия – сервер,клиент и протокол.
Сервер – это процесс, предоставляющий
некоторые ресурсы.
Клиент – это процесс, запрашивающий
ресурсы.
Протокол – это правила общения клиента и
сервера.
21.
Сервер как правило находится в состоянииожидания соединения с клиентом.
На компьютере могут работать несколько
серверов.
Поскольку сетевой адрес у компьютера
один, то возникает организационная
проблема: как различать сервера?
Эта проблема решается введением понятия
“порт”.
22.
Порт – это целое число из диапазона[1,65535], которое “закрепляется” за тем
или иным сервером.
Ряд портов закреплены уже “навечно”. Это
порты с номерами 1-1023. Например, 80 –
это порт http-сервера, 25 – порт SMTPсервера и т.д.
23. Схема отправки данных
Программа (на прикладном уровне)передает данные транспортному
(четвертому) уровню.
На транспортном уровне к блоку данных
добавляются номера портов (отправителя
и получателя) длина сообщения и
контрольная сумма.
24.
Два распространенных протоколатранспортного уровня – TCP и UDP.
Протокол TCP оперирует т.н. пакетами, а UDP
– датаграммами.
25.
Датаграмма UDP невелика (~1K). Если нужнопередать большой объем данных, то
программа-отправитель должна эти
данные сегментировать перед передачей.
Программа-получатель должна объединить
отдельные датаграммы в блок данных.
При этом датаграммы могут дойти до
получателя разными маршрутами, а
некоторые могут потеряться.
26.
Нет гарантии, что все датаграммы дойдут дополучателя.
В целом, UDP напоминает передачу данных
по радио.
27.
ТСР-пакет тоже невелик (при передачебольших объемов требуется сегментация),
однако протокол более надежен.
ТСР сначала устанавливает двустороннее
(дуплексное) соединение сервера с
клиентом.
Прием каждого пакета подтверждается.
TCP-соединение напоминает телефонный
разговор.
28.
С транспортного уровня пакет “опускается”на сетевой уровень (третий).
На этом уровне к пакету добавляются IPадреса отправителя и получателя, и
превращается в IP-пакет, после чего он
передается “ниже” на канальный
уровень…
На приемной стороне действия
выполняются в обратном порядке
29.
С точки зрения реализации в среде Java (атакже C/С++) центральным объектом
сетевого обмена является сокет.
Сокет – это объект, который скрывает от
программиста низкоуровневые детали
сетевого обмена и делает обмен по сети
похожим на файловый поток.
30.
Далее мы рассмотрим программнуюреализацию нескольких тем:
- Отправка запроса на URL;
- TCP-обмен;
- UDP-обмен.
31. Отправка запроса на URL
32.
import java.net.*;import java.io.*;
class PostURL{
public static void main(String [] args) {
String req = "HomeLisp";
try {
URL url = new URL("http://homelisp.ru");
URLConnection uc = url.openConnection();
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setUseCaches(false);
uc.setRequestProperty("content-type","application/octet-stream");
uc.setRequestProperty("content-length",""+req.length());
uc.connect();
33.
DataOutputStream dos = new DataOutputStream(uc.getOutputStream());dos.writeBytes(req);
dos.close();
BufferedReader br = new BufferedReader( new
InputStreamReader(uc.getInputStream()));
String res=null;
while ((res=br.readLine()) != null)
System.out.println(res);
}
catch(MalformedURLException me){
System.err.println(me);
}
catch(UnknownHostException he){
System.err.println(he);
}
34.
catch(UnknownServiceException se){System.err.println(se);
}
catch(IOException ioe){
System.err.println(ioe);
}
}
}
35. Упражнение
Протранслируйте и запустите код.Обеспечьте прием имени сайта из
командной строки.
36. TCP-обмен
37.
Далее приводится исходный текст httpклиента, который запрашивает у серверафайл и выводит его содержание на
консоль.
38.
import java.net.*;import java.io.*;
import java.util.*;
class tcpClient{
public static void main (String [] args){
if (args.length != 3) {
System.err.println("Usage: tcpClient host port file");
System.exit(0);
}
String host = args[0];
int port = Integer.parseInt(args[1]);
String file = args[2];
try{
Socket sock = new Socket(host,port);
PrintWriter pw = new PrintWriter(new
OutputStreamWriter(sock.getOutputStream()),true);
39.
pw.println("POST "+file+" HTTP/1.1\n");BufferedReader br = new BufferedReader(new
InputStreamReader(sock.getInputStream()));
String line = null;
line = br.readLine();
StringTokenizer st = new StringTokenizer(line);
String code = null;
if ((st.countTokens() >= 2) && st.nextToken().equals("POST")){
if ((code = st.nextToken()) != "200"){
System.err.println("File not found. code="+code);
System.exit(0);
}
}
while ((line = br.readLine()) != null)
System.out.println(line);
40.
sock.close();}catch(Exception e){
System.err.println(e);
}
}
}
41.
Теперь рассмотрим текст приложениясервера (протокол http), который будетпредоставлять файлы клиентам.
42.
import java.net.*;import java.io.*;
import java.util.*;
class tcpServer{
public static void main(String [] args){
try{
ServerSocket ss = new ServerSocket(Integer.parseInt(args[0]));
while (true)
new HttpConnect(ss.accept());
}catch(ArrayIndexOutOfBoundsException ae){
System.err.println("Usage: tcpServer port");
System.exit(0);
}catch(IOException e){
System.out.println(e);
}
43.
}}
class HttpConnect extends Thread{
private Socket sock;
HttpConnect(Socket s) {
sock=s;
setPriority(NORM_PRIORITY-1);
start();
}
public void run() {
try{
PrintWriter pw = new PrintWriter(new
OutputStreamWriter(sock.getOutputStream()),true);
BufferedReader br = new BufferedReader(new
InputStreamReader(sock.getInputStream()));
44.
String req = br.readLine();System.out.println("Requset: "+req);
StringTokenizer st = new StringTokenizer(req);
if ((st.countTokens() >= 2) && st.nextToken().equals("POST")) {
if ((req = st.nextToken()).endsWith("/") || req.equals(""))
req+="index.html";
try{
File f = new File(req);
BufferedReader bfr = new BufferedReader(new FileReader(f));
char [] data = new char[(int) f.length()];
bfr.read(data);
pw.println("HTTP/1.1 200 OK\n");
pw.write(data);
pw.flush();
}catch(FileNotFoundException fe){
pw.println("HTTP/1.1 404 Not Found\n");
45.
}catch(IOException ioe){System.err.println(ioe);
}
}
else pw.println("HTTP/1.1 400 Bad Request\n");
sock.close();
}catch(IOException ioe){
System.err.println(ioe);
}
}
}
46. Упражнение
Протранслируйте и запуститеклиент и север. Убедитесь в их
работоспособности.
Попробуйте зайти на сервер
браузером. Что видите? В чем
причина? Попробуйте ее
исправить.
47. UDP-обмен
48.
При использовании UDP, не требуетсясоздавать клиент и сервер. Каждый
участник может как отправлять данные,
так и получать их.
Далее приводится два класса: отправитель и
получатель.
49.
import java.net.*; // Отправительimport java.io.*;
class UdpSender{
private String host;
private int port;
UdpSender(String h, int p){
host=h;
port=p;
}
public void sendMessage(String msg){
try{
byte [] data = msg.getBytes();
InetAddress addr = InetAddress.getByName(host);
DatagramPacket pack = new
DatagramPacket(data,data.length,addr,port);
DatagramSocket ds = new DatagramSocket();
50.
ds.send(pack);ds.close();
}catch(IOException e){
System.err.println(e);
}
}
public static void main(String[] args) {
UdpSender sndr = new UdpSender("localhost",1111);
for(int k=0; k<args.length; k++)
sndr.sendMessage(args[k]);
}
}
51.
import java.net.*; // получательimport java.io.*;
class UdpReceiver{
public static void main(String [] args){
try{
DatagramSocket ds = new DatagramSocket(1111);
while(true){
DatagramPacket pack = new DatagramPacket(new byte [1024],1024);
ds.receive(pack);
System.out.println(new String (pack.getData()).trim());
}
}catch(Exception e){
System.err.println(e);
}
}
}
52. Упражнение
Протранслируйте проекты,запустите и убедитесь в их
работоспособности. Что будет,
если в коде получателя опустить
вызов trim?