TCP Handshake over IPv6


The internet we know today heavily relies on TCP/IP to send our information around the world at lightspeed.  With more devices than ever connected to the internet (insert link to back this up, it sounded cool), using IPv4 we're soon going to run out of addresses.  And in fact if it weren't for technologies such as NAT we'd be in a stickier situation than we already are.   In preperation of running out of IP addresses, IPv6 was mustered up around 1998 by the IETF, a 128-bit addressing convention vs the old IPv4 32-bit addressing.

So that means IPv6 has been around quite a while now.  Almost 20 years, yet still IPv4 is all the rage.  Perhaps us techies have trouble letting go of what we know.  I mean why set up an AAAA record, when you only need to set up an A record right?  Why configure DNS to use  2001:4860:4860:0000:0000:0000:0000:8888 or 2001:4860:4860::8888 when you can just use 8.8.8.8 right?  Well yeah, let's save all that for another article, once I've had a beer.

I got thinking - I wonder if the TCP Handshake has changed though?  You know with all the added improvements IPv6 is meant to bring.  Has the secret handshake been updated too?

Turns out, I didn't have to think to very hard.  TCP and IP are two different protocols, 2 different layers of the OSI model and TCP/IP Model (depending on where you're from).  So in theory we should be able to swap out IPv4 for IPv6 and keeping the same old TCP we're used too.

According to the very trustworthy Wikipedia, the only subtle change when TCP and IPv6 are used together comes in the checksum calculation.
When TCP runs over IPv4, the method used to compute the checksum is defined in RFC 793:
The checksum field is the 16 bit one's complement of the one's complement sum of all 16-bit words in the header and text. If a segment contains an odd number of header and text octets to be checksummed, the last octet is padded on the right with zeros to form a 16-bit word for checksum purposes. The pad is not transmitted as part of the segment. While computing the checksum, the checksum field itself is replaced with zeros.
When TCP runs over IPv6, the method used to compute the checksum is changed, as per RFC 2460:
Any transport or other upper-layer protocol that includes the addresses from the IP header in its checksum computation must be modified for use over IPv6, to include the 128-bit IPv6 addresses instead of 32-bit IPv4 addresses.


So there you have it.
Thanks for reading.

Comments

Popular posts from this blog

Navigating the Jungle of Web Traffic: A Technical Team Lead's Guide to "I'm a Celebrity, Get Me Out of Here"

The Vital Importance of Secure Wi-Fi Networks