- 博客(172)
- 资源 (13)
- 收藏
- 关注
原创 P2P如何实现内网穿透(打洞)
目录概述P2P简介P2P通信技术中继(Relaying)逆向连接(Connection reversal)UDP打洞端点处于不同NAT端点处于相同的NAT固定端口绑定空闲状态下的超时问题TCP打洞套接字和TCP端口的重用打开P2P的TCP流TCP同时打开参考资料概述P2P简介我们知道,内网设备是不能直接访问公网的,如果需要内网...
2019-01-20 17:33:24 81016 5
原创 NAT,私网访问公网的利器
目录NAT概述什么是NATNAT起源NAT作用NAT的工作模型和特点NAT原理NAT类型一对一的NAT一对多的NATNAT不足破坏IP端到端模型会话时效变短破坏IP追踪安全方面NAT穿越技术应用层网关(ALG)探针技术STUN和TURN中间件技术中继代理技术特定协议的自穿越技术NAT的应用NAT多实例应用N...
2019-01-19 20:17:04 5043
原创 QUIC的那些事 | QUIC为什么那么快
QUIC(Quick UDP Internet Connection)是谷歌提出的一种基于UDP的低时延的互联网传输层协议,QUIC的发音类似于Quick。实际上,QUIC确实很快。QUIC解决了现代网站应用的一系列的传输层及应用层的问题,但只需要应用开发者几乎不用做出或者只做出很小的改变。QUIC和TCP+TLS+HTTP很类似,但是基于UDP实现,基于QUIC实现的HTTP协议被提议为HT...
2019-01-15 22:45:19 2808 1
原创 QUIC的那些事 | 帧类型及格式
目录Frame TypeStream FrameACK FrameSTOP_WAITING FrameWINDOW_UPDATE FrameBLOCKED FramePadding FrameRST_STREAM FramePING FrameCONNECTION_CLOSE帧GOAWAY Frame参考资料QUIC相关文章见《QUIC的那些事 ...
2019-01-13 19:56:37 4185
原创 QUIC的那些事 | 包类型及格式
目录报文头特殊报文版本协商报文Public Reset报文普通报文(Regular Packet)帧包(Frame Packet)FEC包(FEC Packet)参考资料QUIC 的 packet 除了个别报文比如 PUBLIC_RESET 和 CHLO,所有报文头部都是经过认证的,报文 Body 都是经过加密的。这样只要对 QUIC 报文任何修改,接收端都能够...
2019-01-13 19:32:21 7243
原创 QUIC的那些事 | QUIC概述
目录TCP/UDP缺点TCP的不足UDP的不足握手导致的连接成本TCP的可靠成本中间设备的僵化依赖于操作系统的实现导致协议僵化队头阻塞QUIC的特点QUIC原理QUIC使用场景QUIC报文格式概述参考资料QUIC(Quick UDP Internet Connection)是谷歌提出的一种基于UDP的低时延的互联网传输层协议。QUIC解决...
2019-01-13 19:17:07 3319
原创 网关知多少
网关(Gateway),顾名思义,就是一个网络到另一个网络的关口。维基百科对网关的定义为:在计算机网络中,网关(Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。百度百科对网关的定义为:网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网...
2019-01-12 19:43:43 731
原创 TCP 的那些事 | TCP Fast Open
目录 TCP Fast Open定义起源详解流程CookieTFO与Wireshark开启TFO示例代码TFO性能页面加载时间Server CPU安全性结论参考资料TCP Fast Open定义TCP Fast Open(TFO)是用来加速连续TCP连接的数据交互的TCP协议扩展,原理如下:在TCP三次握手的过程中,当用户首次访问...
2019-01-06 14:53:50 7180 1
原创 Golang | Visual Studio Code安装go lang 插件
本以为Visual Studio Code 安装Golang插件很容易,确实容易。但是安装Golang插件需要的插件却很麻烦。譬如调试需要用dlv,visual studio code可以自动下载需要的插件,如下所示:gocodego-outlinego-symbolsgurugorenamedlvgodefgoreturns但是各种报错,信息如下:Instal...
2019-01-04 22:11:39 2203
原创 如何判断两个设备是否可以直接通信
在物理链路通的情况下,如下的两台设备是否可以直接通信?图1 设备信息设备1及设备2均为C类地址,如果只从IP地址看,这两个地址好像是属于同一个网络,我们知道,同一个网络的设备是可以直接通信的,不需要网关的支持。 但是,上述两个地址,是否真的属于同一个网络?C类地址的网络号是24位,主机号是8位;从这个标准看,上述两个地址确实是同一个网络啊。不错,确实是属于同一个大的网络。但是,网...
2019-01-02 22:17:57 10830
原创 TCP 的那些事 | 快速恢复
在《慢启动》、《拥塞避免》文章讲述了慢启动以及拥塞避免阶段的相应机制,当进入拥塞阶段后,TCP需要采取一定的策略避免网络的拥塞,其中有一种方式就是快速恢复算法。快速恢复算法是在TCP Reno算法中引入。TCP Reno 算法快速恢复和快速重传一起使用,使用规则如下:1. 启动快速重传2. 设置SSThresh = CWS/2 以及 CWS = SSThresh + 3 *...
2019-01-01 19:49:48 755 1
原创 TCP 的那些事 | 拥塞避免
在文章《【技术】TCP 的那些事 | 慢启动 》中 讲到,慢启动算法的拥塞窗口大小CWS(Congestion Window Size )有个上限值SSThresh(Slow Start Threshold),当CWS >= SSThresh时,就会进入“拥塞避免”阶段。一般来说SSThresh的值是65535字节,当CWS达到这个值时后,CWS的更新算法如下:1. 收到一个ACK时,...
2018-12-28 21:21:27 614
原创 TCP 的那些事 | 在途字节数
由于网络存在延迟丢包、接收端处理数据与发送端发送数据的速度有差别以及接收端可能采取收到多个包以后才统一回复Ack的策略,那么发送端就需要保存“已发送但未收到Ack”的数据列表,当触发重传时,直接在该链表中找到相应需要重传的数据,重传给接收端。在文章《【技术】TCP 的那些事 | 滑动窗口 》中讲述了滑动窗口的基本原理,其中“从发送端看发送数据的状态”中的Category2:已发送但未收到Ack...
2018-12-27 19:04:48 1780
原创 TCP 的那些事 | 滑动窗口
Advertised Window Size在文章《TCP 的那些事 | TCP报文格式解析》中讲述了TCP的报文格式,其中Window字段表示接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。该字段和Options字段中的Kind为3的可选项(Window Scale)结合,可以确定窗口大小,该Window字段也称...
2018-12-16 21:51:36 2082
原创 TCP 的那些事 | D-SACK
在《【技术】TCP 的那些事 | SACK 》讲解了SACK,在SACK中描述的数据段是接收端收到的数据,发送端根据接收端返回的SACK信息就可以知道哪些数据丢了,进而进行重传。RFC2883对SACK进行了扩展,称为D-SACK:使得扩展后的SACK具有通知发送端哪些数据被重复接收了。引入D-SACK的目的是使TCP进行更好的流控,具体来说有以下几个好处:1. 让发送方知道,是发送的包丢...
2018-12-16 21:40:38 4422
原创 TCP 的那些事 | SACK
在文章《TCP 的那些事 | 快速重传》中介绍了基本的重传知识及快速重传,本文讲解相比快速重传更有效的另一种重传方式:SACK(Selective Acknowledgment)。SACK需要在TCP头里加一个SACK的东西,ACK还是快速重传(Fast Retransmit)的ACK,SACK则是汇报收到的数据碎版。SACK信息在《TCP 的那些事 | TCP报文格式解析》中的图1中的Opt...
2018-12-16 21:35:59 4860
原创 TCP 的那些事 | 快速重传
TCP是面向连接的、可靠的、基于字节流的传输层通信协议,其要保证传输的数据可靠:网络通信的双方发送给对方的数据要确保可以抵达对方,否则要进行重传。假设通信的双方是A和B,A连续给B发送了1,2,3,4,5这5份数据,但是呢,在A发送这5份数据的途中,B先收到了1,2号数据,于是发送Ack给A,表示已经收到了1,2号数据。随后又收到了4号及5号数据,这个时候还没有收到3号数据,那么B能不能直接回...
2018-12-16 21:31:09 893
原创 TCP 的那些事 | TCP报文格式解析
TCP(Transmission Control Protocol 传输控制协议)提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。TCP在网络ISO的七层模型中的第四层---Transport层,在TCP/IP协议中的第三层---传输层。TCP通过下列方式来提供可靠性:1. 应用数据被分...
2018-12-16 21:29:05 1360
原创 TCP 的那些事 | MSS
MSS 的全称是 Maximum Segment Size(最大报文长度),是 TCP 层上的概念。MSS 指的是 TCP 报文段中数据部分的最大长度,并不是整个TCP 报文段长度,整个 TCP 报文段长度 = TCP 首部长度 + TCP 数据部分长度。网络交互的双方进行 TCP 通信时,会在三次握手时告知对方各自的 MSS,MSS 值只会出现在 SYN 报文中。如下抓包所示,其中IP地...
2018-12-16 21:25:00 1028
原创 TCP 的那些事 | MTU
网络通信中,经常会遇到一个概念MTU,全称是Maximum Transmission Unit(最大传输单元)。那么什么是MTU,MTU的作用是什么,本文从最基本的概念出发,一步步讲起。MTU是最大传输单元,针对的对象是以太网帧中的数据。MTU的确切意思就是以太网帧中数据的最大长度,注意,是以太帧中有效载荷的最大长度,不包括以太帧帧首尾部的长度。以太网帧数据格式如下:以太网帧数据格式...
2018-12-16 21:23:16 2651
原创 TCP 的那些事 | 四次挥手
TCP在断开连接时,会进行四次挥手(一方主动断开,对端被动断开),如图1所示:图1 四次挥手第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。第二次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态。第三次挥手:服务端发送一个FI...
2018-12-16 21:17:38 146
原创 TCP 的那些事 | 三次握手
TCP在建立连接时,会进行三次握手,流程如图1所示:图1 TCP 三次握手流程图3次握手的主要目的是初始化Sequence Number 的初始值及协商一些通信双方的通信参数。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)。SYN,全称Synchronize Sequence Numbers。也就上图中...
2018-12-16 21:12:07 441
原创 对C++中访问private变量的思考
问题:如果自己动手写CString类的构造函数,拷贝构造函数,析构函数,赋值运算符等,那么该如何写? 参考代码如下#include <memory>class MyString {private: char *m_data;public: MyString(); MyString(const char* ptr); MyString(const MyStrin
2015-10-31 19:39:00 1930
原创 C++两个栈实现队列
设置stack1和stack2,所有元素均添加到stack1中。当stack2中不为空时,在stack2中的栈顶的元素是最先进入队列的元素,可以弹出。如果stack2为空,把stack1中的元素逐个弹出并压入stack2,由于先入队列的元素被压到stack的底端,经过弹出和压入之后就处于stack2的顶端了,有可以继续直接弹出。
2015-10-08 22:55:05 500
原创 C++之单例模式
C++之单例模式单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。方法一:饿汉模式,即指单例实例在程序运行时被立即执行初始化class
2015-09-10 20:26:42 451
翻译 C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance )
C++ 多继承和虚继承的内存布局原文链接:http://www.phpcompiler.org/articles/virtualinheritance.html多重继承(Multiple Inheritance)虚继承(Virtual Inheritance)向下转型(Downcasting)总结(Concluding Remarks)参考(References)多重继承(Multipl
2015-09-05 17:31:30 775
原创 C++ new 之 placement new、operator new、new operator
C++ new 之 placement new、operator new、new operator
2015-08-21 17:05:37 561
转载 C++ STL std::pair
部分参考:http://blog.csdn.net/mdl13412/article/details/6643400// Filename: stl_pair.h/* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this so
2015-08-21 10:52:51 611
原创 C++序列操作之std::partition
C++序列操作之std::partitionstd::partition会将区间[first,last)中的元素重新排列,满足判断条件pred的元素会被放在区间的前段,不满足pred的元素会被放在区间的后段。该算法不能保证元素的初始相对位置,如果需要保证初始相对位置,应该使用stable_partition. partition源代码如下:template<class BidirectionalI
2015-08-14 10:34:28 14632
原创 C++集合操作之集合对称差集:std::set_symmetric_difference
C++集合操作之集合对称并集:std::set_symmetric_difference 算法std::set_symmetric_difference可以用来求两个集合的对称差集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为std::set_symmetric_differ
2015-08-13 16:31:42 5390
原创 C++集合操作之集合交集:std::set_intersection
C++集合操作之集合交集:std::set_intersection算法set_intersection可以用来求两个集合的交集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为set_intersection要求两个区间必须是有序的(从小到大排列),std::set和std::multiset为有...
2015-08-13 16:17:54 28501
原创 C++集合操作之集合差集:std::set_difference
C++集合操作之集合并集:std::set_difference 算法set_difference可以用来求两个集合的差集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为set_difference要求两个区间必须是有序的(从小到大排列),std::set和std::multiset为有...
2015-08-13 12:01:39 31550 1
原创 C++集合操作之集合并集:std::set_union
C++集合操作之集合并集:std::set_union算法set_union可以用来求两个集合的并集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为set_union要求两个区间必须是有序的(从小到大排列),std::set和std::multiset为有序序列,而hash_set以及hash_m...
2015-08-13 10:54:23 16032
原创 LeetCode题解-Best Time to Buy and Sell Stock III
在Best Time to Buy and Sell Stock II基础上增加条件:两次交易的最大收益思路一:将数组分为前后两部分,数组大小为size,记分隔符为i,分别求(0,i)以及(i+1,size-1)的最大收益(很一般的思路,没有过大数据关,主要是有太多重复计算),将收益相加,即为本次的最大值,依次迭代,即可获得最大收益。思路二:分别计算正向收益(见Best Time to
2015-07-11 16:22:03 434
原创 LeetCode题解-Best Time to Buy and Sell Stock II
在Best Time to Buy and Sell Stock 基础上添加了新的条件:You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple tran
2015-07-11 16:17:07 453
原创 LeetCode题解-Best Time to Buy and Sell Stock
Best Time to Buy and Sell Stock:Say you have an array for which the i-th element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one an
2015-07-11 16:13:50 627
原创 VS2010 配置OpenGL
下载所需文件:http://download.csdn.net/detail/u014023993/8864447系统64位,VS2010,安装目录:D:/Program Files(x86)1.把 glaux.dll、glut32.dll、glut.dll 拷贝到C:/WINDOWS/system32目录下,system32目录下应该已经有 opengl32.dll、glu32.dll了
2015-07-03 09:31:44 429
转载 怎样在VS2010中打开VS2012的项目
VS2012中对C#的支持度非常好,不管是编写方便程度(不需要插件就能高亮代码及代码自动提示功能),还对MFC的一些功能优化很多。我们可以修改两个工程文件来把VS2012的工程文件一直到VS2010中去。首先当然是修改解决方案文件(.sln文件)。使用记事本打开,把里面的Microsoft Visual Studio Solution File, Format Version 12.0
2015-07-03 08:13:03 810
golang生成的火焰图torch.svg
2019-08-02
Building Machine Learning Projects with TensorFlow
2017-08-08
TensorFlow Python API documentation.pdf
2017-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人