Протокол маршрутизации ( 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, где собственно и происходит получение и отправка сообщений.
Таким образом, сервер сможет одновременно обрабатывать сразу несколько запросов.
Результаты работы программы. Один из клиентов:
Введите свое имя: Евгений Евгений: привет мир Сервер: ПРИВЕТ МИР Евгений: пока мир Сервер: ПОКА МИР Евгений: _
Сервер:
Ожидание подключений... Евгений: привет мир Евгений: пока мир Том: привет чат
НазадВперед