计算机网络知识点(二)

运输层:

11、TCP与UDP的区别及应用场景

TCP和UDP的区别:
TCP是面向连接的传输层协议,传输数据之前必须先建立连接;UDP是无连接传输。
TCP是点对点服务,一条TCP连接只有连个断点;UDP是多对多连接交互通信。
TCP是可靠连接:无差错、无重复、无丢失、按序到达;UDP:尽最大努力交付,不保证可靠性。
TCP由拥塞控制和流量控制保证数据传输的安全性;UDP无拥塞控制,网络拥塞不影响发送速率。
TCP是动态报文。即TCP报文长度是根据接受方窗口大小和当前网络拥塞情况来决定的;UDP是面向报文的,不合并、不拆分,保留上面下来的报文边界。
TCP首部开销大,20个字节;UDP首部仅有8个字节(源端口、目的端口、数据长度、校验和)


TCP和UDP的使用场景:
TCP传输数据可靠但是速度较慢,UDP传输速度快但不可靠。因此在选用具体协议是根据数据通信要求来决定。
若数据通信完整性需要让位与通信实时性,则选用TCP(传文件、重要状态);反之选用UDP(视频、实时通信)。

12、TCP首部报文格式(SYN、ACK、FIN、RST必须知道)

 

 

 

URG 指示报文段里存在着被发送方的上层实体标记为”紧急”数据,当URG=1时,其后的紧急指针指示紧急数据在当前数据段中的位置(相对于当前序列号的字节偏移量),TCP接收方必须通知上层实体。
ACK 当ACK=0时,表示该数据段不包含确认信息,当ACK=1时,表示该报文段包括一个对已被成功接收报文段的确认。
PSH 当PSH=1时,接收方在收到数据后立即将数据交给上层,而不是直到整个缓冲区满。
RST 用于重置一个已经混乱的连接(如主崩溃),也可用于拒绝一个无效的数据段或者拒绝一个连接请求。一般而言,如果你得到的数据段被设置了RST位,那说明你这一端有问题了。
SYN 用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。注:捎带是指对客户机到服务器数据的确认被装载在一个承载服务器到客户机的数据
FIN 用于释放一个连接,表示发送方已经没有数据要传输了。此时,接收方可能继续接收数据,好在SYN和FIN数据段都有序列号,从而保证了这两种数据段以正确顺序被处理

13、TCP滑动窗口原理

TCP 协议通过采用滑动窗口的方式控制数据流的传输。在传输层中, 数据按照一定的
  格式打成大小相同的包。每一个滑动窗口中包含一定数目的数据包, 滑动窗口的大小可以
  进行调整。每台网络上的主机维护一个发送窗口和一个接收窗口。发送方一次可发送相当于滑动窗口大小的数据包数目, 并在每个数据包前添加包头信息, 然后等待接收方返回确认信息。由于TCP 是面向连接的协议, 可以保证数据传输的完整性和准确性, 当传输过程中发生丢包时, 接收方会要求发送方从断点处重传数据。
  当TCP 从应用层中接收到数据时, TCP 将一个带序列号的报头加入数据包并将其交给
  IP, 由IP 将它发送到目标主机。
  当每一个数据包传送时, 源主机设置重发计时器, 描述在重新发送数据包前将等待
  ACK 的时间。在一般情况下, 当第一次发送失败后, 重发计时器的重试时间将设置为前一
  次的两倍。在发送窗口中有每一个数据包的备份, 直到收到ACK。
  当数据包到达目的主机接收窗口, 它们按照序列号放置。当目的主机接收到连续的数
  据段时, 就向源主机发送一个关于数据的认可( ACK) 的应答报文, 其中带有当前窗口尺寸。一旦源主机接收到数据包并认可, 发送窗口将进行滑动。如果在重发计时器设定的时
  间内, 源主机没有接收到对现存数据的认可, 数据将重新传送。重发数据包将加重网络和源主机的负担。

14、TCP超时重传时间选择

第二次的RTT1要大于第一次的RTT0,于是第一次的RT0的选择值在这里就不适合了。针对这一个复杂的问题,我们不能用某次测量的值来计算超时重传时间RTO。这时就需要借鉴中华名族的优秀传统-折中。利用每次测量的RTT样本,然后取一个加权平均值RTTs。
新的加权平均往返时间RTTs = (1 - a)x 旧的RTTs + a x 新的RTT样本。(其中0 < a < 1)
如果 a很小,趋近于0,说明新的RTT样本作用不大。
如果 a 很大,趋近于1,则说明旧的RTTs对新的RTTs的影响很小。

现在通用的a的取值为1/8,即0.125。
显然,新的RT0的值应该要略大于RTTs的值。
RTO = RTTs + 4 x RTTd(RTTd为RTT偏差的加权平均)

RTTd1 = RTT1 / 2
新的RTTd = (1-B) x 旧的RTTd+B x |RTTs-新的RTT样本| 。  (其中0< B<1)
B的建议取值为1/4,即0.25

15、TCP流程控制

tcp是利用滑动窗口机制就可以实施流量控制。原理这就是运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大小。

16、TCP拥塞控制(一定要弄清楚与流量控制的区别)

如果把窗口定义的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至造成网络的瘫痪。所以TCP为了防止这种情况进行拥塞控制。

慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个RTT),将拥塞窗口大小*2。
拥塞避免:设置慢启动阈值,一般开始设置为65536。拥塞避免是当拥塞窗口大小达到这个阈值,拥塞窗口的值不在指数上升,而是加法增加。将报文段的超市重传看作拥塞,则一旦发生拥塞,先将阈值设为当前窗口大小的一般,并且将窗口大小设为1,再次进入慢启动过程。
快速重传:在遇到3此重复应答时,代表收到3个报文段,但是之前的1个段丢失了便对它进行立即重传。然后先将阈值设为当前窗口大小的一般,然后将拥塞窗口大小设为慢启动阈值+3的大小。
这样:在TCP通信是,网络吞吐量呈现逐渐的上升,并且随着拥堵来减低吞吐量,再进入慢慢上升的过程,网络不会轻易发生瘫痪。

17、TCP三次握手及状态变化。为啥不是两次握手?

确保自己消息已发出和已收到

 

 

18、TCP四次挥手及状态变化。为啥不是三次挥手?

关闭连接可能不在同一时间点

 

 

19、TCP连接释放中TIME_WAIT状态的作用

原因1:防止连接关闭时四次挥手中的最后一次ACK丢失:

原因2:防止新连接收到旧链接的TCP报文:

21、TCP粘包

TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。

造成TCP粘包的原因
(1)发送方原因

TCP默认使用Nagle算法(主要作用:减少网络中报文段的数量),而Nagle算法主要做两件事:

只有上一个分组得到确认,才会发送下一个分组
收集多个小分组,在一个确认到来时一起发送
Nagle算法造成了发送方可能会出现粘包问题

(2)接收方原因

TCP接收到数据包时,并不会马上交到应用层进行处理,或者说应用层并不会立即处理。实际上,TCP将接收到的数据包保存在接收缓存里,然后应用程序主动从缓存读取收到的分组。这样一来,如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。

22、TCP心跳包

客户端连接上服务端以后,服务端维护一个在线用户字典,客户端每隔一段时间,向服务器发送一个心跳包,服务器接收到包以后,字典数据的值都会更新为0;一旦服务端超过规定时间没有接收到客户端发来的包,字典数据将会递增加一,当字典数据的值累计大于等于三,则视为掉线。用户掉线检测功能。今天我们就通过使用自定义的HeartBeat方式来检测用户的掉线情况

23、路由器与交换机的区别

路由器:寻址,转发(依靠 IP 地址)
交换机:过滤,转发(依靠 MAC 地址)

我们可以看出这两者的主要工作就是转发数据,但是不同之处是,依靠的地址不同,这是一个根本区别!

路由器内有一份路由表,里面有它的寻址信息(就像是一张地图),它收到网络层的数据报后,会根据路由表和选路算法将数据报转发到下一站(可能是路由器、交换机、目的主机)

交换机内有一张MAC表,里面存放着和它相连的所有设备的MAC地址,它会根据收到的数据帧的首部信息内的目的MAC地址在自己的表中查找,如果有就转发,如果没有就放弃

24、UDP如何实现可靠传输

只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

实现确认机制、重传机制、窗口确认机制。

如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:

发送:包的分片、包确认、包的重发

接收:包的调序、包的序号确认

目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。

3.1RUDP
RUDP 提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,从而在包丢失和网络拥塞的情况下, RTP 客户机(实时位置)面前呈现的就是一个高质量的 RTP 流。在不干扰协议的实时特性的同时,可靠 UDP 的拥塞控制机制允许 TCP 方式下的流控制行为。

3.2RTP
实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。

RTP 本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于底层服务去实现这一过程。 RTP 并不保证传送或防止无序传送,也不确定底层网络的可靠性。 RTP 实行有序传送, RTP 中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,例如:在视频解码中,就不需要顺序解码。

3.3UDT
基于UDP的数据传输协议(UDP-basedData Transfer Protocol,简称UDT)是一种互联网数据传输协议。UDT的主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差。顾名思义,UDT建于UDP之上,并引入新的拥塞控制和数据可靠性控制机制。UDT是面向连接的双向的应用层协议。它同时支持可靠的数据流传输和部分可靠的数据报传输。由于UDT完全在UDP上实现,它也可以应用在除了高速数据传输之外的其它应用领域,例如点到点技术(P2P),防火墙穿透,多媒体数据传输等等。

posted @ 2021-09-03 15:23  白米a  阅读(363)  评论(0)    收藏  举报