• 10.TCP连接的建立与终止


     
    1.建立连接协议
    (1)请求端发送一个SYN段指明客户打算连接的服务器的端口,移机初始序号ISN。这个SYN段为报文段1。
    (2)服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。
    (3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认。
    这三个报文段完成连接的建立,这个过程也称为3次握手。
    2.连接终止协议
    终止一个连接需要进行4次握手,这是由TCP的半关闭造成的。
    当客户机完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。当服务器也想关闭连接时,会向客户机发送一个FIN,客户必须发回一个确认,并将确认序号设置为收到的序号加1。你
    3.最大报文段长度
    最大报文段长度MSS表示TCP传往另一端的最大块数据的长度。当一个连接建立时,双方都要通告各自的MSS。如果没有分段发生,MSS越大,每个报文段传送的数据就越多,相对TCP和IP首部就有着更高的网络利用率。MSS一般为MTU减去IP首部和TCP首部各20字节。对于 一个以太网,MSS可达1460bytes。如果目的地址不是本地地址,MSS默认为536。但是如果中间网络的MTU小于576,则MSS还会更小。
    4.TCP的状态变迁图
    5. 2MSL等待状态(TIME_WAIT状态
    MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
    当TCP执行一个主动关闭,并发回最后一个ACK之后,该连接必须在TIME_WAIT状态停留时间为2倍MSL,这样可以让TCP再次发送最后的ACK以防止这个ACK丢失(另一端超时并重发最后的FIN)。
    6. FIN_WAIT_2状态
    这就是著名的半关闭的状态了,客户端关闭了到服务器方向上的连接,还能接受服务器方向发送的数据。如果服务器一直不关闭服务器到客户端的TCP连接,客户端会一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,直到应用层来决定关闭这个状态。
     
    7.RST报文段的作用
    RST报文段能够中途释放一个连接,称为异常释放(当应用程序出现异常时发送RST报文段);RST报文段还能够检测并关闭半打开连接。
    异常终止对于程序的优点:
    (1)丢弃任何待发数据并立即发送复位报文段;
    (2)RST的接收方会区分另一端是异常关闭还是正常关闭。
    收到RST报文段表示另一端已经终止了连接,本机不会产生任何响应,而是直接终止该连接,并通知应用层连接复位。
    8.同时打开
    TCP可以处理同时打开,对于同时打开它仅仅建立一条连接。
    以下是同时打开建立连接的状态变迁图:
    9.TCP服务器设计
    TCP服务器根据客户端的socket区分不同的对话,TCP服务器一般使用相同的端口号。TCP服务器可以限定本地IP地址和远端IP地址。因为TCP服务器要支持并发连接,采用了呼入连接请求队列。伯克利的TCP呼入连接请求队列实现如下:
    (1)正等待连接请求的一端有一个固定长度的连接队列,此队列中的连接已被TCP接收,但没有被应用层接收;
    (2)应用层会指明队列的最大长度(积压值);
    (3)连接请求到达时,TCP采用算法,根据当前连接队列中的连接数确定是否接受这个连接;
    (4)对于新的连接请求。若该TCP监听的端点的连接队列中还有空间,TCP模块将对SYN进行确认并完成连接的建立;
    (5)如果对于新的连接请求,若连接队列没有空间,TCP将不理会收到的SYN,也不发回任何报文段。
     
  • 相关阅读:
    MySQL之架构与历史(二)
    MySQL之架构与历史(一)
    MySQL之体系结构与存储实例
    Redis实现之复制(二)
    Redis实现之复制(一)
    选项卡
    滑动效果
    选择器
    下拉列表
    1.__tostring()这个方法在类里可以直接输出对象。2.克隆对象的运用
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5281812.html
Copyright © 2020-2023  润新知