zoukankan      html  css  js  c++  java
  • TCP连接与关闭的相关概念

    MSS:最大报文段长度,表示TCP传往另一端的最大块数据的长度。当一个链接建立时,链接的双方都要通报各自的MSS。通常MSS是1024。

    TCP半关闭:TCP提供了连接的一段在结束的发送后还能接收来自另一端数据的能力。(连接的一方主动发出FIN,接着另一端对这个FIN发出ACK,如果主动方在接收到ACK后还能接收数据,它就处于半关闭状态)。

    MSL:指报文段的最大生存时间,,它是任何报文段被丢弃前在网络内的最长时间。(当TCP执行一个主动关闭,并发回最后一个ACK,该链接必须在TIME_WAIT状态停留的时间为2倍的MSL,这样可以让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时重发最后的FIN),这种2MSL等待的另一个结果就是这个TCP连接在2MSL等待期间,定义这个连接的插口即客户的ip和端口号、服务器的ip和端口号不能再被使用,这个连接只能在2MSL结束后才能再被使用)。

    RST:复位报文段,一般说来,无论何时一个报文段发往基准的连接( referenced connection)出现错误,T C P都会发出一个复位报文段(这里提到的“基准的连接”是指由目的 I P地址和目的端口号以及源 I P地址和源端口号指明的连接。)产生复位的一种常见情况是当连接请求到达时,目的端口没有进程正在听。

    半打开连接:如果一方已经关闭或异常终止连接而另一方却还不知道,我们将这样的 T C P连接称为半打开(H a l f - O p e n)的。任何一端的主机异常都可能导致发生这种情况。只要不打算在半打开连接上传输数据,仍处于连接状态的一方就不会检测另一方已经出现异常。

    同时打开:两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。每一方必须发送一个 S Y N,且这些S Y N必须传递给对方。这需要每一方使用一个对方熟知的端口作为本地端口。这又称为同时打开( simultaneous open)。两端几乎在同时发送 S Y N,并进入S Y N _ S E N T状态。当每一端收到 S Y N时,状态变为S Y N _ R C V D,同时它们都再发S Y N并对收到的S Y N进行确认。当双方都收到 S Y N及相应的A C K时,状态都变迁为E S TA B L I S H E D。,如下图所示

    同时关闭:当用层发出关闭命令时,两端均从 E S TA B L I S H E D变为F I N _ WA I T _ 1。这将导致双方各发送一个 F I N,两个F I N经过网络传送后分别到达另一端。收到 F I N后,状态由F I N _ WA I T _ 1变迁到C L O S I N G,并发送最后的 A C K。当收到最后的 A C K时,状态变化为T I M E _ WA I T。如下图所示

    呼入连接请求队列:一个并发服务器调用一个新的进程来处理每个客户请求,因此处于被动连接请求的服务器应该始终准备处理下一个呼入的连接请求。那正是使用并发服务器的根本原因。但仍有可能出现当服务器在创建一个新的进程时,或操作系统正忙于处理优先级更高的进程时,到达多个连接请求。正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接已被 T C P接受(即三次握手已经完成),但还没有被应用层所接受。应用层将指明该队列的最大长度,这个值通常称为积压值 ( b a c k l o g )。它的取值范围是0 ~ 5之间的整数,包括 0和5(大多数的应用程序都将这个值说明为 5)。当队列请求超过该值时,tcp将对新来的请求不做任何回应。

  • 相关阅读:
    一个好的时间函数
    Codeforces 785E. Anton and Permutation
    Codeforces 785 D. Anton and School
    Codeforces 510 E. Fox And Dinner
    Codeforces 242 E. XOR on Segment
    Codeforces 629 E. Famil Door and Roads
    Codeforces 600E. Lomsat gelral(Dsu on tree学习)
    Codeforces 438D The Child and Sequence
    Codeforces 729E Subordinates
    【ATcoder】D
  • 原文地址:https://www.cnblogs.com/mingyao123/p/7340358.html
Copyright © 2011-2022 走看看