初识TCP
TCP(Transmission Control Protocol):传输控制协议。
TCP特点:
1. 面向连接的。
2. 提供可靠性,实现了丢失重传。RTT的估算。
3. 通过给所发送数据的每一个段管理一个序列号进行排序。
3. 提供流量控制和拥塞控制:通告窗口、拥塞窗口。
4. 连接是全双工的。
TCP协议数据段格式
字段说明:
HLEN:首部长度,以4字节(32位)为单位。tcp数据段首部包括固定和变长两部分;
窗口:为通告窗口;
URG位:如果使用紧急数据指针,则将这一位设为1
ACK位:如果确认序列号有效,则设为1;
PSH位:表示”推”数据,如果这一位设置成1,表示希望接收方在接收到这个数据段之后,将它立即传送给高层应用程序,而不是缓存起来。
RST位:表示请求重置连接。当TCP协议接收到一个不能处理的数据段时,向对方TCP协议发送这种数据段,表示这个数据段所标识的连接出现了某种错 误,请求对方TCP协议将这个连接清除。 SYN位:请求建立连接。tcp用这种数据段向对方tcp协议请求建立连接,在这个数据段中,tcp协议将它选择的初始序列号通知对方,并且与对方协议协商最大数据段的大小。
FIN位:请求关闭连接。当协议收到对这个数据段的确认后,成功关闭写方向的连接,因为tcp连接是全双工的,在发送了FIN数据段之后,它仍能接收数据,直至对方也发送FIN数据段。
紧急指针:如果设置了URG位,这个字段指出紧急数据相对于这个数据段的开始序列号的偏移量。tcp协议只提供一字节的紧急数据,但由于历史原因,紧急指针指向 紧急数据的下一个位置。
有3种情况可能导致TCP协议发送RST数据段 (1)SYN数据段指定的目的端口处没有接收进程等待; (2)TCP协议想放弃一个已经存在的连接; (3)TCP接收到一个数据段,但是这个数据段所标识的连接不存在。接收到RST数据段的TCP协议立即将这条连接非正常断开,并向应用程序报告;
TCP三次握手过程如下
三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。
以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号J和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号k、对客户端的序列号的确认J+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号k+1和序号J+1的ACK报文,一个标准的TCP连接完成。
TCP释放连接的过程如下: