TCP如何进行流量控制? 可能存在什么问题?
设置接收缓冲区, 实时通告流量缓冲空间
糊涂窗口综合征. 当接收方处理数据十分缓慢时, 接收方通告0窗口, 有效数据传输效率特别低。每个传输的报文,携带的有效数据太少,都是“大头娃娃”。
消除办法: 发送方, 报文段一定长度再发送(Nagle算法)
消除办法: 接收方, 阻止发送窗口滑动, 当流量缓存空间很小时, 就一直发送0窗口.
TCP为什么采用三次握手建立链接? 四次挥手断开连接? 建链断链的序号如何变化?
本质上是因为要在不可靠的信道上建立可靠的链接。
Server知道client的初始状态, server的初始状态client知道, 且server知道client已经知道server的初始状态.分别对应三次握手阶段。
只有采用三次握手可以减少服务端的资源浪费。解释如下:例如,客户端向服务端发送请求同步报文A,因为网络阻塞等原因,服务端没有收到同步报文A,所以没有发送同步确认报文。过了一段时间,客户端没有收到服务端的确认报文,重新向服务端发送请求同步报文B,服务端接收到报文B后,向客户端发送同步确认报文,客户端接收到确认报文后,向服务端发送确认报文,建立连接。数据传输完毕后,连接断开。客户端进入close状态,此时服务端收到之前的报文A,向客户端返回同步确认报文。如果使用两次握手,服务端回应后不确认客户端的状态,连接建立成功。服务端会长时间等待客户端发送数据,连接长期保持,会造成资源浪费。当多个客户端产生这种情况,服务器就会等待多个客户端的响应,连接数量过多,之后的客户端请求,服务器无法响应。造成服务器处于瘫痪状态。 只有使用三次握手,当服务端收到确认报文后,保证当前时刻,客户端可以发送数据时,才能建立有意义的连接。当客户端一段时间不发送数据时,服务器应自动断开连接,来节省自身连接的客户端数量,减少资源的浪费。
https://www.cnblogs.com/realjimmy/p/12930797.html
为什么四次挥手?
假设是客户端发起终止连接。
客户端发送fin包,服务器告诉客户端收到fin,并将剩余未发送完的数据发给客户端。发完后,服务器发送finack包,客户端接受后发送ack并进入延时等待,防止ack在信道中丢失,导致服务器迟迟无法关闭。(服务器没收到ack会重新发送finack,这样客户端就能重新发ack并刷新延时计时器)。
以下内容为均为课上记录,课下没来得及整理
网络拥塞控制有哪些策略?
流量感知路由
准入控制
流量调节
抑制分组
背压
负载脱落(即丢包): 也设计一种判定策略, 扔新数据or旧数据, 根据数据类型决策, 如视频数据, 丢旧数据
如何改进TCP拥塞控制过程以便提高TCP协议吞吐量?(小组讨论, 开放问题)
动态调节窗口大小
TCP拥塞控制改进?
(为什窗口要膨胀?)
(为什么出现三次重复确认?)缓存已有三个段提前到达接受端