Operación de suma de complemento a uno binario

Cálculo de la suma de comprobación del protocolo UDP .

  De hecho, este principio de cálculo no es difícil en esencia, es una operación de suma de complemento binario, específicamente:

                                          0 + 0 = 0 ; 0 + 0 = 0

                                          1 + 0 = 0 + 1 = 1 ; 1 + 0 = 0 + 1 = 1

                                          1 + 1 = 10 ; 1 + 1 = 10

  Entre ellos, 1 de cada 10 se agrega a la siguiente columna. Si es 1 + 1 en la columna más alta, entonces el 10 obtenido se deja con 0, y 1 se mueve a la columna más baja, y luego se realiza una suma binaria con el bit más bajo.

  En el libro del profesor Xie, hablé sobre cómo se verifican los datos UDP de 15 bytes en el remitente, y luego se enumera una forma vertical binaria y se da un resultado, pero no describe cómo es. Calculado. Después de mis continuos esfuerzos, finalmente escribí todo el proceso de cálculo binario. Cuando estaba en clase en la Academia de Ciencias Matemáticas, el profesor me habló de un método de cálculo hexadecimal relativamente simple, que de hecho es mucho más simple en comparación. Bien, tomemos la foto primero.

El título dado por el profesor Xie en el libro de texto es así.

二进制版
1001 1001 0001 0011 //伪首部源IP地址前16位
0000 1000 0110 1000 //伪首部源IP地址后16位
1010 1011 0000 0011 //伪首部目的IP地址前16位
0000 1110 0000 1011 //伪首部目的IP地址后16位
0000 0000 0001 0001 //伪首部UDP协议字段代表号17,前面8位是填充0
0000 0000 0000 1111 //伪首部UDP长度字段
0000 0100 0011 1111 //UDP头部源IP地址对应的进程端口号
0000 0000 0000 1101 //UDP头部目的IP地址对应的进程端口号
0000 0000 0000 1111 //UDP头部UDP长度字段
0000 0000 0000 0000 //UDP头部UDP检验和
0101 0100 0100 0101 //数据字段
0101 0011 0101 0100 //数据字段
0100 1001 0100 1110 //数据字段
0100 0111 0000 0000 //数据字段+填充0字段
    
十六进制版
9913        //伪首部源IP地址前16位
0868        //伪首部源IP地址后16位
AB03        //伪首部目的IP地址前16位
0E0B        //伪首部目的IP地址后16位
0011        //伪首部UDP协议字段代表号17,前面8位是填充0
000F        //伪首部UDP长度字段
043F        //UDP头部源IP地址对应的进程端口号
000D        //UDP头部目的IP地址对应的进程端口号
000F        //UDP头部UDP长度字段
0000        //UDP头部UDP检验和
5445        //数据字段
5354        //数据字段
494E        //数据字段
4700        //数据字段+填充0字段

 En la versión binaria, no es posible hacer una suma vertical directamente desde la primera columna a la derecha, sin mencionar la suma vertical en decimal, la suma vertical en binario no es posible.

      El enfoque correcto es:
      (1) Deje que la primera fila y la segunda fila hagan la operación de complemento binario.
      De acuerdo con las reglas anteriores, cuando se encuentra 1 + 1 = 10, escriba un 1 pequeño debajo de la columna adyacente izquierda (similar a la adición de acarreo decimal anterior), y luego realice la operación de complemento binario en la columna lateral para obtener un número, si no hay acarreo , Continúe haciendo la operación de complemento a uno binario con el acarreo justo ahora, si hay un acarreo, primero escriba el 1 pequeño del acarreo debajo de la columna del lado alto adyacente y tome el dígito de las unidades para sumarle. Solo hay un caso de 1 + 1 = 10. No importa qué acarreo se agregue a 0, no habrá acarreo. Si no hay acarreo en el primer cálculo, habrá un acarreo solo cuando se genere un 1. En resumen, para cada columna, Solo habrá un acarreo como máximo una vez , por lo que no hay necesidad de preocuparse por el problema de que el acarreo cruzará las columnas. Lo que hay que tener en cuenta es no escribir números incorrectos. Por ejemplo, he escrito borradores dos veces antes de escribir este artículo, pero todavía cometo errores.
      En el caso de que haya un 1 en el dígito más alto, mueva 1 al dígito más bajo y vuelva a hacer un cálculo binario del complemento a uno, que es esencialmente el complemento.
      (2) Calcule el complemento binario de los resultados de la primera y segunda línea y la tercera línea, y así sucesivamente.
      (3) Se invierte el resultado de la operación y se obtiene la suma de control.

      En la versión hexadecimal, la cantidad de cálculo se reducirá en gran medida.Los principales pasos de cálculo son los siguientes:
      (1) Comenzando desde la primera columna a la derecha, calcule el valor de la primera columna en decimal.
      La primera columna aquí se calcula como 107, escrita en binario de 8 bits es 01101011.
      (2) Dividir en dos partes según el resultado calculado. Los 4 dígitos de la izquierda se convierten en decimal como el número agregado en la siguiente columna, y los 4 dígitos de la derecha se convierten en hexadecimal como resultado de la primera columna.
      Aquí está 610B16, la imagen está mal calculada como D, 6 es el objeto que se agregará en la siguiente operación de columna y B es el resultado de la primera columna.
      (3) Calcule el resultado de la segunda columna en decimal, agregue el acarreo de la primera columna para obtener un número decimal en la segunda columna, conviértalo en binario, juzgue según el segundo paso, y así sucesivamente.
      La segunda columna aquí es 24, y 6 es 30, que es 00011110 en formato binario de 8 bits, que es 1E. El resultado en la segunda columna es 1 y el acarreo decimal en la tercera columna es 1. Entonces se puede calcular que el resultado de la tercera columna es 6, y el acarreo decimal es 4.
      (4) Después de calcular el resultado decimal final a partir del dígito más alto, al convertirlo en binario, los 4 dígitos de la derecha se utilizan como resultado final y el 4 de la izquierda se desplaza a la siguiente columna. Utilice el resultado obtenido en el paso anterior 96EB y agregue 0010 para obtener el resultado final. El último paso está mal y no debe descartarse.
      El resultado final es 96ED.
      (5) Invierta el resultado para obtener el código de verificación.
      El código de verificación es 6912.

      Bueno, esta vez propuse primero una solución a este problema específico. Si tengo tiempo, necesito ordenar los conocimientos sobre el código original, el código inverso y el complemento de la computadora.

Supongo que te gusta

Origin blog.csdn.net/qq_36171263/article/details/100335730
Recomendado
Clasificación