Fork me on GitHub

【TCP/IP详解 卷1:协议】 第18章TCP连接的建立与终止

T C P是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。 

RST:复位连接,将连接重置,一般用在异常关闭

发送第一个S Y N的一端将执行主动打开(active open),另一端执行被动打开( passive open),

建立连接超时,经测试为,1,2,4,8,16,32,

四次挥手的时候,两个方向的断开是独立的,每个方向发送一个FIN,对方回复一个ACK,但同时,TCP规定ACK可以捎带在其他数据包当中,所以你看到的主动断开连接一方本应收到的ACK,是被对方的FIN包捎带过来的,就变成了三个包。并不是所有的情况下都是这样,典型的一种情况是,主动断开的一方发送FIN之后,被动一方仍然有数据要继续发送,就会先ACK这个FIN,然后继续发送数据(在此过程中主动断开一方仍然会继续ACK这些数据),直到数据发送完毕之后再发送FIN并接收对方的ACK

T C P提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓的半关闭。正如我们早些时候提到的只有很少的应用程序使用它。如果应用程序不调用c l o s e而调用s h u t d o w n,且第2个参数值为1,则插口的A P I支持半关闭。

半关闭的一个例子,就是Unix的 rsh(1) 在另一个系统上执行命令,输入和输出都是TCP连接。

T I M E _ WA I T状态也称为 2 M S L等待状态。

一个T C P连接由一个 4元组唯一确定:本地 I P地址、本地端口号、远端 I P地址和远端端口
号。无论何时关闭一个连接,一端必须保持这个连接,我们看到 T I M E _ WA I T状态将处理这个
问题。处理的原则是执行主动打开的一端在进入这个状态时要保持的时间为 T C P实现中规定
的M S L值的两倍。

异常终止一个连接

一方关闭后,Connection reset by peer: socket write error

异常关闭一方,发送RST复位连接,另一方如果进行操作报上面的错误

一个同时打开的连接需要交换 4个报文段,比正常的三次握手多一个。

呼入连接请求队列

正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接已被 T C P接受(即三次握手已经完成),但还没有被应用层所接受。注意区分 T C P接受一个连接是将其放入这个队列,而应用层接受连接是将其从该队列中移出,测试50,多的连接将超时或者拒绝

 

posted @ 2017-07-02 18:06  已往之不谏  阅读(2661)  评论(0编辑  收藏  举报