以前链接路由器配置静态IP的时候只是知道将子网掩码改成255.255.255.0,IP地址前三个数字和网关一样最后一个数字改成未被占用的IP就好了,一直没有理解子网掩码到底代表什么意思。之前上《计算机网络》这门课的时候好像听老师讲过,没怎么仔细听,只知道网络地址和主机地址什么的.

  今天看了《TCP/IP详解》才对子网掩码有所了解。下面做个总结。

  子网掩码其实是为了分割网络,比如一个A类地址能容纳的主机数有2^24-2个主机,一般一个组织是不可能用到这么多地址的,势必会造成浪费。但是我们可以通过子网掩码来将一个A类地址划分成多个子网,根据IP和子网掩码可以判断同一个网络地址下的主机是否在同一个网段.

  子网掩码会将IP地址分成三部分,网络号、子网号、主机号。网络号可以直接从IP地址得到,子网号则是IP和子网掩码作&运算减去网络号,剩下的一部分就是主机号.可以根据网络号和子网号来确定两个主机是否处在同一网段

如A机Ip为192.168.1.2,B机Ip为192.168.1.126,子网掩码都是255.255.255.224。

转换成16进制如下:

A机:11000000 10101000 00000001 00000010  &运算后:  11000000 10101000 00000001 00000000

B机:11000000 10101000 00000001 01111110  &运算后:  11000000 10101000 00000001 01100000

掩码: 11111111 11111111 11111111 11100000

&运算后得到的结果不同,所以可以得出A机和B机并不在同一个网段内.

当A机发送数据给B机时,会先将B机的IP与子网掩码进行&运算查看是否在同一个网段,如果不在同一网段内则会把数据发送给网关,在同一个网段的可以直接在数据链路层通信。

转载https://www.cnblogs.com/BeautyConcurrency/p/4083628.html

  • 在 HTTP/2 中,强制使用 SSL/TLS。但是在 RFC 中并没有强制,其允许纯文本的HTTP/2,但是当前所有实现HTTP/2的 Web浏览器都只支持加密。
  • 客户端无法预知服务端是否支持HTTP/2.0 的情况下使用HTTP升级机制发起“http” URI请求。客户端发起一个http1.1请求,其中包含识别HTTP/2的升级报头字段与h2c token。HTTP/1.1必须包含一个确切的HTTP2-Settings中的报头字段。

例如:

GET /index.htm HTTP/1.1
Host: www.timiguo.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

不支持HTTP/2的服务端对请求返回一个不包含升级的报头字段的响应:

HTTP/1.1 200 OK
Content-Length: 50
Content-Type: text/html

支持HTTP/2的服务端可以返回一个101(转换协议)响应来接受升级请求。在101空内容响应终止后,服务端可以开始发送HTTP/2帧。这些帧必须包含一个发起升级的请求的响应。

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: h2c

[ HTTP/2 connection ...]
  • 客户端可以通过其他方式判断服务端是否支持HTTP/2。例如,AltSvc定义一种机制让HTTP头字段进行广播。
  • 在建立TCP连接并且检测到HTTP/2会被各个对等端使用后,每个端点必须发送一个连接序言最终确认并作为建立HTTP/2连接的初始设置参数。
    客户端连接序言以24个字节的序列开始,以十六进制表示是:
0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a

转成字符串就是PRI * HTTP/2.0rnrnSMrnrn

PRI * HTTP2.0


SM

这个序列后跟着一个设置帧,其可为空帧。客户端在收到101转换协议响应(升级成功指示)后马上发送客户端连接序言,或者作为TLS连接的第一个应用数据字节。如果在预先知道服务器支持HTTP/2的情况下启动HTTP/2连接,客户端连接序言在连接建立后发送。
服务端连接序言包含一个有可能是空的设置(SETTING)帧,它必须在HTTP/2连接中首个发送。

为了避免不必要的延迟,允许客户端在发送客户端连接序言之后立即发送其他额外的帧,不需要等待收到服务端连接序言。不过需要注意的是,服务端连接序言设置(SETTINGS)帧可能包含一些关于期望客户端如何与服务端通信的所必须修改的参数。在收到这些设置(SETTINGS)帧之后,客户端应当遵守所有设置的参数。

昨天在golang微信群里有个群友问了一个比较基础的问题,golang底层有类似的byte转int,这对有点c语言基础的,基本都能清楚知道原理(这里验证一句,语言之间的理解都是相通的,不同的就是语法,思路和思想和实现原理都是一样的,中文的你好,英文的hello表达意思一样,但是语法不一样)

上一段伪代码

a := str[index]-'0'
b := bstr[index]+'0'

这里的+'0'和-'0'
'0'表示取0的ascii编码是48
str[index] = "2"
字符2的ascii编码是50
"2"-'0' = 50 - 48 = 2

其实底层标准包就是这么转的,只是多了16进制8进制的转换罢了

php报这个错一般是你php-fpm配置里的用户对该文件没做操作权限,或者找不到这个文件,所以如果找不到这个文件,应该是nginx传过来的路径错了,或者你启用了php.ini里的cgi.fix_pathinfo