TCP连接管理
2017-03-04 11:24:37 0 举报
AI智能生成
TCP连接管理和保活机制
作者其他创作
大纲/内容
TCP选项
MSS:最大段大小:TCP协议所允许的从对方接收到的最大报文段,只记录TCP数据的字节数而不包括头部,当连接建立的时候,双方都要在SYN报文段的MSS选项中说明自己允许的最大报文段大小,默认536字节
子主题
选择确认选项:SACK,SACK提供了这样的一种功能:能在报文段丢失或者遗漏时帮助发送端更好的进行重传的工作
SACK包含了接收方已经成功接收的数据块的序列号范围
时间戳选项和防回绕序列号:TSOPT,2个4字节的时间戳数值,可以被发送端用来估算TCP连接的往返时间
发送方将一个32位的数值填充到时间戳数值字段(TSV),接收端将收到报文时的时间戳数值填充到第二部分的时间(称为TSER)
也为接收方避免接收到旧报文与判断报文的正确性提供了方法,称为防回绕序列号
例如发送端正常传送了包A,B,C对应的时间戳分别是1,2,3。然后B没有收到确认信号,重传了B。接着服务器又收到了B。若B的时间戳小于最近的时间戳数值(也就是3),则表明该包是旧的报文,可以丢弃。
不要求2台主机时钟同步
估算TCP连接往返时间主要用于设置超时时间
用户超时选项(user_timeout)
TCP发送者在确认对方未能成功接收数据之前愿意等待该数据ACK确认的时间(未广泛使用)
认证选项
用户替代较早期的TCP-MD5加密机制,为针对TCP欺骗攻击提供抵御措施
1.一个tcp连接由一个4元组构成,分别是连接两端IP+端口
3次握手
1.客户端发送SYN报文段给服务端
客户端进入了 SYN_SENT状态
2.服务端接收到报文后,响应一个ack(=syn+1),以及自己的一个SYN,也就是发送ACK+SYN给客户端
服务器进入了 SYN_RCVD状态
3.客户端接收到服务器发来的SYN,响应一个ACK给服务器。这样就完成了3次握手
发送端发送该包之后进入了ESTABLISH阶段,接收端接收到该ack之后,也进入了established状态
4次挥手
1.客户端发送FIN报文段给服务器
客户端进入 FIN_WAIT_1(主动关闭) 状态
2.服务器返回ACK,表明收到关闭信号
接收到FIN信号后,服务器进入close_wait(被动关闭)状态,客户端接收到ACK后,进入FIN_WAIT_2状态
3.服务器发送FIN报文段给客户端
服务器由被动关闭转为主动关闭,进入last_ack状态。该过程主要是因为服务器收到客户端发过来的关闭请求后,通知上层应用。然后上层应用调用自己的关闭方法,服务器就由被动关闭转为主动关闭的一个状态
4.客户端收到FIN报文段后返回一个确认ACK信号,进入time_wait状态,然后过了2MSL后,进入closed状态关闭连接
time_wait状态
1.timewait状态持续2MSL(MSL代表报文段能在连接中存活的最长时间),这样避免了在一个新的连接中,由于旧连接包的延时到达影响了新连接
2.客户端发的最后一个ack包是可靠传输的,若丢失(即服务器在指定的时间内没收到该ACK,会重传FIN就会导致客户端重传ACK),会重传ACK。这样能够让客户端有时间重发ACK
子主题
TCP半关闭
半关闭大体上和4次挥手差不多,主要是在第2,3个步骤中间,接收到半关闭的一方(如服务器)可以继续发送任意数量的报文,直至传输完毕之后,服务器发送自己的FIN给客户端,表明自己完成了包的传输。最后客户端发送ACK给服务端
初始序列号
解决报文段在网络中传输存在延迟到达或者是顺序混乱的情况。所以在连接建立之前,通信双方会各自选择一个初始序列号。
初始序列号会随时间而改变,所以每一个连接的初始序列号都是不一样的,防止出现序列号重复的情况
TCP连接的脆弱性:如果选择一个合适的序列号,IP和端口,任何一个人都可以伪造出一个TCP报文段。
措施1.使序列号变得难以猜测
措施2.加密序列号
重置报文段的情景
1.针对不存在端口的连接请求(不存在是指没有进程在监听该端口)
2.终止一条连接
正常情况下,释放连接需要一方发送FIN报文,这样的释放称为有序释放。但是在任何时候,我们可以通过发送一个重置报文段来终止一条连接,称为终止释放
3.半开连接
4.时间等待错误:在一方进入time_wait状态时,收到了另一方的一些报文段,甚至是重置报文段的时候,这个状态就会被破坏,称为时间等待错误
进入连接队列
当服务器忙于其他更高优先级的进程或者正在创建新进程时,新进来的连接请求存放在连接队列。
1.首先检查系统范围的参数backlog,若处于SYN_RCVD状态的连接的数目大于该阈值,进入的连接会被拒绝
2.每一个处于监听状态的节点有一个固定长度的连接队列,其中的连接已经被TCP完全接受(完成了3次握手),但尚未被应用程序接收。如果该队列有空间,则TCP会应答连接SYN请求。如果队列中没有足够的空间分配,TCP会延迟对SYN做出响应。
若TCP始终无法抽出时间来接收那些已经被TCP接受却超出队列保存上限的连接,根据TCP正常机制,客户端的主动打开操作将会超时
长连接/短连接
短连接就是传输2端完成3次握手之后,发送完数据报即关闭了连接
长连接即在发送完数据之后,不关闭连接,而是可以用于接下来的报文传输。连接使用TCP的保活机制来维持
保活机制
默认参数
1.保活时间:2小时(每隔2小时发送一个检测报文)
2.保活探测间隔:75S
若2小时后发送报文报文(该报文丢失不会重传)时没有收到ACK,则间隔75S会再次发送。若9次之后都还没收到ACK,则服务器发起关闭请求
3.保活探测次数:9次
4种情况
1.若对方主机正常工作
发送保活报文的一端收到响应后,发送端知道对方工作正常,则会重置保活计时器(2小时),若在计时器超时前有收到报文,则在收到报文时也会重置计时器
2.对方主机已经崩溃
若对方无应答,则在过了保活探测间隔之后,会再次发送,直到过了探测次数后,发送端将认为对方主机已关闭,则连接断开
3.对方主机崩溃并重启
对方主机会响应一个重置报文,请求端会断开连接
4.主机仍在工作,但是网络传输不可达
TCP无法区分状态2和状态4,所以会关闭连接。也不用担心对方主机关闭重启。因为服务器关闭的时候,待关闭的进程会发送一个FIN报文给客户端。客户端收到后会向请求端进程报告文件结束
请求端的应用层对应上面的4种情况收到的TCP的差错报告
通常是请求端发起一个读请求,并且等待来自对方的数据
通常是请求端发起一个读请求,并且等待来自对方的数据
第一种情况下:对应用层是透明的
第2种情况:连接超时
第3种情况:连接被对方重置
第4种情况:可能是连接超时,也可能是其他信息
0 条评论
下一页