Schreiben Sie Programme zur Implementierung von IEEE 802.3 Ethernet -Frame -Kapselung.
Es ist erforderlich, die Schnittstelle zu zeichnen, und der Datenteil, die Quell -MAC -Adresse und die Ziel -MAC -Adresse des Ethernet -Frame sind von der Schnittstelle eingegeben.
Das berechnete Prüfsummenfeld und das eingekapselte Ergebnis können von der Grenzfläche ausgegeben werden.
Polynomiale g (x) = x8+x2+x+1 erzeugen;
Das verwendete Betriebssystem, die Sprach- und Kompilierungsumgebung sind nicht begrenzt, müssen jedoch im Bericht festgestellt werden.
In der Lage, den CRC -Berechnungsprozess zu visualisieren;
Fähigkeit, den Betrieb des Programms von der Schnittstelle zu steuern.
Die Rahmenstruktur gemäß dem 802.3 -Standard ist in der folgenden Tabelle angezeigt (die Ethernet -Frame -Struktur des 802.3 -Standards besteht aus 7 Teilen)
802.3 Standardrahmenstruktur
| Leadcode | Abgrenzer vor dem Frame | Zieladresse | Quelladresse | Länge Feld | Datenfelder | Überprüfungsfeld |
|---|---|---|---|---|---|---|
| 7b | 1b | (6b) | (6b) | (2b) | (Variable Länge) | (4b) |
Unter ihnen beträgt die Mindestlänge des Felddatenfeldes 46B. Wenn der Rahmen weniger als 46b hat, sollte das Datenfeld auf 46B gefüllt werden. Das Polstercharakter ist willkürlich und zählt nicht zum Feldwert der Länge.
Im Feld Scheck wird eine CRC -Prüfung verwendet. Der Überprüfungsumfang umfasst das Feld der Zieladresse, das Feld Quelladressen, das Feld Länge und das Feld LLC -Daten.
Verwenden Sie eine visuelle Schnittstelle, um das vom Benutzer eingegebene Zieladresse, Quelladresse, Länge und Datenfeld zu empfangen. Es unterstützt auch die Erzeugung von Zufallsdaten, die die Benutzereingabe verringern können
Verwenden Sie das generierte Polynom, um das Überprüfungsfeld der Verifizierung der zu überprüfen. Das zu überprüfende Feld ist ein Ganzzahl -Byte, die Reihenfolge des erzeugten Polynoms nicht überschreitet 32 und der berechnete Rest beträgt 4 Bytes.
Nachahmung der Bit -Eingangstastatur des Windows 10 -Taschenrechners, sodass Benutzer Polynome und andere Daten eingeben und generieren können, indem Sie auf die Maus klicken
Der Rahmen nach der Berechnung von FCS tritt dem Empfänger auf, und der Empfänger kann überprüfen, ob ein Fehler vorliegt. Sie können Fehler simulieren, z. B. manuell das Ändern der Daten und dann überprüfen, ob ein Fehler vorliegt.
Mit kürzeren Binärdaten zeigen Sie den CRC -Berechnungsprozess dynamisch an und unterstützen Sie die Überprüfungsfunktion. Die Verzögerungszeit jedes Schritts kann angepasst werden, um die Anzeigegeschwindigkeit zu steuern, und die Präsentation kann jederzeit gestoppt werden.
Nach der folgenden Formel
Kann bekommen
Das heißt, erweitern Sie eine Zahl n -mal und fügen Sie dann den Rest hinzu. Zu diesem Zeitpunkt bleibt der Rest von $$ mod m $$ unverändert

private byte [ ] CalcCRC ( string v )
{
var data = new Queue < char > ( v . ToArray ( ) ) ; // 被除数
char [ ] divisor = binaryString . ToArray ( ) ; // 除数
Queue < char > S = new Queue < char > ( ) ; // 商
int width = divisor . Length ; // 每次取 width 个字符进行异或运算
Queue < char > str = new Queue < char > ( ) ; // 每次取的长度为 width 的部分被除数
// 获取前 width - 1 个字符,填入到str中
for ( int i = 0 ; i < width - 1 ; i ++ )
{
str . Enqueue ( data . Dequeue ( ) ) ;
}
while ( data . Count != 0 )
{
str . Enqueue ( data . Dequeue ( ) ) ;
if ( str . First ( ) == '0' )
{
S . Enqueue ( '0' ) ;
str . Dequeue ( ) ;
}
else
{
S . Enqueue ( '1' ) ;
var temp = str . ToArray ( ) ;
str . Clear ( ) ;
for ( int i = 1 ; i < temp . Length ; i ++ )
{
str . Enqueue ( temp [ i ] == divisor [ i ] ? '0' : '1' ) ;
}
}
}
// 计算已经结束,str中的值就是结果,下面的代码可以不用看了
// 将str中的值转成4个字节的二进制数组
var res = new string ( str . ToArray ( ) ) . PadLeft ( 32 , '0' ) ;
var result = new byte [ 4 ] ;
// 将字符串格式化为byte
for ( int i = 0 ; i < 4 ; i ++ )
{
result [ i ] = Convert . ToByte ( res . Substring ( i * 8 , 8 ) , 2 ) ;
}
return result ;
}Ausstehende Daten: 1010 0111 0110 0
Polynom erzeugen: 1010 1101 0 (
Geben Sie alle ausstehenden Daten in data ein
data = [1010011101100]
Generieren Sie str Polynom 8 9 Bits. data
str = [10100111]
data = [01100]
data.Count = 5
Dequeue das erste Element der data und stecke sie in die Warteschlange str
str = [101001110]
data = [1100]
Das erste Element von str ist 1
Fügen Sie 1 in die Spalte S ein
Führen Sie bitweise exklusive oder den Wert der str und den Wert des generierten Polynoms durch und kopieren Sie die letzten 8 Zeichen des Ergebnisses auf str 101001110 ^ 10101101010 = 000010100
S = [1]
str = [00010100]
data = [1100]
data.Count = 4
Dequeue das erste Element der data und stecke sie in die Warteschlange str
S = [1]
str = [000101001]
data = [100]
Das erste Element von str ist 0
Fügen Sie 0 in die Spalte S und SET str erstes Element dequeue ein
S = [10]
str = [00101001]
data = [100]
data.Count = 3
Dequeue das erste Element der data und stecke sie in die Warteschlange str
S = [10]
str = [001010011]
data = [00]
Das erste Element von str ist 0
Fügen Sie 0 in die Spalte S und SET str erstes Element dequeue ein
S = [100]
str = [01010011]
data = [00]
data.Count = 2
Dequeue das erste Element der data und stecke sie in die Warteschlange str
S = [100]
str = [010100110]
data = [0]
Das erste Element von str ist 0
Fügen Sie 0 in die Spalte S und SET str erstes Element dequeue ein
S = [1000]
str = [10100110]
data = [0]
data.Count = 1
Dequeue das erste Element der data und stecke sie in die Warteschlange str
S = [1000]
str = [101001100]
data = []
Das erste Element von str ist 1
Fügen Sie 1 in die Spalte S ein
Führen Sie bitweise exklusive oder den Wert der str und den Wert des generierten Polynoms durch und kopieren Sie die letzten 8 Zeichen des Ergebnisses auf str 101001100 ^ 10101101010 = 00001010
S = [10001]
str = [00010110]
data = []
str = 00010110 data.Count = 0 S = 10001
Der gesamte Berechnungsprozess ist:







