The data is tranferred over RXD (receive) and TXD (transmit). RTS (request to send) and CTS (clear to send) are used for optional "hardware" flow control. I disagree with Majenko in that DSR/DTR are not used for flow control. Like the other remaining lines, these were used for old fashioned external modems. The extra lines would tell the computer when the phone was on/off the hook, whether it was ringing, whether the modem had "carrier", etc. Basically ignore all those lines.
RTS/CTS can be handy for flow control, but keep in mind they are only sparesely implemented by other devices. PCs can be made to use them if the software sets up the port that way. Unless the program you want to communicate specifically says it uses RTS/CTS or "hardware handshaking", you should assume it doesn't. That means it sends characters whenever it feels like.
Another issue to watch for with hardware handshaking is that just because you tell a PC to stop sending, it may still send up to 16 characters before it actually stops. Some implementations only cause the driver to stop sending characters to the UART hardware, which has a 16 byte buffer it will continue to empty. When talking to another PC this is no problem since the other side will have much more than a 16 byte input buffer. If you're on a small micro, you have to make sure you can tolerate that.
What I do is in the general case assume I have only a bi-directional stream of bytes without any out of band signalling like RTS/CTS. If I need to make sure the micro doesn't get overrun, I build that into the protocol. For example, the host may not be allowed to send a new command until some ACK is received for the previous. Lots of schemes are possible.
By assuming the only channel with the remote device is a bi-directional stream of bytes, it allows easier porting to other underlying connections. A future version of your product could then use TCP or USB or something else to communicate with only the lower layers of the software and firmware needing to change. A bi-directional stream of bytes is the lowest common protocol that just about any link can be counted on to support somehow. That's what TCP does natively, for example. With USB, you can reserve one bulk endpoint in the in and out directions and that's what you have.