Skip to main content
added 76 characters in body
Source Link
grawity_u1686
  • 465.3k
  • 66
  • 977
  • 1.1k

(Some L2 and L3 features (LACP and ECMP correspondingly) actually look at higher-layer headers, but they don't outright fail when they see an unknown L4 protocol – at most I think they might perform worse that they could have. Similarly, your layer-1 interface – the Ethernet card – will often have hardware TCP checksum and segmentation offloading which won't work with modified-TCP, but that's again only a performance loss and not something critical.)

It's one of the reasons why SCTP never ended up replacing TCPreally caught on despite having several desirable features that TCP lacks, and why QUIC was designed to rely on UDP as its multiplexing layer rather than becoming its own IP-level protocol with its own port fields.

(Some L2 and L3 features (LACP and ECMP correspondingly) actually look at higher-layer headers, but they don't outright fail when they see an unknown L4 protocol – at most I think they might perform worse that they could have. Similarly, your layer-1 interface – the Ethernet card – will often have hardware TCP checksum and segmentation offloading which won't work with modified-TCP.)

It's one of the reasons why SCTP never ended up replacing TCP despite having several desirable features, and why QUIC was designed to rely on UDP as its multiplexing layer rather than becoming its own IP-level protocol with its own port fields.

(Some L2 and L3 features (LACP and ECMP correspondingly) actually look at higher-layer headers, but they don't outright fail when they see an unknown L4 protocol – at most I think they might perform worse that they could have. Similarly, your layer-1 interface – the Ethernet card – will often have hardware TCP checksum and segmentation offloading which won't work with modified-TCP, but that's again only a performance loss and not something critical.)

It's one of the reasons why SCTP never really caught on despite having several desirable features that TCP lacks, and why QUIC was designed to rely on UDP as its multiplexing layer rather than becoming its own IP-level protocol with its own port fields.

added 233 characters in body
Source Link
grawity_u1686
  • 465.3k
  • 66
  • 977
  • 1.1k

There's no help from the fact that you're using "still 99%"99% TCP" – as long as it's not 100% TCP, hosts still won't automatically know how to speak it, so it's the same as deploying a whole new protocol (like IL or SCTP). It's, and it's a similar story to past attempts of "extending" IPv4 by increasing the 32-bit address fields: it'd only be compatible with likewise extended hosts and gateways, so it's the same amount of effort as moving to a whole new protocol.

Rather than modify the basic header, a better way might be to use TCP optionsavoid having to carry the additional 16+16 bits – which still would only do something for hosts that recognize those options, but at least you're doing it in a way that currently deployed systems already expectdeploy IPv6.

(NoteBut note that the number of TCP ports available is per IP address, not globally per host – if you have two IP addresses, you can use the same port number for two different sockets, so it's easier to just add a second IPv6 address. And in theory it should be "per address-pair," so even if you run out of local ports when connecting to server A, you should still be able to use the same local ports for connections to server B...)

And if you try to avoid these problems by reusing the existing TCP protocol number for your modified-TCP, it'll make things much worse instead – firewalls will misinterpret your 32-bit port field as the original pair of 16-bit fields, etc.

Rather than modify the basic header, a better way might be to stay with standard TCP and use TCP options to carry the additional 16+16 bits – which still wouldn't help with hosts or gateways that do not recognize those options, but at least you'd be doing it in a way that currently deployed systems already expect. (Multipath-TCP is being somewhat successfully deployed this way.)

However, many of these problems would remain even if you used TCP options for the additional port bits. For example, existing NAT systems would still only look at the low 16 bits of the port number, causing confusion if e.g. ports 80 and 65616 are used at the same time.

There's no help from the fact that you're using "still 99% TCP" – as long as it's not 100% TCP, hosts still won't automatically know how to speak it, so it's the same as deploying a whole new protocol (like IL or SCTP). It's a similar story to past attempts of "extending" IPv4 by increasing the address fields: it'd only be compatible with likewise extended hosts and gateways, so it's the same amount of effort as moving to a whole new protocol.

Rather than modify the basic header, a better way might be to use TCP options to carry the additional 16+16 bits – which still would only do something for hosts that recognize those options, but at least you're doing it in a way that currently deployed systems already expect.

(Note that the number of TCP ports available is per IP address, not globally per host – if you have two IP addresses, you can use the same port number for two different sockets, so it's easier to just add a second IPv6 address. And in theory it should be "per address-pair," so even if you run out of local ports when connecting to server A, you should still be able to use the same local ports for connections to server B...)

And if you try to avoid these problems by reusing the existing TCP protocol number for your modified-TCP, it'll make things much worse instead – firewalls will misinterpret your 32-bit port field as the original pair of 16-bit fields, etc.

There's no help from the fact that you're using "99% TCP" – as long as it's not 100% TCP, hosts still won't automatically know how to speak it, so it's the same as deploying a whole new protocol (like IL or SCTP), and it's a similar story to past attempts of "extending" IPv4 by increasing the 32-bit address fields to avoid having to deploy IPv6.

(But note that the number of TCP ports available is per IP address, not globally per host – if you have two IP addresses, you can use the same port number for two different sockets, so it's easier to just add a second IPv6 address. And in theory it should be "per address-pair," so even if you run out of local ports when connecting to server A, you should still be able to use the same local ports for connections to server B...)

And if you try to avoid these problems by reusing the existing TCP protocol number for your modified-TCP, it'll make things much worse instead – firewalls will misinterpret your 32-bit port field as the original pair of 16-bit fields, etc.

Rather than modify the basic header, a better way might be to stay with standard TCP and use TCP options to carry the additional 16+16 bits – which still wouldn't help with hosts or gateways that do not recognize those options, but at least you'd be doing it in a way that currently deployed systems already expect. (Multipath-TCP is being somewhat successfully deployed this way.)

However, many of these problems would remain even if you used TCP options for the additional port bits. For example, existing NAT systems would still only look at the low 16 bits of the port number, causing confusion if e.g. ports 80 and 65616 are used at the same time.

added 233 characters in body
Source Link
grawity_u1686
  • 465.3k
  • 66
  • 977
  • 1.1k

There's no help from the fact that you're using "still 99% TCP" – as long as it's not 100% TCP, hosts still won't automatically know how to speak it, so it's the same as deploying a whole new protocol (like IL or SCTP). It's a similar story to past attempts of "extending" IPv4 by increasing the address fields: it'd only be compatible with likewise extended hosts and gateways, so it's the same amount of effort as moving to a whole new protocol.

Rather than modify the basic header, a better way might be to use TCP options to carry the additional 16+16 bits – which still would only do something for hosts that recognize those options, but at least you're doing it in a way that currently deployed systems already expect.

(Note that the number of TCP ports available is per IP address, not globally per host – if you have two IP addresses, you can use the same port number for two different sockets, so it's easier to just add a second IPv6 address. And in theory it should be "per address-pair," so even if you run out of local ports when connecting to server A, you should still be able to use the same local ports for connections to server B...)

It's a similar story to past attempts of "extending" IPv4 by increasing the address fields: it'd only be compatible with likewise extended hosts and gateways, so it's the same amount of effort as moving to a whole new protocol.

(Note that the number of TCP ports available is per IP address, not globally per host – if you have two IP addresses, you can use the same port number for two different sockets, so it's easier to just add a second IPv6 address. And in theory it should be "per address-pair," so even if you run out of local ports when connecting to server A, you should still be able to use the same local ports for connections to server B...)

It's a similar story to past attempts of "extending" IPv4 by increasing the address fields: it'd only be compatible with likewise extended hosts and gateways, so it's the same amount of effort as moving to a whole new protocol.

There's no help from the fact that you're using "still 99% TCP" – as long as it's not 100% TCP, hosts still won't automatically know how to speak it, so it's the same as deploying a whole new protocol (like IL or SCTP). It's a similar story to past attempts of "extending" IPv4 by increasing the address fields: it'd only be compatible with likewise extended hosts and gateways, so it's the same amount of effort as moving to a whole new protocol.

Rather than modify the basic header, a better way might be to use TCP options to carry the additional 16+16 bits – which still would only do something for hosts that recognize those options, but at least you're doing it in a way that currently deployed systems already expect.

(Note that the number of TCP ports available is per IP address, not globally per host – if you have two IP addresses, you can use the same port number for two different sockets, so it's easier to just add a second IPv6 address. And in theory it should be "per address-pair," so even if you run out of local ports when connecting to server A, you should still be able to use the same local ports for connections to server B...)

added 21 characters in body
Source Link
grawity_u1686
  • 465.3k
  • 66
  • 977
  • 1.1k
Loading
added 516 characters in body
Source Link
grawity_u1686
  • 465.3k
  • 66
  • 977
  • 1.1k
Loading
Source Link
grawity_u1686
  • 465.3k
  • 66
  • 977
  • 1.1k
Loading