Сети и сетевое программирование

Компьютерные сети

  • Соединенные компьютеры
  • Обмениваются данными
  • В соответствии с протоколом
  • Типы
    • локальные
      • домашние
      • корпоративные
    • глобальные

Адресация в сетях

  • IP-адреса
    • IPv4 vs IPv6
  • Адрес сети + адрес хоста
    • классовая адресация
    • бесклассовая адресация
  • Особые адреса
    • широковещательные
    • локальные
      • 192.168.0.0/16
      • 10.0.0.0/8
      • 127.0.0.0/8

Пример сети

Протокол передачи данных

  • Набор соглашений логического уровня
  • Стек протоколов

Стек протоколов OSI

Стек протоколов TCP/IP

Представление данных

Структура IP-пакета

Сокеты

  • Программный интерфейс для обмена данными между процессами
  • Типы сокетов
    • локальные (unix-сокеты)
      • доступны как файл
    • сетевые сокеты
      • клиентские
      • серверные

Пример

Клиент:

  • try ( DatagramSocket s = new DatagramSocket ())
  • {
  • DatagramPacket p = new DatagramPacket (buf, buf.length , remoteAddress);
  • s.send (p);
  • }

Сервер:

  • try (DatagramSocket s = new DatagramSocket (port)){
  • byte [] buf = new byte [1024];
  • DatagramPacket p = new DatagramPacket (buf, buf.length);
  • s.receive (p);
  • }

Работа с TCP

  • Сервер
    • серверный сокет на определённом порту
    • accept()
      • сокет для общения с клиентом
  • Клиент
    • клиентский сокет

java.net.Socket (TCP)

  • public Socket(String host, int port) throws UnknownHostException, IOException.
  • public Socket(InetAddress host, int port) throws IOException
  • public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.
  • public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException.
  • public Socket()

Клиентская сторона

  • Socket socket = new Socket ("localhost", 11111);
  • OutputStream os = socket.getOutputStream();
  • os.write(requestBytes);
  • os.flush();
  • InputStream is = socket.getInputStream();
  • is.read(responseBytes);

java.net.ServerSocket

  • public ServerSocket(int port) throws IOException
  • public ServerSocket(int port, int backlog) throws IOException
  • public ServerSocket(int port, int backlog, InetAddress address) throws IOException
  • public ServerSocket() throws IOException

Серверная сторона

  • ServerSocket server = new ServerSocket(11111);
  • Socket socket = server.accept();
  • InputStream is = socket.getInputStream();
  • is.read(requestBytes);
  • OutputStream os = socket.getOutputStream();
  • os.write(responseBytes);
  • os.flush();

Обработка нескольких клиентов

  • while (true) {
  • // accept a connection;
  • // deal with the client;
  • }

Обработка нескольких клиентов (2)

  • while (true) {
  • // accept a connection;
  • // create a thread to deal with the client;
  • }

Обработка нескольких клиентов (3)

  • while (true) {
  • // accept a connection;
  • // create a task to deal with the client;
  • }

Лекция 08. Сети и сетевое программирование - Google Slides