Пріоритет пакета. Іноді трафік 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;