TCP是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了数据的传输有序,这是通过一个序列号和确认号来保证的。
序列号的作用:
TCP将应用层数据和管理数据的每一字节进行顺序编号,序列号用于指出本报文段携带数据的第一个字节的序列号,(SYN,FIN等算作一个字节数据)
确认号的作用:
通信双方采用确认号来对收到的数据进行确认,该确认号之前(不包括该确认号)的所有数据均已正确收到,希望下次接收序列号为该确认号的数据。
TCP建立过程:
NO | Direction | Type | Sequence NO. | ACK NO. |
1. | C-->S | SYN | Random1 | 0 |
2 | S-->C | SYN,ACK | Random2 | SN1+1 |
3 | C-->S | ACK | SN1+1 | SN2+1 |
TCP数据传输:
NO | Direction | Type | Sequence NO. | ACK NO. |
4 | C-->S | PSH,ACK | SN3 | ACK3 |
5 | S-->C | ACK | SN2+1 | SN4+Data_length |
TCP断开连接:
NO | Direction | Type | Sequence NO. | ACK NO. |
6 | C-->S | FIN,ACK | SN4+ Data_length | SN5 |
7 | S-->C | ACK | SN5 | SN6+1 |
8 | S-->C | FIN,ACK | SN6 | ACK7 |
9 | C-->S | ACK | SN6+1 | SN6+1 |