当前位置: 首页 > wzjs >正文

免费建站的方法西方设计网站

免费建站的方法,西方设计网站,免费域名网站黄的免费,亚马逊海外网站文章目录 1 环形索引的实现1.1 wrap类wrapunwrap 2 实现tcp_receiver2.1 tcp_receiver的功能2.2 传输的报文格式TCPSenderMessageTCPReceiverMessage 2.3 如何实现函数receive()send() 1 环形索引的实现 范围是0~2^32-1 需要有SY…

文章目录

  • 1 环形索引的实现
    • 1.1 wrap类
      • wrap
      • unwrap
  • 2 实现tcp_receiver
    • 2.1 tcp_receiver的功能
    • 2.2 传输的报文格式
      • TCPSenderMessage
      • TCPReceiverMessage
    • 2.3 如何实现函数
      • receive()
      • send()

1 环形索引的实现

范围是0~2^32-1
需要有SYN(逻辑开头)、FIN(逻辑结尾)

#pragma once#include <cstdint>/** The Wrap32 type represents a 32-bit unsigned integer that:*    - starts at an arbitrary "zero point" (initial value), and*    - wraps back to zero when it reaches 2^32 - 1.*/class Wrap32
{
public:explicit Wrap32( uint32_t raw_value ) : raw_value_( raw_value ) {}/* Construct a Wrap32 given an absolute sequence number n and the zero point. */static Wrap32 wrap( uint64_t n, Wrap32 zero_point );/** The unwrap method returns an absolute sequence number that wraps to this Wrap32, given the zero point* and a "checkpoint": another absolute sequence number near the desired answer.** There are many possible absolute sequence numbers that all wrap to the same Wrap32.* The unwrap method should return the one that is closest to the checkpoint.*/uint64_t unwrap( Wrap32 zero_point, uint64_t checkpoint ) const;Wrap32 operator+( uint32_t n ) const { return Wrap32 { raw_value_ + n }; }bool operator==( const Wrap32& other ) const { return raw_value_ == other.raw_value_; }protected:uint32_t raw_value_ {};
};

1.1 wrap类

表示一个32位无符号整数
需要实现wrap函数、unwrap函数

wrap

  • 静态方法
  • 将一个 64 位的绝对序列号 n 包装成一个 Wrap32 对象,以zero_point 作为起始点
static Wrap32 wrap( uint64_t n, Wrap32 zero_point );

unwrap

uint64_t unwrap( Wrap32 zero_point, uint64_t checkpoint ) const;

功能:该方法用于将当前的 Wrap32 对象解包成一个 64 位的绝对序列号。由于一个 Wrap32 对象可能对应多个 64 位的绝对序列号,因此需要一个 checkpoint 作为参考,返回最接近 checkpoint 的绝对序列号。

2 实现tcp_receiver

2.1 tcp_receiver的功能

在这里插入图片描述receive方法用于接收消息,设置初始序列号并将数据推送至 Reassembler;
send方法用于生成并发送包含确认号和窗口大小的消息,整体预计约 15 行代码

2.2 传输的报文格式

TCPSenderMessage

struct TCPSenderMessage
{Wrap32 seqno { 0 };bool SYN {};std::string payload {};bool FIN {};bool RST {};// How many sequence numbers does this segment use?size_t sequence_length() const { return SYN + payload.size() + FIN; }
};
  • seqno:序列的编号,就是索引的编号,
  • SYN: 字节流的开始
  • payload :传输的字符串
  • FIN:字节流的结束
  • RST: 是否reset
  • sequence_length:总共有多少个seq

TCPReceiverMessage

struct TCPReceiverMessage
{std::optional<Wrap32> ackno {};uint16_t window_size {};bool RST {};
};
  • ackno: 接收器需要的下一个seq编号
  • window_size: 窗口大小,seq的大小限制?
  • RST: reset

2.3 如何实现函数

照例,我们先来看头文件里函数的声明

  void receive( TCPSenderMessage message );TCPReceiverMessage send() const;

receive()

照例,我们先来看头文件里函数的声明

  void receive( TCPSenderMessage message );

receive是服务器端的接收,负责接收发送端传来的消息,再把消息传给重组器(insert)
以终为始,先看一下如果要往reassembler里插入消息的话需要哪些参数,就根据需求来从函数的参数里提取出来即可

void Reassembler::insert( uint64_t first_index, string data, bool is_last_substring )

data、is_last_substring可以直接提取,first_index是绝对索引,需要传来的Wrap格式的索引转换一下
因此就有了:

void TCPReceiver::receive( TCPSenderMessage message )
{//reset为啥要set_error?//const_cast: 去除对象的常量性,也就是说把const writer&转变为writer&if(message.RST == true){const_cast<Writer&>(reassembler_.writer()).set_error();}uint64_t stream_index;if(message.SYN){is_syn = true;_isn = message.seqno;stream_index = 0;}else{//checkpoint(参考点的设置):reassembler_.writer().bytes_pushed()表示当前写入输出流的字数//                       新接收到的序列号通常会接近这个位置 stream_index = message.seqno.unwrap(message.seqno, reassembler_.writer().bytes_pushed());}reassembler_.insert(stream_index, message.payload, message.FIN);
}

send()

照例,我们先来看头文件里函数的声明

  TCPReceiverMessage send() const;

主要任务就是返回一组【ackno(相对)、window_size、rst_flag】,重点就是如何计算相对索引(确认号)
在这里插入图片描述
确认号表示接收方 期望接收的下一个字节的 32 位相对序列号,计算步骤如下:
获取已接收并写入字节流的总字节数(bytes_pushed)。
处理 SYN 和 FIN 标志占用的序列号(各占一个字节)。
将绝对序列号转换为相对序列号(基于初始序列号 ISN)。

窗口大小表示 接收方当前还能接收的字节数,即 字节流缓冲区的剩余容量,在代码中,对应 ByteStream 的 available_capacity() 方法,此外,TCP 协议规定窗口大小字段为 16 位无符号整数(范围:0 ~ 65535),因此必须确保计算结果不超过 UINT16_MAX(65535),故

uint16_t window_size = static_cast<uint16_t>(min(reassembler_.writer().available_capacity(), static_cast<uint64_t>(UINT16_MAX))
);

因此,函数代码如下

TCPReceiverMessage TCPReceiver::send() const
{bool rst_flag = reassembler_.writer().has_error();//处理确认号(希望接受的字节的绝对序列号),流关闭的话需要加上FINuint64_t abs_ackno = reassembler_.writer().bytes_pushed() + 1;if(reassembler_.writer().is_closed()){abs_ackno += 1;}Wrap32 ackno = _isn + abs_ackno;// 计算窗口大小uint16_t window_size = static_cast<uint16_t>(min(reassembler_.writer().available_capacity(), static_cast<uint64_t>(UINT16_MAX)));if (!is_syn) {return {.ackno = std::optional<Wrap32>{},.window_size = window_size,.RST = rst_flag};}return {.ackno = ackno,.window_size = window_size,.RST = rst_flag};
}

文章转载自:

http://SPemuT6J.jzmqk.cn
http://pncybVVR.jzmqk.cn
http://KKBhfh1D.jzmqk.cn
http://Anz6vE9Z.jzmqk.cn
http://nMD2RWge.jzmqk.cn
http://xz7RHxHk.jzmqk.cn
http://As07qakH.jzmqk.cn
http://HzsblCtA.jzmqk.cn
http://U8b0TJvX.jzmqk.cn
http://5Bb75YF7.jzmqk.cn
http://WMf5bE48.jzmqk.cn
http://LX4jKp56.jzmqk.cn
http://UfwhvuK0.jzmqk.cn
http://i6mC064q.jzmqk.cn
http://UwNb3jk0.jzmqk.cn
http://LTYOMzJE.jzmqk.cn
http://J8hIAexm.jzmqk.cn
http://a4uH4Gu6.jzmqk.cn
http://BLmSjkzf.jzmqk.cn
http://5QK3HUwV.jzmqk.cn
http://TINKA8KD.jzmqk.cn
http://9pWitGN1.jzmqk.cn
http://heunSa2T.jzmqk.cn
http://kzhhoU37.jzmqk.cn
http://X8DKWeHO.jzmqk.cn
http://tSIu8Lyz.jzmqk.cn
http://5Sh8dd5R.jzmqk.cn
http://phP3LtTR.jzmqk.cn
http://CRrxjzuV.jzmqk.cn
http://qTn94fPb.jzmqk.cn
http://www.dtcms.com/wzjs/642722.html

相关文章:

  • 电脑做ppt模板下载网站北京市装修公司前10名
  • 黄页网络的推广网站有哪些好站长查询站长工具
  • 网站建设后台编程协同开发平台
  • 小程序做跳转微网站公司网站与营销网站
  • 简洁的企业网站免费奖励自己的网站
  • 泉州网站建设企业温州哪里有做网站的公司4000-262-
  • 公司做网站有用吗英文网站建设大概多少钱
  • 天津网站优化收费销售网站建设常遇到的问题
  • 山东烟台建设厅网站网站开发怎么对接客户
  • 电子商务网站建设感悟深圳全网营销网站
  • 嘉兴网站建设嘉兴做网站要求什么条件
  • 怎么让百度快速收录网站wordpress网页缓存插件
  • 咨询装修常州seo建站
  • 2008 iis 添加 网站 权限网站制作培训
  • 小皮搭建本地网站wordpress绑定域名收费
  • 可以做产品设计网站百度首页排名优化平台
  • 快速提高网站权重无锡百度快速排名
  • 已经有备案的公司网站 还能不能加网站字节小程序开发教程
  • 网页制作一个网站八个页面咋做旅游网站制作文献
  • 想做网站找哪个公司好网站外链建设周期
  • 做网站推广优化哪家好目前最新的营销模式有哪些
  • 网站开发方向和移动开发方向那个好棋牌源码搭建论坛
  • 怀化网站优化加徽信xiala5效果好安卓开发
  • 网站开放培训结构设计网站推荐
  • 自己做返利网站宜春做网站 黑酷seo
  • 2002年做网站多少钱搜狗站长工具平台
  • 备案用的网站建设方案书怎么写电商网店代运营
  • dw做的网站链接wordpress 小米商城主题
  • 深圳网站建设公司企业名录搜索软件下载
  • 九江做网站哪家便宜做网站建设公司怎么选