Протокол маршрутизации ( ip) обеспечивает
Содержание:
Принцип работы UDP
Когда приложение, базирующееся на UDP, отправляет данные другому хосту в сети, UDP дополняет их восьмибитным заголовком, содержащим номера портов адресата и отправителя, общую длину данных и контрольную сумму. Поверх дейтаграммы UDP свой заголовок добавляет IP, формируя дейтаграмму IP:
На предыдущем рисунке указано, что общая длина заголовка UDP составляет восемь байтов. Теоретически максимальный размер дейтаграммы IP равен 65 535 байтам. С учетом 20 байтов заголовка IP и 8 байтов заголовка UDP длина данных пользователя может достигать 65 507 байтов. Однако большинство программ работают с данными меньшего размера. Так, для большинства приложений по умолчанию установлена длина приблизительно 8192 байта, поскольку именно такой объем данных считывается и записывается сетевой файловой системой (NFS). Можно устанавливать размеры входного и выходного буферов.
Контрольная сумма нужна, чтобы проверить были ли данные доставлены в пункт назначения правильно или были искажены. Она охватывает как заголовок UDP, так и данные. Байт-заполнитель используется, если общее число октетов дейтаграммы нечетно. Если полученная контрольная сумма равна нулю, получатель фиксирует ошибку контрольной суммы и отбрасывает дейтаграмму. Хотя контрольная сумма является необязательным средством, ее всегда рекомендуется включать.
На следующем шаге уровень IP добавляет 20 байтов заголовка, включающего TTL, IP-адреса источника и получателя и другую информацию. Это действие называют IP-инкапсуляцией.
Как упоминалось ранее, максимальный размер пакета равен 65 507 байтам. Если пакет превышает установленный по умолчанию размер MTU, то уровень IP разбивает пакет на сегменты. Эти сегменты называются фрагментами, а процесс разбиения данных на сегменты — фрагментацией. Заголовок IP содержит всю информацию о фрагментах.
Когда приложение-отправитель «выбрасывает» дейтаграмму в сеть, она направляется по IP-адресу назначения, указанному в заголовке IP. При проходе через маршрутизатор значение времени жизни (TTL) в заголовке IP уменьшается на единицу.
Когда дейтаграмма прибывает к заданному назначению и порту, уровень IP по своему заголовку проверяет, фрагментирована ли дейтаграмма. Если это так, дейтаграмма собирается в соответствии с информацией, имеющейся в заголовке. Наконец прикладной уровень извлекает отфильтрованные данные, удаляя заголовок.
Похожие:
Зао искрател сервисная информацияСистемная услуга маршрутизации вызовов в многооператорской среде предоставляет возможность абоненту при установлении исходящих вызовов… | Интерне́т (произносится ; англ. Internet) — всемирная система объединённых компьютерных сетей, построенная на использовании протокола ip и маршрутизации пакетов данных. Интерне́тЧасто упоминается как «Всемирная сеть» и«Глобальная сеть». В обиходе иногда говорят «Ине́т» | ||
Компьютера (назначение, состав, способ организации диалога с пользователем). Загрузка компьютераЬютера (software). Операционная система обеспечивает управление всеми аппаратными компонентами компьютера (hardware). Другими словами,… | Протокол № от протокол № Н. А. Шебалкова 2008 г. 2008 г 2008 гУправляющего совета на общем собрании тк директор моу «сош №4» протокол № от протокол № Н. А. Шебалкова 2008 г. 2008 г 2008 г | ||
Протокол № от 18 октября 2012 года Протокол общего собрания трудового коллектива №03 от 18. 10. 2012г. Положение о системе оплаты труда работников мбоу средней общеобразовательной школыО. В. Путилина Приказ №148-од от 18 октября 2012года. Протокол № от 18 октября 2012 года Протокол общего собрания трудового | Программа обеспечивает достижение выпускниками начальной школы определенных личностных, метапредметных и предметных результатов. Личностные результатыПрограмма обеспечивает достижение выпускниками начальной школы определенных личностных, метапредметных и предметных результатов | ||
Введение Финансы предприятий, принципы их организацииДля осуществления своей главной задачи предприятие обеспечивает увеличение прибыли | Протокол №3 от 30. 08. 2011 Протокол №1 от 25. 08. 2011 Основная образовательная программаСкоморошинской средней общеобразовательной школы муниципального образования Дубенский район | ||
Протокол № Синицына Г. А. Приказ № от положениеРассмотрено Утверждаю: на общем собрании коллектива Директор моу сош №1 г. Хвалынска протокол № Синицына Г. А | Учебников (учебно-методический комплект) для 1-4 классов общеобразовательных учреждений, которая обеспечивает достижение требований к результатам освоения основной образовательной программы начального общего образования«Начальная школа XXI века» это система учебников (учебно-методический комплект) для 1-4 классов общеобразовательных учреждений, которая… |
Справочники, творчество
TCP протокол
TCP — это транспортный протокол, является частью стека протоколов TCP IP, он выполняет функции управления передачей данных и следит за их сохранностью, считается надежным. Расшифровывается как Transmission Control Protocol (протокол управления передачей).
Это стандарт, который определяет как нужно устанавливать связь и поддерживать ее, чтобы две программы могли обмениваться данными между собой.
Является именно надежным протоколом так как:
1. Использует логическое соединение, благодаря чему обеспечивается надежная доставка данных.2. Пронумеровывает передаваемые пакеты данных и проверяет их доставку, принимающая сторона высылает подтверждение о получении, в случае потери каких-либо пакетов создается повторная передача.3. Делит передаваемые данные на части — пакеты данных, затем передает их нижнему уровню, и собирает их, когда они приходят к получателю.4. Проверяет контрольную сумму передаваемых пакетов, если она отличается — создается новая отправка.5. Проверяет пакеты на дубликаты, в случае обнаружения таковых — уничтожает.6. Контролирует скорость передачи.
Заголовок TCP протокола
Весит 20 байт, если нет дополнительных опций, вот как он выглядит:
У каждого TCP сегмента указывается порт источника и назначения, с помощью которых происходит идентификация отправляющего и принимающего приложения. Эти порты вместе с IP адресами уникально идентифицируют каждое соединение. Комбинация IP и порта — это сокет (socket).
Номер последовательности — нумерация каждого отправляемого байта в потоке передаваемых данных. А номер подтверждения — это следующий номер байта после полученного, который ждет получатель. Т.е. передача идет последовательно, например, получатель получил 100-ый байт, следующим ждет 101.
Остальные значения можно понять из самой картинки. Разве, что размер окна — он скользящий, т.е. зависит от качества сети. Если много данных теряется он может уменьшаться и наоборот. Он регулирует количество передаваемых байтов.
А флаги: URG, ACK, PSH и т.д. — описывают дополнительные значения сегмента, так, например, флаг FIN применяется для завершения соединения.
Многопоточное клиент-серверное приложение TCP
Последнее обновление: 31.10.2015
Рассмотрим, как создать многопоточное клиент-серверное приложение. Фактически оно будет отличаться от однопоточного только тем, что обработка
запроса клиента будет вынесена в отдельный поток.
Вначале создадим проект для клиента. Назовем проект ConsoleClient и в классе Program определим следующий код:
using System; using System.Net.Sockets; using System.Text; namespace ConsoleClient { class Program { const int port = 8888; const string address = "127.0.0.1"; static void Main(string[] args) { Console.Write("Введите свое имя:"); string userName = Console.ReadLine(); TcpClient client = null; try { client = new TcpClient(address, port); NetworkStream stream = client.GetStream(); while (true) { Console.Write(userName + ": "); // ввод сообщения string message = Console.ReadLine(); message = String.Format("{0}: {1}", userName, message); // преобразуем сообщение в массив байтов byte[] data = Encoding.Unicode.GetBytes(message); // отправка сообщения stream.Write(data, 0, data.Length); // получаем ответ data = new byte; // буфер для получаемых данных StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); } while (stream.DataAvailable); message = builder.ToString(); Console.WriteLine("Сервер: {0}", message); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { client.Close(); } } } }
В программе клиента пользователь будет вначале вводить свое имя, а затем сообщение для отправки. Причем сообщение будет уходить в формате
.
После отправки сообщения клиент получает сообщение с сервера.
Теперь создадим проект сервера, который назовем ConsoleServer. Вначале в проект сервера добавим новый класс ClientObject, который будет представлять отдельное подключение:
using System; using System.Net.Sockets; using System.Text; namespace ConsoleServer { public class ClientObject { public TcpClient client; public ClientObject(TcpClient tcpClient) { client = tcpClient; } public void Process() { NetworkStream stream = null; try { stream = client.GetStream(); byte[] data = new byte; // буфер для получаемых данных while (true) { // получаем сообщение StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); } while (stream.DataAvailable); string message = builder.ToString(); Console.WriteLine(message); // отправляем обратно сообщение в верхнем регистре message = message.Substring(message.IndexOf(':') + 1).Trim().ToUpper(); data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); } } catch(Exception ex) { Console.WriteLine(ex.Message); } finally { if (stream != null) stream.Close(); if (client != null) client.Close(); } } } }
В этом классе, наоборот, сначала получаем сообщение в цикле do..while и потом немного его изменяем (отрезаем по двоеточию и переводим в верхний
регистр) и отправляем обратно клиенту. То есть класс ClientObject заключает в себе все действия по работе с отдельным подключением.
В главном классе проекта сервера определим следующий код:
using System; using System.Net; using System.Net.Sockets; using System.Threading; namespace ConsoleServer { class Program { const int port = 8888; static TcpListener listener; static void Main(string[] args) { try { listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port); listener.Start(); Console.WriteLine("Ожидание подключений..."); while(true) { TcpClient client = listener.AcceptTcpClient(); ClientObject clientObject = new ClientObject(client); // создаем новый поток для обслуживания нового клиента Thread clientThread = new Thread(new ThreadStart(clientObject.Process)); clientThread.Start(); } } catch(Exception ex) { Console.WriteLine(ex.Message); } finally { if(listener!=null) listener.Stop(); } } } }
Сразу после подключения нового клиента:
TcpClient client = listener.AcceptTcpClient()
Создается объект ClientObject и новый поток, который запускает метод Process объекта ClientObject, где собственно и происходит получение и отправка сообщений.
Таким образом, сервер сможет одновременно обрабатывать сразу несколько запросов.
Результаты работы программы. Один из клиентов:
Введите свое имя: Евгений Евгений: привет мир Сервер: ПРИВЕТ МИР Евгений: пока мир Сервер: ПОКА МИР Евгений: _
Сервер:
Ожидание подключений... Евгений: привет мир Евгений: пока мир Том: привет чат
НазадВперед