This dissertation highlights the benefits of cooperation in various multi-node networks. We first consider a wireless network with a single user and a single destination and draw conclusions about when is it advantageous to use the available relay(s) and when is it advantageous to transmit directly. Using capacity (for the AWGN environment) and outage probabilities (for a fading environment) as metrics for comparison, relative advantages of multi-hop (two-hop) routing over one-hop routing as a function of required end-to-end spectral efficiency and relay locations are highlighted. It is shown that if the desired end-to-end rate is above a critical spectral efficiency, it is always preferable to use direct (one-hop) transmission regardless of where the relays are located. We later consider a wireless system consisting of two user nodes and a destination node and discuss a cooperative (trellis pruning) strategy used by the two source nodes in delivering their packets to the common destination. In this scheme, each partner multiplexes local data with relayed data and convolutionally encodes the resulting bitstream prior to transmission; the other partner then uses its knowledge of the relayed data to prune edges from the code trellis, thereby decoding at a lower (and more robust) rate. The destination observes two copies of each source's data -- one transmitted as local information, the other transmitted as relayed information -- and employs iterative decoding to recover the same. This proposed scheme is generalized to a larger cluster of users cooperating to convey their data to a common destination. Finally we compare the performance of convolutional codes to that of LDPC block codes with identical decoding latencies. The decoding algorithms considered are the Viterbi algorithm and stack sequential decoding for convolutional codes and iterative message passing for LDPC codes. It is shown that, at very low latencies, convolutional codes with Viterbi decoding offer the best performance, whereas for high latencies LDPC codes dominate -- and sequential decoding of convolutional codes offers the best performance over a range of intermediate latency values. For sequential decoding, both blockwise and continuous resynchronization procedures are used to allow the decoder to recover the correct path.