frp 使用

frp 使用

安装 frp

搭建 frp 还需要一台能够在外网访问的机器。
https://github.com/fatedier/frp/releases 下载 frp 执行文件。
frps 和 frps.yaml 放在具有公网 ip 的机器上。
frpc 和 frpc.yaml 放在内网环境的机器上。

基于 frp 实现内网穿透

frp 最大的使用场景是内网穿透。
比如下图,家里的 Nas 是在家庭局域网的,别人无法访问,可以借用一台有公网 IP 的 VPS 实现从任何地方访问家里的 Nas。
image.png

阅读全文 →

go 编译器优化

减小编译后可执行文件的大小

go build -ldflags '-w -s'

-w 禁止生成 debug 信息,注意使用该选项后,无法使用 gdb 进行调试。

-s 禁用符号表

可以使用 go tool link –help 查看 ldflags 各参数含义。

禁止优化和内联

go build -gcflags '-N -l'

-N 禁止编译优化

阅读全文 →

go 语言中的指针接收器和值接收器

在 Go 中,定义结构体有两种接收器可以选择

type T struct {
    a int
}

func (t T) Fv(a int) int {
    fmt.Println("in fv")
    t.a = a
    return a
}
func (t *T) Fp(a int) int {
    fmt.Println("in fp")
    t.a = a
    return a
}

区别和联系

T 和 *T 是两个不同的类型。每个类型都有自己的方法集。

T 的方法集包含了所有以 T 为 receiver 的方法。

阅读全文 →

OSI 七层协议

OSI 七层协议

概览

第七层 应用层

http 协议,ftp 协议等

第六层 表示层

加密解密,转换翻译

第五层 会话层

ssl 协议,不同机器上的用户之间建立会话

第四层 传输层

tcp/udp

阅读全文 →

TCP 协议

TCP 协议

1 TCP 的报文结构

数据在使用 TCP 发送的时候,会分成一段一段发送,每一个数据段加上 TCP 头部,就是一个 TCP 报文。

OSI 七层协议中,第二层(数据链路层)的数据叫 Frame,第三层(网络层)的数据叫 Packet,第四层(传输层)的数据叫 Segment。

阅读全文 →

子网和子网掩码

介绍

子网掩码不能单独谈,是和 ip 地址绑定在一起的。

ip 地址分为网络号和主机号,网络号相当于地址的楼栋号,主机号就是门牌。
比如现在有一个 ip 地址:192.168.1.5,单单凭这个无法知道网络号是多少,主机号是多少。所以子网掩码就是用来做这个事情的,子网掩码的位数和 ip 地址是一样的,都是 32 位,这 32 位里 1 的部分就表示网络号,0 的部分呢就表示主机号。

阅读全文 →

http1.0, http1.1 和 http2 对比

http1.0

一次请求一个 tcp 连接。
支持持久化连接,但是需要显示启用。

http1.1

默认使用持久化连接。
建立一个 tcp 连接后可以发送多个请求。但是有如下限制,客户端可以不必等待响应连续发送请求,但是服务端必须按客户端发送请求的顺序依次返回对应响应,这样客户端才能对应请求与响应。所以这样还是会出现队头阻塞(Head of line blocking)。

阅读全文 →

HTTP1.1 介绍

HTTP 报文

HTTP 报文主要由请求行、请求头部、空行和请求主体4个部分组成。
一般格式如下

请求报文格式

<method> <request-url> <version>
<headers>

<body>

响应报文格式

<version> <status> <reason-phrase>
<headers>

<body>

请求报文和响应报文的差别主要在起始行。各位置含义如下:

阅读全文 →