Old topic, but replying to this because this is the #1 search result on Google.
I don't think GSM or CDMA has anything to do with it. In this T-Mobile post here, you can see someone complaining about the same problem in texts from a T-Mobile phone to an AT&T phone. Both T-Mobile and AT&T are GSM networks, so the problem also happens in purely GSM to GSM text messages.
https://support.t-mobile.com/message/380255#380255
As best as I've been able to figure out, the problem is that SMS is limited to 140 bytes (160 characters for 7-bit ASCII text). This isn't a CDMA limitation - the GSM spec for SMS sets the message length at a maximum 140 bytes. So regardless of your carrier, if you try to send a text message longer than that, it has to be broken up into pieces. That in itself isn't a problem - the entire Internet works the same way The problem arises from two things:
- SMS is typically sent over a packet network - that is, each piece is like a separate envelope in the mail with just a destination address. Each envelope is guaranteed to get to the destination, but it's not guaranteed to take the same path as all the other envelopes. So the order you drop the envelopes in the mailbox may not be the order they arrive in at the recipient's mailbox.
- Each piece has its own timestamp, but the timestamp is just 7 bytes long (the standard is so old the term "byte" hadn't been invented yet, so they were called octets). Only one byte encodes the time in seconds, and it only does it in integer seconds (that is, all the extra values above 59 are never used).
https://en.wikipedia.org/wiki/GSM_03.40#Time_Format
This is a problem, as when a long text is broken up into 140 byte pieces, it's done almost instantly by computer and so each piece has the exact same timestamp.
There is no way to put these pieces back in the correct order again.
When you send these pieces within a single carrier's network, there's a high probability each piece will take the exact same path, so they arrive in the correct order, and your phone reassembles them in the proper order. But when you're sending texts
between carriers, there's a greater chance the pieces will arrive out of order, and you get a multi-part text whose parts are scrambled. Correcting this would require somehow encapsulating all the pieces of the text into a single packet, which means every carrier out there would have to agree on how to do this encapsulation. You might as well just create a new SMS standard at that point. (Which they kinda did with MMS - you can bypass this problem by setting the option for your phone to send long text messages as MMS. But unfortunately it doesn't work when people who don't have this option set send long text messages to you.)
The overall impression I'm getting is that we are suffering today because the folks who put together the original GSM spec weren't very competent.
- They wasted 76% of the octet's capacity by only encoding seconds as integer digits instead of fractional seconds.
- They didn't foresee the possibility of multiple SMSes being sent with the same timestamp but whose order was important. They could've added an extra octet to give each piece a sequential number - what Internet Protocols do. Heck, they could've used the extra 2 bits in the seconds octect to store the sequence number. 6 bits = 64 values, which is enough for 0-59 seconds. Leaving 2 bits (0-3) for an ordering sequence for SMSes sent in the same second.
- They enshrined TDMA as the standard. TDMA is woefully inefficient with bandwidth because it has to assign bandwidth to phones which might not use it. That's why when cellular data suddenly became important, CDMA won the GSM vs CDMA war. GSM ended up incorporating CDMA into its data spec. Most implementations of 3G data on GSM phones (HSPA, HSDPA) used CDMA or wideband CDMA. If it weren't for CDMA, the data speeds on GSM phones would probably be around 200 kbps today. Even LTE (which mostly uses OFDMA) would've come to market later because it relies on a lot of the same principles as CDMA - using orthogonal frequencies instead of orthogonal codes. So CDMA served as the proof of concept for OFDMA.