Протокол HDLCРефераты >> Программирование и компьютеры >> Протокол 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);