CS144 Lab2 (2024)超详细解析

文章详细描述了TCP接收器如何处理TCP段中的绝对和相对序列号,特别关注SYN、RST和FIN标志,以及使用WRAP32类进行序列号转换。文章还涉及Reassembler类和TCP接收器状态消息的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要注意的是:

转换相对与绝对序列号:

                (1)相对转绝对,实际上就是找checkponit最接近的相对序列号对应的绝对序列号

                (2)那么只需比较包含checkpoint两端的绝对序列号,取最近一端

                (3)特殊情况:checkpoint靠左端绝对序列号最近,但左端序列号小于0

接收发送部分:

                (1)下一个ackno相对序列号需要由

                                        is_zero_set        is_close        bytes_pushed         zero_point     决定

                (2)错误信息RST       就是ByteStream里的错误        

                (3)窗口大小由ByteStream的剩余容量决定:

                                        且注意若超过UINT16_MAX,取UINT16_MAX

                (4)注意处理数据报首位相对序列号:

                                        若有SYN,取下一位首位相对序列号

                                        然后再转首位绝对序列号(若为0,说明首位相对序列号与SYN相同,但由于我们已经排除SYN,故此时为无效信息)

                                        首位绝对序列号再转流序列号

TCP Receiver流程图(已经绑定在文章上):

wrapping_integers.cc :

#include "wrapping_integers.hh"
using namespace std;
/**
 * 绝对转相对
  @param  n           绝对序列号
  @param zero_point   初始序列号
  @return Wrap32      相对序列号
  static_cast<uint32_t>(n) 相当于n取模2^32(转换过程取低32位)
*/
Wrap32 Wrap32::wrap( uint64_t n, Wrap32 zero_point )
{
  uint32_t relative_ = static_cast<uint32_t>( n ) + zero_point.raw_value_;
  return Wrap32 { relative_ }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值