Problem: Your checksum is based on ``8 bit words'' (not 16 bit words as in the Internet). The following ``message'' must be sent: 10101100 00110011 1101 Show all checksum computations at sender side and destination side. 1. At sender side: add zeros until you have a multiple of 8 bits. (An integer number of ``words''): 10101100 00110011 11010000 (three 8-bit words). 2. At sender side: add these words using 0ne-s complement arithmetic. 10101100 00110011 + (one's C) -------- 11011111 11011111 11010000 + (one's C) -------- 110101111 -> 10110000 3. At sender side: take ``one's complement'': 01001111 (This is the checksum) 4. Send the message: 01001111 10101100 00110011 1101 . (Here we assumed the sender puts the checksum at the beginning. That need not be the case: It can be the beginning, or some special location agreed on in the protocol. We also assumed the sender does not include the added zeros. That need not be the case. If the added zeros are sent additional information must be sent to tell the destination which zeros must be dropped. Also this is part of the protocol.) 5. At the destination: Add the 4 8-bit words 10101100 00110011 11010000 01001111 (in one's C). (Note I put the checksum at the end. Order does not matter. You can take my word for that.) This is true whatever the decisions were in 4 above. We already know the sum (in one's complement) of the first three. That is 10110000 . So left over: 10110000 01001111 + (one's C) -------- 11111111 6. At the destination: check that the sum equals 11111111 (-0 in one's C). Correct! The message is accepted.