A method of communicating through a free space optical system, comprising: sending (302, 312) a first optical signal including a header, a data block, and a cyclic redundancy check from a sending FSO node and storing data corresponding to the first optical signal in a first memory of the sending FSO node; decoding (304, 310) the first optical signal by a receiving FSO node to determine a possible symbol assignment for the first optical signal; determining a first level of confidence of the possible symbol assignment for the decoded optical signal; sending a retransmission request, in a second optical signal, by the receiving FSO node if the first level of confidence is below a threshold level, wherein the second optical signal is sent with forward error correction code and the header is transmitted with a higher FEC coding gain than a data block of the second optical signal; waiting a delayed time interval, by the sending FSO node, before sending a third optical signal in response to the retransmission request, wherein the delayed time interval is based on channel conditions; sending the third optical signal corresponding to the data stored in the first memory by the sending FSO node; decoding the third optical signal by the receiving FSO node to determine the possible symbol assignment for the third optical signal; determining a second level of confidence of the possible symbol assignment for the decoded third optical signal; and sending a transmission confirmation by the receiving FSO node if the second level of confidence is above the threshold level, the transmission confirmation confirming the possible symbol assignment. sending (302, 312) a first optical signal including a header, a data block, and a cyclic redundancy check from a sending FSO node and storing data corresponding to the first optical signal in a first memory of the sending FSO node; decoding (304, 310) the first optical signal by a receiving FSO node to determine a possible symbol assignment for the first optical signal; determining a first level of confidence of the possible symbol assignment for the decoded optical signal; sending a retransmission request, in a second optical signal, by the receiving FSO node if the first level of confidence is below a threshold level, wherein the second optical signal is sent with forward error correction code and the header is transmitted with a higher FEC coding gain than a data block of the second optical signal; waiting a delayed time interval, by the sending FSO node, before sending a third optical signal in response to the retransmission request, wherein the delayed time interval is based on channel conditions; sending the third optical signal corresponding to the data stored in the first memory by the sending FSO node; decoding the third optical signal by the receiving FSO node to determine the possible symbol assignment for the third optical signal; determining a second level of confidence of the possible symbol assignment for the decoded third optical signal; and sending a transmission confirmation by the receiving FSO node if the second level of confidence is above the threshold level, the transmission confirmation confirming the possible symbol assignment.