1.基本概念
由于TCP是一个面向连接的协议,无论在哪一方发送数据之前,都必须先在双方之间建立连接,接下来我们就讨论建立连接的具体过程
2.建立TCP连接
如下图所示:
1.首先请求端发送一个序列号为1(表明该方的起始序列号为1)的SYN段,此时由于连接还未建立成功,所以携带的数据为0,并前发送端还告诉接收端它所能接收的最大报文段mss
2.接收端收到SYN段后,也给对方回一个SYN端,告知对方它的其实序列号为5并携带给对方回的ack,同时也告诉对方它所能接收的最大报文段mss
3.请求端在收到对方携带ack的SYN之后也给对方发一个ack,此时请求方以确定了与对方建立好了联系,所以此时是数据段是可以携带数据的,至此TCP的三次握手以完成,由TCP连接的俩端就可以进行通讯了
注意点:当一端建立连接时,所发送的SYN,也包含了此端的一个初始序号,下图的俩端的初始序号分别为1和5,此初始序号是由复杂算法随机产生的
2.TCP连接的终止
如上图所示
1.首先终止端发出一个FIN端,该段的序号为2.接收端收到后,给其发送一个ack还有一个携带ack的FIN段,当发送端收到此段之后,接收端最后发个确认,连接即终止
注意点:为啥终止连接要4次挥手,主要原因是,建立连接后数据是双向传递的,所以必须得把俩端的数据流动都给关掉,则每一端都得发一个自己的FIN以及一个确认收到对方FIN的ack,所以终止连接得4次挥手
3.TCP连接建立超时
有时候接收方主机发生故障,当发送方给其发送TCP连接请求时,在对方收不到的情况下,发送端并不会无限的给其发请求,而是根据超时时间来不定时的发送请求,当然超时时间也是有最长时间限制的,一般为75S超过这个时间,发送端将放弃连接
4.最大报文长度
最大报文长度又称MSS表示表示TCP可以给对方传的最大数据段长度,前面的那张途中,在建立连接时,所发的SYN中就包含了MSS,一般大小为1024
5.TCP的半关闭
TCP提供了连接在一端在结束它的发送后,依然可以接收对面的数据,只是不能在发送数据了,我们可以通过应用程序来控制完全关闭与半关闭,调用close(),实现的是完全关闭,调用shutdown()实现的就是我们所说的半关闭,半关闭在大多数情况下不常用
6.TIME_WAIT状态
TIME_WAIT状态也称为2MSL等待状态,MSL为一个TCP报文段的最大生存时间,之所以有这个状态主要是为了防止迟来的报文段没有被收到