Смекни!
smekni.com

Використання TCPIP протоколу для обміну інформацією в мережі (стр. 3 из 4)

Пріоритет пакета. Іноді трафік Internet може стати настільки важким, що пакет може "загинути". Як правило, пакети відкидаються без обліку їхньої важливості. Однак пакетам IPv6 можна привласнювати пріоритети відповідно до призначення.

Значення пріоритетів розділені на два діапазони: 0 – 7 і 8 – 15. При перевантаженні мережі пакети з нижчим пріоритетом (номером) в межах даного діапазону відкидаються в першу чергу, причому кожен діапазон розглядається окремо. Іншими словами, пакет із пріоритетом 6 не обов'язково відкидається раніше пакета з пріоритетом 8, оскільки пакет із пріоритетом 6 у межах свого діапазону має вищий пріоритет.

Значення пріоритетів 0 – 7 використовують для вказівки пріоритету трафіка, для якого джерело забезпечує контроль перевантаження (congestion control), тобто трафік, що використовує протокол вищого рівня (наприклад, TCP) для відстеження здатності системи керувати потоком даних, при перевантаженні системи переривається. Нижче приведені значення пріоритетів графіка з контролем перевантаження, передбачені специфікацією IPv6.

0 – трафік без пріоритету.

1 – трафік-"заповнювач" ("Filler" traffic) (мережні новини).

2 – передача, що необслуговується, даних (електронна пошта).

4 – передача великого обсягу, що обслуговується, даних (FTP, NFS).

6 – інтерактивний трафік (telnet, протокол дисплея).

7 – керуючий трафік Internet (маршрутизуючі протоколи, SNMP).

Пріоритети 3 і 5 зарезервовані на майбутні категорії.Значення 8 – 15 використовують для вказівки пріоритету трафіка, що не переривається у відповідь на перевантаження. До нього відносяться пакети мовної і відеоінформації, що відсилаються з постійною швидкістю. Вони не відзначені в специфікації, але, як правило, більш важлива інформація (скажемо, слабко помітний голос) повинна мати пріоритет вище, ніж інформація, що при передачі мала б чудову якість, але малоістотна (скажемо, високоякісна відеоінформація).

Підтримка найбільших пакетів. Серед інших розширень (extensions), призначених для поліпшення "відгуку" IPv6 на умови роботи в Internet, можна відзначити ті, котрі дозволяють збільшити розмір пакетів IP, тобто нести більший обсяг корисних даних у порівнянні з IPv4. Це дуже корисна можливість, оскільки застосування великих пакетів дозволяє передати дані за допомогою меншого числа пакетів, що, у свою чергу, зменшує затримку при маршрутизації пакетів.

Без використання нових параметрів, таких як пріоритети і керування потоками, адресація пакетів була б значно складнішою. Якщо ж у пакеті цих установок не існує, нові можливості ігноруються. Перехід на новий протокол не відбувається автоматично.

Задача переходу від IPv4 до IPv6 аж ніяк не проста. В даний час відкрилися курси, на яких навчають рішенню цієї проблеми і, крім того, можна використовувати деякі мережні ресурси. Кращі з них знаходяться за адресою http://www.emos.be/coexist/etg071/gintrod.htmttINICIO.

Не вдаючись у деталі, вкажу чотири методи переходу мережі на протокол IPv6:

• Підтримка обох протоколів.

• Включення в один пакет адрес для обох протоколів.

• Створення тунелю IPv6 за допомогою протоколу IPv4.

• Трансляція заголовків для того, щоб вузли IPv6 могли зв'язуватися з вузлами IPv4.

Якщо ж ви зважитеся пройти весь цей шлях, вам доведеться обновити всю мережу в наступному порядку.

1. Обновити сервер DNS для підтримки нових адрес.

2. Обновити вузли для підтримки як IPv4, так і IPv6.

3. Розгорнути обновлені вузли.

4. Обновити область (сегмент мережі) для повного переходу на протокол IPv6, причому обидва протоколи повинні підтримувати тільки граничні маршрутизатори..

5. Обновити маршрутизатори для повного переходу на протокол IPv6.

6. Розгорнути нові маршрутизатори.

Отже, ви обновляєте систему визначення імен, а потім, працюючи "зсередини", поширюєте IPv6 по всій мережі, причому по ходу процесу забезпечуєте сумісність протоколів.


IV. Опис програми SashaPopUp

Програма SashaPopUp була розроблена з допомогою системи програмування Delphi 5 з ціллю глибшого розуміння дії такого протокола як IP (Internet Protocol). В програмі застосований метод пошуку за допомогою IP-адресації. Застосовується технологія Сервер-Клієнт. В цілому робота базується на використанні загально визначених сокетів клієнта та сокетів сервера. Передача інформації здійснюється саме по ним. Застосовуються порти для відкриття і закриття сокетів.

Саму програму можна охарактеризувати як звичайну чат-програму подібну до програми Windows WinPopUp. Основний принцип роботи заключається в обміні інформацією між клієнтом та сервером. При чому сервер може бути лише один, а клієнтів може бути безліч. Клієнт для того щоб послати яку-небудь текстову інформацію іншому клієнту повинен послати цю інформацію на сервер, а вже потім сервер посилає цю інформацію клієнту, для якого вона призначувалась. І так відбувається завжди коли який-небудь клієнт хоче послати інформацію іншому клієнту. Для зручності клієнт і сервер обидва поміщаються в дану єдину програму. Отже, перед користувачем який працює з програмою не постає проблема про постійне підключення до сервера для того щоб зв’язатись з іншим користувачем. Зв’язуватись з сервером потрібно лише один раз.

Під час роботи програми користувачеві постійно сповіщається який статус має його програма, наприклад, про те що він підключився до сервера, або про те що підключення хибне.

Кожен користувач коли посилає повідомлення вводить своє ім’я щоб інший користувач знав з ким він розмовляє. Все відбувається як у звичайному чаті. Коли приходить повідомлення в полі Memo з’являється ім’я того хто послав це повідомлення, а вже потім після двох крапок сам текст повідомлення.

ТЕКСТ ПРОГРАМИ:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Buttons, ScktComp, StdCtrls, ComCtrls;

const maxmemolines=20;

type

TForm1 = class(TForm)

Memo1: TMemo;

Memo2: TMemo;

ClientSocket1: TClientSocket;

ServerSocket1: TServerSocket;

SpeedButton1: TSpeedButton;

StatusBar1: TStatusBar;

procedure Form1Create(Sender: TObject);

procedure ServerSocket1ClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure Form1Close(Sender: TObject; var Action: TCloseAction);

procedure ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

procedure SpeedButton1Click(Sender: TObject);

procedure ClientSocket1Connect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);

procedure Memo2KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;

ErrorEvent: TErrorEvent; var ErrorCode: Integer);

procedure ClientSocket1Disconnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

private

{ Private declarations }

server:string;

clientname:string;

IsServer:boolean;

talk:boolean;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Form1Create(Sender: TObject);

begin

memo1.lines.clear;

memo2.lines.clear;

talk:=false;

try

serversocket1.active:=true;

clientsocket1.active:=false;

IsServer:=true;

statusbar1.panels[1].text:=' I am server ';

except

serversocket1.active:=false;

IsServer:=false;

statusbar1.panels[1].text:=' I am client ';

end;

end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

statusbar1.panels[2].text:=' Client connected';

if not talk then

talk:=true else begin

serversocket1.socket.connections[1].sendtext(' I am Busy ');

serversocket1.socket.connections[1].Close;

end;

// socket.sendtext('Welcome to Sasha PopUp');

memo2.setfocus;

end;

procedure TForm1.Form1Close(Sender: TObject; var Action: TCloseAction);

begin

serversocket1.close;

end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

var

i:integer;

s:string;

begin

s:=socket.receivetext;

memo1.lines.add(s);

{ with serversocket1.socket do

for i:=1 to activeconnections do begin

if connections[i-1].handle <> socket.handle

then

connections[i-1].sendtext(s);

end;

if memo1.lines.count>maxmemolines then

memo1.lines.delete(0);}

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

if clientsocket1.active then clientsocket1.active:=false;

if inputquery('Connect to server','IP address:',server)

then

begin

with clientsocket1 do

begin

IsServer:=false;

serversocket1.active:=false;

address:=server;

active:=true;

statusbar1.panels[1].text:=' I am client';

end;

memo2.lines.clear;

end;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;

Socket: TCustomWinSocket);

begin

statusbar1.panels[2].text:=

'I connected to server';//+Socket.remotehost;

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;

Socket: TCustomWinSocket);

begin

memo1.lines.add(socket.receivetext);

end;

procedure TForm1.Memo2KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if (key=vk_return) //and (length(memo1.lines[

// memo1.lines.count-1])>0)

then begin

if (length(clientname)<=0) then begin

inputquery('Registration','Your nickname:',clientname); end;

memo1.lines.add(clientname+':'+memo2.lines[memo2.lines.count-1]);

if IsServer then

serversocket1.socket.connections[0].sendtext(clientname+': '+memo2.lines

[memo2.lines.count-1])

else

clientsocket1.socket.sendtext(clientname+': '+memo2.lines

[memo2.lines.count-1]);

memo2.lines.clear;

end;

end;

procedure TForm1.ClientSocket1Error(Sender: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

begin

memo2.lines.add('Connection to '+server+' failed');

errorcode:=0;

end;