Протокол HDLC

Счетчик N2 используется для определения максимального числа повторных передач, выполняемых по переполнении таймера Т1. Переменные Т1 и N2 используются также командами / ответами установления звена, такими, как SABM и UA.

Счетчик N1 - максимальное число битов в I-кадре. Определяет максимальную длину информационных полей.

Размер окна К - максимальное число переданных, но не подтвержденных I-кадров. Это максимальное число последовательно занумерованных I-кадров, которые в любой момент времени станции могут передать без получения подтверждения. Оно не должно быть более 7.

Параметры Т1, N2, N1 и K являются системными, подлежащими согласованию с администрацией на некоторый период времени Описание интерфейса

В окошке «Передаваемые данные» отображается передаваемый файл в двоичном виде, т.е. в виде нулей и единиц.

В поле «флаг» - последовательность 01111110, обозначающая начало и конец кадра.

В поле CRC – контрольный циклический код.

В поле «адрес» - адрес первичной или вторичной станции.

Во вторичном окне отображаются состояние вторичной станции

В окошке «принятые данные» - принятые данные в двоичном виде

Дальше уже понятно

Заключение

Семейство HDLC протоколов канального уровня продолжает развиваться и расширяться. Однако акцент на обеспечение безошибочной передачи ослабляется по мере использования высокоскоростных каналов связи и использования методов коррекции ошибок. В полной мере возможности HDLC протокола используется при построении глобальных сетей передачи данных.

Литература

1. Блэк Ю. Сети ЭВМ: протоколы, стандарты, интерфейсы. М., Мир, 1990.

2. Протоколы информационно-вычислительных сетей: Справочник/ С.А.Аничкин, С.А.Белов, А.В.Берштейн и др.; Под. ред. И.А Мизина, А.П.Кулешова. - М.: Радио и связь, 1990. - 504с.:ил.

Приложение (Листинг программы)

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ScktComp, ComCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Label2: TLabel;

Edit3: TEdit;

Label3: TLabel;

Memo1: TMemo;

Label4: TLabel;

Edit5: TEdit;

Label5: TLabel;

Edit6: TEdit;

Label7: TLabel;

GroupBox2: TGroupBox;

RichEdit1: TRichEdit;

OpenDialog1: TOpenDialog;

Button1: TSpeedButton;

Button3: TSpeedButton;

SpeedButton1: TSpeedButton;

LabeledEdit1: TLabeledEdit;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioGroup1: TRadioGroup;

RadioGroup2: TRadioGroup;

Memo2: TMemo;

SpeedButton2: TSpeedButton;

GroupBox3: TGroupBox;

Memo3: TMemo;

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure SpeedButton2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

kl:boolean;

implementation

uses Unit2;

{$R *.dfm}

procedure perev1016(sr:string;var se:string);

var chis:real;

begin

chis:=strtofloat(sr);

se:=inttohex(trunc(chis),24);

end;

procedure perev210(sr:string;var se:string);

var j,chis,i,pol:integer;

begin

chis:=0;

pol:=length(sr);

j:=0;

for i:=pol downto 1 do

begin

if sr[i]='1' then

chis:=chis+trunc(exp(j*ln(2)));

j:=j+1;

end;

se:=inttostr(chis);

end;

procedure perev162(sr:string;var se:string);

var chis:real;i,p:integer;so:string;

begin

p:=length(sr);

se:='';

for i:=1 to p do

begin

case sr[i] of

'0':se:=se+'0000';

'1':se:=se+'0001';

'2':se:=se+'0010';

'3':se:=se+'0011';

'4':se:=se+'0100';

'5':se:=se+'0101';

'6':se:=se+'0110';

'7':se:=se+'0111';

'8':se:=se+'1000';

'9':se:=se+'1001';

'A':se:=se+'1010';

'B':se:=se+'1011';

'C':se:=se+'1100';

'D':se:=se+'1101';

'E':se:=se+'1110';

'F':se:=se+'1111';

end;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var st:string;

begin

if InputQuery('Введите IP адрес первичной станции','Адрес вторичной станции',st) then

begin

edit2.Text:='1010010101';

end;

end;

procedure Delay(msecs : Longint);

var

FirstTick : Longint;

begin

FirstTick := GetTickCount;

repeat

Application.ProcessMessages;

until GetTickCount - FirstTick >= msecs;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

if opendialog1.Execute then

begin

kl:=true;

LabeledEdit1.Text:=OpenDialog1.FileName;

memo3.Lines.LoadFromFile(OpenDialog1.FileName);

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var st6,st5,st3,st2,st1,st,st4:string;kol,k,i,j,im:integer;f:file of char;ch:char;

begin

if kl=true then

begin

kl:=false;

assignfile(f,OpenDialog1.filename);

reset(f);

form2.Memo3.Lines.Clear;

while not eof(f) do

begin

im:=0;

form2.Memo2.Lines.Clear;

edit3.Text:='10100000';

memo2.Lines.Add('Команда RR - готов к приему');

memo2.Lines.Add('---------------------------');

Radiogroup1.itemindex:=0;

RichEdit1.Lines.Clear;

RichEdit1.Lines.Add('011111101010010101100000000000000001111110');

RadioGroup2.ItemIndex:=1;

delay(2000);

form2.RadioGroup1.ItemIndex:=0;

form2.RadioGroup2.ItemIndex:=1;

form2.memo1.Lines.Clear;

form2.memo1.Lines.Add('011111101010010101100000000000000001111110');

form2.Show;

delay(2000);

form2.Memo1.Lines.Clear;

form2.Memo1.Lines.Add('011111101010010101110000000000000001111110');

form2.RadioGroup1.itemindex:=1;

form2.RadioGroup2.ItemIndex:=1;

delay(2000);

form2.Hide;

edit3.Text:='10101000';

memo2.Lines.Add('Ответ RR - готов к приему');

memo2.Lines.Add('-------------------------');

RichEdit1.Lines.Clear;

RichEdit1.Lines.Add('011111101010010101110000000000000001111110');

RadioGroup1.itemindex:=1;

RadioGroup2.ItemIndex:=1;

st:='';

st:='011111101010010101';

i:=0;

st3:='';

RichEdit1.Lines.Clear;

memo2.Lines.Add('Передача');

memo2.Lines.Add('-------------------------');

st4:='';

st4:=st4;

st5:='';

st6:='';

while (not eof(f))and (i<=512) do

begin

read(f,ch);


Страница: