计算机网络理论课件复习(六)

  • IGMP 是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组

运输层协议概述

  • 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务。
  • 运输层属于面向通信部分的最高层,同时也是用户功能中的最低层。
  • 运输层和上面的应用层仅存在于网络边缘部分的用户主机中,而网络核心部分的路由器在转发分组时都只用到下三层的功能。

运输层的作用

  • 运输层为应用进程之间 提供端到端的逻辑通信。与之不同的是,网络层是为主机之间提供逻辑通信。
  • 运输层的另一个重要功能是复用分用

TCP可靠传输的实现

  • TCP实现可靠传输的核心: 连续 ARQ 协议
  • TCP连接的往返时间 RTT 也不是固定不变的
  • TCP实现可靠传输的基本思想是“停止等待”协议。
  • “停止等待”协议是每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。
  • 确认丢失确认迟到

这里写图片描述

ARQ流水线传输

  • 为了提高效率,发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认

最大报文长度MSS

设置MSS原因:

  • MSS与接收窗口没有关系
  • 一方面是让TCP发送方发送数据长度尽可能大的报文段以提高网络利用率
  • 另一方面也是限制报文段的长度降低报文段到达网络层后被分片的可能,从而减少不必要的网络资源开销。

  • MSS通常在建立TCP连接时被写入。常见写入的值为1460(字节)。缺省值为536。

  • 时间戳选项可以防止序号回绕,占10 字节

关于TCP协议的三点“细节”

  • A 的发送窗口并不总是和 B 的接收窗口一样大。原因: 一方面有一定的时间滞后,另一方面,发送窗口的大小还与网络的拥塞情况决定。

持续计时器

  • TCP 为每一个连接设有一个持续计时器。只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。
  • 若持续计时器设置的时间到期,就发送一个仅携带 1 字节数据零窗口探测报文段,而对方就在确认这个探测报文段时给出现在的窗口值。
  • 窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。

网络拥塞形成的原因

  • 带宽容量的限制,信源的发送速率必须小于信道极限容量。
  • 存储空间限制
  • 处理器性能限制

拥塞控制与流量控制的关系

  • 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
  • TCP 发送方维持一个叫做拥塞窗口 cwnd (congestion window)的状态变量。它是实现几种拥塞控制机制的基础。
    拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。

慢开始和拥塞避免

  • 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去

  • 慢开始时候,起始值很小,然后加倍递增。

  • 拥塞避免,加一(当cwnd大于门限(sshresh))
  • 当遇到超时检测丢失报文的时候,重新使用慢开始

拥塞判断

  • 重传定时器超时
  • 收到三个重复的ACK

乘法减小算法

  • 在慢开始,或者是拥塞避免时,只要出现一次超时,则将ssthesh 设置为窗口值的一半

快重传

这里写图片描述

快恢复

  • 发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开始算法。
  • 之后再执行拥塞避免算法,加法增大

TCP三次握手

A: SYN = 1, seq = x
B: SYN = 1, ACK = 1, seq = y, ack = x+1
A: ACK  = 1, seq = x+1, ack = y + 1

SYN表示进入了SYN-SENT或者SYN-RCVD状态


接着发数据。

A : ACK = 1, seq = x + 1, ack = y + 1, DATA
B : ACK = 1, seq = y + 1, ack =  x + 1 + DATA , rwnd
A : ACK  = 1, seq = x + 1 + DATA, ack =  y + 1 + 1DATA '
B : ACK = 1, seq = y + 1, ack =  x + 1  + DATA  + DATA ', rwnd

四次挥手

A:FIN = 1,ACK = 1,seq = 上一个A + 数据,ack = y + 1 + 1 
B : ACK = 1, seq =上一个B的seq, ack = 上面A的seq + 1
B : FIN = 1, ACK = 1, seq = 上一个B的seq, ack = 上面A的seq + 1
A : ACK = 1, seq = 上面B的seq, ack = y + 1+ 1

总结:

  • 发送端的seq会变,就是上次发送端的seq的数值,再加上上次发送端的发的数据大小。
  • 发送端的ack值不会变
  • 接受端发的seq不会变
  • 接收端的ack会变,且为下一个发送端的seq。

猜你喜欢

转载自blog.csdn.net/a19990412/article/details/81058977