TCP协议详解(连接与终止)
传输控制协议(TCP)
介绍
TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流,具有如下特性:
(1)可靠性
当TCP向另一端发送数据时,它要求对端进行确认,否则会重传数据并进行等待,多次失败后才会放弃。当然,TCP并不能保证数据一定会被对方接收,只是保证了数据的传输可靠性和进行故障通知。
(2)流量控制
在任何时刻,TCP都通过流量窗口去告知对端它一次能够从对端接收多少字节的数据,即接收缓存区中当前可用的空间量,保证发送端发送的数据不会溢出。当接收到来自发送端的数据时,窗口大小就减小;当接收端从缓存区读取数据时,窗口大小就增大;故当TCP对应某个套接字的接收缓存区填满时,必须等待接收端从缓存区读取数据后,方能继续接收数据。
(3)全双工
TCP的连接是全双工的,即应用可以同时既发送数据又接收数据。因此,TCP必须为每个数据流方向提供跟踪诸如***和通告窗口大小等状态信息。当然,建立全双工连接后,根据需要可以转换成单工连接(半关闭,之后我们再进行讨论)。
TCP的连接和终止
下面我们将讨论TCP连接如何建立与终止。
TCP连接(三次握手)
1) 服务器准备好接收外来的连接。主要通过调用socket
、bind
、listen
这三个函数来完成,称为被动打开。
2) 客户端通过调用connect
函数发起主动打开,向服务器发送一个SYN信号,告诉服务器该客户端初始***。SYN信号格式:通常SYN分节不带数据,其所在IP数据报只含有一个IP部首、一个TCP部首及可能有的TCP选项。
3) 服务器确认(ACK)客户端的SYN,同时返回一个SYN(服务器的初始***)和ACK(确认)。
4) 客户端确认服务器的SYN。
TCP终止(四次挥手)
终止一个TCP连接通常需要四布。
1) 客户端先调用close
(主动关闭),发送一个FIN分节。
2) 服务器接收到FIN分节执行被动关闭,该接收也作为文件结束符放在接收数据缓存的最后,意味着服务器在相应连接上再无额外数据接收。至此,客户端停止向服务器发送数据。
3) 一段时间后,接收到文件结束符的服务器将调用close
关闭套接字,同样的,发送FIN分节。
4) 客户端接收到FIN并确认,即完成TCP连接的终止。
代码示例
未完待续。。。