1、rdt1.0,rdt2.0,rdt3.0的底层信道模型
RDT 1.0: 完全可靠的底层信道,没有比特差错,也没有分组丢失。
RDT 2.0: 具有比特差错的底层信道,有比特差错,但没有分组丢失。
RDT 3.0: 具有差错和丢包的底层信道,有比特差错,又有分组丢失。
2、rdt2.0比rdt0增加的机制:检错(校验和或CRC)、反馈(ACK, NAK)、重传;
rdt3.0比rdt2.0增加的机制有:定时,发送方会在发送数据后启动一个定时器,如果在规定的时间内未收到确认(ACK),则认为数据丢失,触发重传。
3、rdt2.0,rdt3.0属于:停等协议;GBN,SR,TCP属于:流水线协议
在停等协议中,发送方发送一个分组,然后等待接收方的确认。只有在收到确认之后,发送方才会发送下一个分组;在流水线协议中,发送方可以发送多个分组,而不必等待每个分组的确认。接收方可以按顺序接收这些分组,并发送累积确认。
4、对滑动窗口协议发送窗口、接收窗口如何滑动的理解
回退N帧法(Go-Back-N), 选择性重传(SR)都是滑动窗口协议
位于发送窗口内的分组才允许被发送,位于接收窗口内的分组才能被接收
接收方发送一个 ACK(确认),指示成功接收到的最后一个无误分组的序号。这个 ACK 是累计的,意味着如果接收方成功接收了序号为 N 的分组,那么 ACK 中就包含 N 及之前所有分组的确认信息。如果有分组丢失,接收方将等待并且只发送最后一个正确接收的分组的 ACK,触发发送方重新发送从该分组开始的所有未确认的分组。
每个 ACK 指示成功接收的特定分组的序号。接收方可以选择性地确认接收到的分组,而不是像 GBN 那样累积确认。这允许发送方只重新发送丢失的分组,而不必重新发送整个窗口的数据。
5、检查和(Checksum)的计算,例:两个16-bit二进制数的检查和。
注意:最高位进比特位的进位需要加到结果中(也就将最高位进位的1加到结尾)
看上述例子:
6、TCP的三次握手过程
第一次握手 - SYN(同步):
客户端向服务器发送一个TCP报文,其中设置了SYN标志位,并选择一个初始的序列号(SEQ,通常由客户端随机选择)。这表明客户端请求建立连接。
客户端 -------------------> 服务器
| |
| ------- SYN = 1 ----------> |
第二次握手 - SYN + ACK:
服务器收到客户端的SYN报文后,会回复一个包含SYN和ACK标志位的报文,同时也选择一个初始的序列号。这表明服务器接受了客户端的请求,并表示自己也准备好建立连接。
客户端 <-------------------> 服务器
| |
| <------ SYN = 1, ACK = 1 ---|
第三次握手 - ACK:
客户端收到服务器的SYN + ACK报文后,会向服务器发送一个确认报文,其中设置了ACK标志位。这表明客户端确认了服务器的响应。此时,连接已经建立起来,可以开始进行数据传输。
客户端 -------------------> 服务器
| |
| ------- ACK = 1 ----------> |
来看个例题:
那么:
① SYN = 1
② SYN = 1 ; SEQ(由③中的ACK反推)= 2001 ;ACK(由①中的SEQ推出)= 1001
③ SEQ(等于上一次的ACK) = 1001
7、流量控制
发送方发送数据太快,导致接收方来不及接收时,需进行流量控制。(接收方对发送方的控制)
基本思想:接收方告诉发送方它目前的接收能力,发送方根据这个信息来控制发送的速率。
发送方:
发送方根据接收方的窗口大小,决定发送多少数据。
发送数据,并等待接收方的确认。
接收方:
接收方收到数据后,将其存储在接收缓冲区中。
接收方发送一个带有确认号和新的窗口大小的 ACK 给发送方。
如果接收方的缓冲区已满,它可以选择不立即确认,从而限制发送方的速率。
8、控制拥塞的两类方法:端到端的拥塞控制,如TCP;网络辅助的控制拥塞,如ATM。