La suma de comprobación es una especie de método de detección de errores en las redes informáticas. Este método es utilizado por los protocolos de capa superior y hace uso de Checksum Generator en el lado del remitente y Checksum Checker en el lado del receptor. En este artículo, implementaremos el algoritmo de suma de comprobación en Python.
Consulte los siguientes artículos para obtener información detallada sobre la suma de comprobación
Pasos para implementar el algoritmo.
Paso 1: generar suma de comprobación (lado del remitente)
- El mensaje se divide en 4 secciones, cada una de k bits.
- Todas las secciones se suman para obtener la suma.
- La suma se complementa y se convierte en Checksum.
- La suma de comprobación se envía con los datos.
Paso 2: Checksum Checker (lado del receptor)
- El mensaje se divide en 4 secciones de k bits.
- Todas las secciones se suman para obtener la suma.
- La suma de comprobación generada se suma a la suma de todas las secciones.
- La suma resultante se complementa.
Después de seguir estos pasos, si la suma de verificación del lado del receptor y el lado del verificador se suman y complementan y el resultado es igual a cero, los datos son correctos y, por lo tanto, se aceptan. De lo contrario, se detecta un error y se rechazan los datos.
A continuación se muestra la implementación del enfoque anterior:
Python3
# Function to find the Checksum of Sent Message def findChecksum(SentMessage, k): # Dividing sent message in packets of k bits. c1 = SentMessage[0:k] c2 = SentMessage[k:2*k] c3 = SentMessage[2*k:3*k] c4 = SentMessage[3*k:4*k] # Calculating the binary sum of packets Sum = bin(int(c1, 2)+int(c2, 2)+int(c3, 2)+int(c4, 2))[2:] # Adding the overflow bits if(len(Sum) > k): x = len(Sum)-k Sum = bin(int(Sum[0:x], 2)+int(Sum[x:], 2))[2:] if(len(Sum) < k): Sum = '0'*(k-len(Sum))+Sum # Calculating the complement of sum Checksum = '' for i in Sum: if(i == '1'): Checksum += '0' else: Checksum += '1' return Checksum # Function to find the Complement of binary addition of # k bit packets of the Received Message + Checksum def checkReceiverChecksum(ReceivedMessage, k, Checksum): # Dividing sent message in packets of k bits. c1 = ReceivedMessage[0:k] c2 = ReceivedMessage[k:2*k] c3 = ReceivedMessage[2*k:3*k] c4 = ReceivedMessage[3*k:4*k] # Calculating the binary sum of packets + checksum ReceiverSum = bin(int(c1, 2)+int(c2, 2)+int(Checksum, 2) + int(c3, 2)+int(c4, 2)+int(Checksum, 2))[2:] # Adding the overflow bits if(len(ReceiverSum) > k): x = len(ReceiverSum)-k ReceiverSum = bin(int(ReceiverSum[0:x], 2)+int(ReceiverSum[x:], 2))[2:] # Calculating the complement of sum ReceiverChecksum = '' for i in ReceiverSum: if(i == '1'): ReceiverChecksum += '0' else: ReceiverChecksum += '1' return ReceiverChecksum # Driver Code SentMessage = "10010101011000111001010011101100" k = 8 #ReceivedMessage = "10000101011000111001010011101101" ReceivedMessage = "10010101011000111001010011101100" # Calling the findChecksum() function Checksum = findChecksum(SentMessage, k) # Calling the checkReceiverChecksum() function ReceiverChecksum = checkReceiverChecksum(ReceivedMessage, k, Checksum) # Printing Checksum print("SENDER SIDE CHECKSUM: ", Checksum) print("RECEIVER SIDE CHECKSUM: ", ReceiverChecksum) finalsum=bin(int(Checksum,2)+int(ReceiverChecksum,2))[2:] # Finding the sum of checksum and received checksum finalcomp='' for i in finalsum: if(i == '1'): finalcomp += '0' else: finalcomp += '1' # If sum = 0, No error is detected if(int(finalcomp,2) == 0): print("Receiver Checksum is equal to 0. Therefore,") print("STATUS: ACCEPTED") # Otherwise, Error is detected else: print("Receiver Checksum is not equal to 0. Therefore,") print("STATUS: ERROR DETECTED")
SENDER SIDE CHECKSUM: 10000101 RECEIVER SIDE CHECKSUM: 01111010 Receiver Checksum is equal to 0. Therefore, STATUS: ACCEPTED
Publicación traducida automáticamente
Artículo escrito por riyakumar2709 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA