1、tcp的特点
tcp是一个面向连接的、端到端的、提供高可靠性的服务的传输层协议。主要有以下特点
1)面向数据流
2)虚电路连接
3)有缓冲的传输
4)无结构化的数据流
5)全双工连接
2、tcp连接
tcp连接的建立基于客户端/服务端模式,主动建立连接的为客户端,被动建立连接的为服务端,TCP使用三次握手建立连接。
首先介绍下几个符号
SYN:同步序号用来发起一个连接
ISN(init sequence number):属于SYN,初始序号(seq=x)
ACK:确认序号,每次返回的都是ack=seq+1.
三次握手过程如下:
1)首先客户端发送SYN报文段,指明客户端打算连接的服务器端口以及初始序号ISN(seq=x)
2)服务器接收到报文段后,服务端发送初始序号ISN(seq=y)的SYN报文段作为应答,并包含ACK(ack=x+1)确认号信息,告诉客户端自己已接收到第一个syn报文并同意建立这个链接。
3)客户端得到报文段后,发送确认报文段(ACK=y+1),进行确认,通知目的主机以成功建立了双方所同意的这个链接。
(1)通过上面的解析,我们发现进行tcp链接,主要是seq值得生成,其实在这里我们需要明白seq的选值很重要,如果简化为一,那么黑客可以简单的伪造seq,建立三次握手,只有通过复杂的seq,才能有效的防止黑客通过伪造seq进行连接。
(2)mss协商,我们说tcp传输是有缓冲的传输,因此一个连接的两端必须协商一个最大报文段长度值,tcp软件利用选项字段来指定本段所能接收的mss。
4、tcp连接正常关闭。
tcp采用四次挥手关闭连接,首先进行关闭的一方执行主动关闭,而另一方则执行被动关闭,过程如下
关闭连接的详细步骤如下
1)进行关闭的一方在发完全部数据并等待确认到达后,发送一个FIN报文段来执行主动关闭(此时处于半关闭,还能接收和发送确认号)
2)另一方接收FIN报文段,先发回一个确认ack,同时通知应用程序整个通信已结束后面没有数据了(半关闭,还能发送和接收确认号)
3)当应用程序的处理过程完后,关闭它的连接,发送fin报文段.
4)接收到信息后,发送最后一个确认ack。
上面提到了半关闭,现在我就解释下半关闭,tcp提供了半关闭能力。所谓半关闭就是指连接的一端在结束它的发送过程后还具有接收来自另外一端数据的能力,也就是说在上述步骤2后,接收fin报文段的一端(网点2)还可以继续发送数据,而网点1还可以继续接收数据,并发送确认。
tcp异常关闭
tcp采用连接复位来执行异常关闭,发起端发出一个ret报文段,此时连接双方立即停止传输,关闭连接,并释放所用的缓冲区相关资源。
tcp半开放连接检测
假设服务器发现在一条tcp连接上很长一段时间没有数据传输了,则可能有狠多情况,如长时间没有数据传输,或者客户端已经关机
服务器对于每条连接都要维护相应的记录,这需要耗费内存空间,如果客户端异常关机,那么在维护这条记录就没有意义了,,为了解决这个问题,tcp引入了保活定时器,(通常是2小时),理解为心跳机制把,一旦服务器发现某条连接有2个小时没有通信,则会向客户端发送探查报文段,并根据相应情况处理。
1)正常工作并且从服务器可达(服务器就把保活定时器重新定位)
2)客户端奔溃,(终止连接)
3)客户端奔溃后重新启动,发送rst报文,然后终止连接
4)客户端正常工作,但从服务器不可达,(终止连接)