Network

Ch07-TCP 之 可靠性机制

August 7, 2021
Network
Network

机制 说明 校验和 保证数据未被篡改 序列号 保证数据的按序到达;去重重复数据 连接管理 三次握手,四次挥手 确认应答 ACK 保证报文成功交付 超时重传 发送数据包在一定的时间周期内没有收到相应的 ACK,便认为这个数据包丢失,就会重新发送 流量控制 控制发送方发送窗口的大小来实现流量控制 拥塞控制 控制传输中的流量

Ch06-TCP 之 流量控制

August 6, 2021
Network
Network

流量控制是一个点对点通信的控制,通过滑动窗口实现。借助流量控制也可以实现上层应用的反压机制。

  • 拥塞控制是一个全局的过程,其 cwnd 由发送端控制,会随着网络拥塞程度动态变化。
  • 流量控制是一个点到点通信量的控制;通过滑动窗口实现,其 windows/rwnd 由接收端控制,根据接收方的缓冲区大小动态变化。

所以每次发送端能发送的报文数量是 swnd=min(cwnd, rwnd)

...

Ch05-TCP 之 拥塞控制

August 5, 2021
Network
Network

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。在计算机网络中数位链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。

当输入的负载到达一定程度吞吐量不会增加,即一部分网络资源会丢失掉,网络的吞吐量维持在其所能控制的最大值,转发节点的缓存不够大这造成分组的丢失是拥塞的征兆。

...

Ch04-TCP 之 四次挥手

August 4, 2021
Network
Network

1. 基本原理 # 2. 为什么 TCP 协议终止链接要四次? # 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。 服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。 从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。 3. 为什么需要 TIME_WAIT 状态? # 主动发起关闭连接的一方,才会有 TIME-WAIT 状态。需要 TIME-WAIT 状态,主要是两个原因: 防止历史连接中的数据,被后面相同四元组的连接错误的接收; 保证「被动关闭连接」的一方,能被正确的关闭; 4. 为什么等待 2MSL,从 TIME_WAIT 到 CLOSE? # MSL(Maximum Segment Lifetime),TCP 允许不同的实现可以设置不同的 MSL 值。所谓的 2MSL 是两倍的 MSL(Maximum Segment Lifetime)。MSL 指一个片段在网络中最大的存活时间,2MSL 就是一个发送和一个回复所需的最大时间。如果直到 2MSL,Client 都没有再次收到 FIN,那么 Client 推断 ACK 已经被成功接收,则结束 TCP 连接。 保证客户端发送的最后一个 ACK 报文能够到达服务器。因为这个 ACK 报文可能丢失,站在服务器的角度看来,已经发送了 FIN+ACK 报文请求断开了,客户端还没有给回应,应该是发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个 2MSL 时间段内收到这个重传的报文,接着给出回应报文,并且会重启 2MSL 计时器。 ...

Ch03-TCP 之 三次握手

August 3, 2021
Network
Network

1. 基本原理 # 2. 为什么是三次握手 # 用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合(包括 Socket、序列号和窗口大小)称为连接。 三次握手才可以阻止重复历史连接的初始化(主要原因) 在 client 第二次与 server 握手开始之前,会判断 isn 是否符合预期;如果符合预期,那么会向 server 发送 ack 建立连接;如果不符合预期,那么向 server 发送 rst 终止连接。 三次握手才可以同步双方的初始序列号 在 client 第一次与 server 握手的时候,会将 client_isn 同步给 server;在 server 第一次回复 client 的时候,会将 server_isn 同步给 client。 三次握手才可以避免资源浪费 不使用「两次握手」和「四次握手」的原因: 两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号; 四次握手:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。 3. 参考文献 # 为什么是三次握手?不是两次、四次?

Ch02-TCP 之 网络模型

August 2, 2021
Network
Network

1. OSI 七层模型 VS TCP/IP 四层模型 # 2. TCP/IP 四层模型报文封装/解封装 # 网络接口层的传输单位是帧(frame) IP 层的传输单位是包(packet) TCP 层的传输单位是段(segment) HTTP 的传输单位则是消息或报文(message) 但这些名词并没有什么本质的区分,可以统称为数据包。 3. TCP/IP 报文拆分 # 如果 TCP 报文大小超过 MSS(握手阶段协商,大概为 1460 字节) ,就会对报文进行分片,得到一个即将传递到网络层的 TCP 报文。(如果途中一个分片丢失,只需要单独发送该分片就行,该分片也被称为 TCP Segment)。 如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文。 4. TCP VS UDP # TCP UDP 连接 面向连接,传输数据前先要建立连接 不需要连接,即刻传输数据 服务对象 仅支持一对一的两点服务 一对一、一对多、多对多的交互通信 可靠性 可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达 尽最大努力交付,不保证可靠交付数据 拥塞控制 有 无 流量控制 有 无 首部开销 首部长度较长,会有一定的开销 首部只有 8 个字节,并且是固定不变的,开销较小 传输方式 流式传输,没有边界,但保证顺序和可靠 一个包一个包的发送,是有边界的,但可能会丢包和乱序 分片不同 数据大小如果大于 MSS 大小会进行分片 不会分片,依赖网络层 MTU 大小及分片 5. ...