SO_REUSEADDR
选项的配置,能直接复用处于TIME_WAIT状态的端口 。
四次挥手的原因:而在释放连接时需要四次是因为TCP连接的半关闭造成的 。由于TCP是全双工的(即数据可在两个方向上同时传递),所以,每个方向都必须要单独进行关闭,单方向的关闭就叫半关闭 。
12.6.3 同时打开同时打开需要交换4个报文段 , 比正常的三次握手多一个 。没有任何一端称为客户或服务器 , 因为每一端既是客户又是服务器 。

文章插图
12.6.4 同时关闭在标准的情况下通过一方发送FIN来关闭连接,但是双方都执行主动关闭也是有可能的 。

文章插图
12.6.5 半关闭半关闭:TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力 。
如果应用程序不调用close()而调用shutdown(),且第2个参数值为1,则插口的API支持半关闭,举个例子:

文章插图
12.7 窗口TCP数据中每一个字节都有自己的编号SEQ,而窗口就是能接收或发送的SEQ段 。
12.7.1 窗口大小通告就是TCP报文段首部的窗口字段 。
用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的 。
TCP的选项字段中还包含了一个TCP窗口扩大因子,option-kind为3,option-length为3个字节,option-data取值范围0-14 。
窗口扩大因子用来扩大TCP窗口,可把原来16bit的窗口,扩大为31bit 。具体在TCP选项字段分析 。
12.7.2 拥塞窗口拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制 。
拥塞窗口和发送窗口去MIN值 , 就是实际能发送的窗口大小 。
12.7.3 发送窗口参考LWIP:TCP 控制块中关于发送窗口的成员变量有 lastack、snd_nxt、snd_lbb、snd_wnd:
- lastack 记录了已经确认的最大序号;
- snd_nxt 表示下次要发送的序号;
- snd_lbb 是表示下一个将被应用线程缓冲的序号;
- snd_wnd 表示发送窗口的大小 。
- 发送窗口是TCP层当前可以发送的SEQ号段 。
- 窗口snd_wnd如果填满了数据,则不能在发送了,等发送窗口往右移动时,才能发送新数据 。
- 而窗口内的数据可以有已经被ACK的,只是最小未被ACK的SEQ号就是窗口最左 。

文章插图
12.7.4 接收窗口参考LWIP:TCP 控制块中关于接收窗口的成员变量有 rcv_nxt、rcv_wnd、rcv_ann_wnd、rcv_ann_right_edge:
- rcv_nxt:下次期望接收到的数据SEQ;
- rcv_wnd:接收窗口的大?。?/li>
- rcv_ann_wnd:窗口大小通告值,即是告诉发送方窗口的大?。?/li>
- rcv_ann_right_edge:记录了窗口的右边界 。
- 接收窗口是TCP层当前能够接收的数据段,用于流量控制 。一般用接收窗口右边界表示当前能接收到的最大SEQ号-1的数据 。
- 在收到对端数据后,接收窗口会减少;在应用层读走数据后,接收窗口会增加 。但是并不是每次增减都会通告到对端,因为这样会出现糊涂窗口综合症 。

文章插图
12.7.5 糊涂窗口综合症12.7.5.1 概念TCP协议栈基于滑动窗口动态调整机制进行流量控制会导致一种被称为“糊涂窗口综合症SWS (Silly WindowSyndrome)"的状况 。
糊涂窗口综合症SWS:当TCP接收方通告了一个小窗口,并且TCP发送方立即发送数据填充该小窗口时,就会产生糊涂窗口 , 有效载荷比例降低 。
当TCP的双方都是以小窗口通告和小报文段发送来实现通信,会使TCP数据流包含很多非常小的报文段,而不是满长度的报文段;而小单元报文段中IP首部和TCP首部这些字段占了大部分空间,会导致真正有效的TCP数据却很少,因此小报文的传输浪费了网络的大量带宽,从而网络性能严重下降 。
12.7.5.2 原因糊涂窗口综合症可以由TCP连接双方中的任何一方引起:
- 接收方:接收方通告一个小的窗口(而不是一直等到有大的窗口时才通告) 。
- 发送方:发送方发送少量的数据(而不是等待更多的数据以便发送一个大的报文段) 。
推荐阅读
- vulnhub靶场之DOUBLETROUBLE: 1
- 亚索怎么玩呢(亚索大招怎么才能释放)
- 如何打好亚索(亚索的打法技巧)
- 无期迷途钻石获取途径有哪些
- 传奇九层妖塔祖玛阁怎么走(传奇祖玛阁攻略)
- 【深入浅出 Yarn 架构与实现】2-4 Yarn 基础库 - 状态机库
- 【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
- DNF里浓缩的异界精髓怎么获得(浓缩的异界精髓作用)
- 小孩沉迷手机网络游戏怎么办(儿童玩手机游戏沉迷怎么办)
- 带你了解NLP的词嵌入