做网站的公司现在还 赚钱吗找个人做网站还是找企业做网站
做网站的公司现在还 赚钱吗,找个人做网站还是找企业做网站,静态网页设计与制作,免费企业网站源码fifth引入了tcp的newreno模型#xff0c;以及信道错误概率#xff0c;对于tcp拥塞控制的研究#xff0c;可以后期在此基础上进行更改1. 文件头注释/* GPL许可证声明 */
#include tutorial-app.h // 关键#xff1a;自定义应用头文件
#include ns3/appli…fifth引入了tcp的newreno模型以及信道错误概率对于tcp拥塞控制的研究可以后期在此基础上进行更改1.文件头注释/* GPL许可证声明 */ #include tutorial-app.h // 关键自定义应用头文件 #include ns3/applications-module.h // 应用层模块 #include ns3/core-module.h // 核心模块 #include ns3/internet-module.h // 网络层模块 #include ns3/network-module.h // 网络模块 #include ns3/point-to-point-module.h // 点对点链路模块 #include fstream为什么需要自定义应用问题1OnOff应用的socket在启动时才创建无法在配置时连接跟踪点 问题2即使能在启动后连接socket不是public的无法访问 解决方案创建自定义的简单应用2.TCP参数配置设置拥塞策略为tcpnewreno类似的还有cubic等初始拥塞窗口以及窗口恢复机制同样可以设置Config::SetDefault(ns3::TcpL4Protocol::SocketType, StringValue(ns3::TcpNewReno)); Config::SetDefault(ns3::TcpSocket::InitialCwnd, UintegerValue(1)); // 初始拥塞窗口1包 Config::SetDefault(ns3::TcpL4Protocol::RecoveryType, TypeIdValue(TypeId::LookupByName(ns3::TcpClassicRecovery)));3、网络建立过程步骤1创建节点和链路NodeContainer nodes; nodes.Create(2); // 创建2个节点 PointToPointHelper pointToPoint; pointToPoint.SetDeviceAttribute(DataRate, StringValue(5Mbps)); pointToPoint.SetChannelAttribute(Delay, StringValue(2ms)); NetDeviceContainer devices; devices pointToPoint.Install(nodes);步骤2配置错误模型PtrRateErrorModel em CreateObjectRateErrorModel(); em-SetAttribute(ErrorRate, DoubleValue(0.00001)); // 0.001%错误率 devices.Get(1)-SetAttribute(ReceiveErrorModel, PointerValue(em));步骤3安装协议栈和IP地址InternetStackHelper stack; stack.Install(nodes); // 安装TCP/IP协议栈 Ipv4AddressHelper address; address.SetBase(10.1.1.0, 255.255.255.252); // 30位掩码 Ipv4InterfaceContainer interfaces address.Assign(devices);步骤4创建接收端应用uint16_t sinkPort 8080; Address sinkAddress(InetSocketAddress(interfaces.GetAddress(1), sinkPort)); PacketSinkHelper packetSinkHelper(ns3::TcpSocketFactory, InetSocketAddress(Ipv4Address::GetAny(), sinkPort)); ApplicationContainer sinkApps packetSinkHelper.Install(nodes.Get(1)); sinkApps.Start(Seconds(0.)); sinkApps.Stop(Seconds(20.));步骤5关键部分 - 创建socket并连接跟踪点PtrSocket ns3TcpSocket Socket::CreateSocket(nodes.Get(0), TcpSocketFactory::GetTypeId()); ns3TcpSocket-TraceConnectWithoutContext(CongestionWindow, MakeCallback(CwndChange));步骤6创建自定义发送应用PtrTutorialApp app CreateObjectTutorialApp(); app-Setup(ns3TcpSocket, sinkAddress, 1040, 1000, DataRate(1Mbps)); nodes.Get(0)-AddApplication(app); app-SetStartTime(Seconds(1.)); app-SetStopTime(Seconds(20.));步骤7连接丢包跟踪点devices.Get(1)-TraceConnectWithoutContext(PhyRxDrop, MakeCallback(RxDrop));4、回调函数分析1.拥塞窗口变化回调static void CwndChange(uint32_t oldCwnd, uint32_t newCwnd) { NS_LOG_UNCOND(Simulator::Now().GetSeconds() \t newCwnd); }2.接收丢包回调static void RxDrop(Ptrconst Packet p) { NS_LOG_UNCOND(RxDrop at Simulator::Now().GetSeconds()); }部分运行截图