网络初探

419 阅读7分钟

域名

域名就是我们平时说的网址,例如:www.baidu.com

其访问的过程中,会经过域名解析,即从域名运营商那里将域名翻译成ip的形式,例如:http://14.215.177.38/

可以看到ip是一串数字,比较不好记录,因此域名可以讲过ip翻译成比较好记的名字,一般按照固定的格式,例如: www.xx.com

此外一个域名只能对应一个ip,一个ip可以对应多个域名,平时可以看到多个域名网址都会跳转到同一个页面,就是这个道理

另外域名对应的ip也是可以更改为其他ip的,这就是卖域名,但一个域名仍然只能对应一个ip

ip

ip是网络请求中的必要因素,用于标记为用户的身份,以此来进行正确的信息交换

ip地址就是网络上用于标识站点的数字地址,目前主流的ip地址遵循ipv4、ipv6协议

ipv4:

ipv4一共有四组数字,每一组有8位,每一组大小为0~255,即:2^8 : 2^8 : 2^8 : 2^8

例如: 192.168.0.1

可以看到 ipv4协议的网址数量是有限的,一共才2^32,且有些是被占用的

因此路由器出现了,常见的路由器地址:192.168.0.1、192.168.1.1等

路由器会将这一个ip地址,建立子网,并包装给多个用户上网

简介路由器如何扩展ip的:

两个用户连接两个路由器,在路由器里面分别被标记一个子网地址,如192.168.0.101,192.168.1.102,其两个想要建立连接时,会被路由器分别标记,然后两个路由器之间对接暗号进行访问,通过标记对应的子网来定位到对应的角色,然后代理传递信息,如果路由器中嵌套路由器也是如此,子网中再次分割出子网,来标记访问

ipv6

为了结局ipv4的ip数量少的弊端,因此引出了ipv6协议,其比ipv4要大出来一个数量级,其可以给地球上的每一个生物、甚至非生物都做上标记

ipv6一共有八组数字,每一组有16位,即大小为0~65535(一般是4位16进制数字)

即:2^16 : 2^16 : 2^16 : 2^16 :2^16 : 2^16 : 2^16 : 2^16

例如:ABCD : ABCD : ABCD : ABCD : ABCD : ABCD : ABCD : ABCD

请求与响应报文

http请求也是平时用的比较多的请求方式,其报文格式如下,上图方便参考

一个http请求报文如下所示,也可以看到平时传递的url就是URL,header即请求头,实体则为body

request-report.jpg

一个http响应报文如下所示

response-report.jpg

tcp、udp、socket、http、https

udp

udp面向非连接的协议,传输端和接收端不用先建立连接,发送端可以把要发送的消息直接发送到网络上,且传输报文头部内容相对较小,效率较高,但由于没有建立连接传输,因此为不可靠连接

可以看到当前的游戏,如果对udp改动,部分操作可靠性要求不高的可以采用

image.png

tcp

tcp为面向连接的协议,即传输端和接收端传输数据之前需要先建立可靠连接,然后发送消息,且断开连接时也要经过响应的操作,分别为三次握手连接协议和四次挥手断开协议

image.png

由于需要建立可靠连接,因此校验等相关字段会增加,效率较udp偏低,但由于其可靠性被更大范围内应用

三次握手

无论是tcp、http、https,(http基于tcp)请求的过程都要经过三次握手建立连接,建立连接过程如下(以客户端发起为例):

1.客户端发送连接问答seq=x

2.服务端接收到建立连接问答seq,并回复seq+1,即ack=x+1;于此同时,发出确定问答seq=y,等待客户端回复确认两端消息传送无误

3.回复服务端seq,并回复seq+1,即ack=y+1,两端消息发送均正常,确认连接成功

image.png

四次挥手

四次挥手是正常断开的连接所经过的步骤(实际异常断开一般有超时时间,期间没有反应会自动断开连接),断开连接经过程如下(以客户端发起为例):

1.客户端发送断开连接的请求fin=x

2.服务端接收到断开连接请求fin,并回复fin+1,即ack=x+1,客户端收到此消息,确认对方接收到自己打算的请求,等待对方发送断开连接的确认码

3.服务端向客户端发送即将断开连接操作的确认码fin=y,等待客户端回复确认码,准备断开连接

4.客户端收到服务端的断开连接操作码fin,并回复find+1,即ack=y+1,确认收到断开连接请求,并回复,然后断开连接,于此同时服务端收到ack=y+1后,也断开连接

image.png

socket

socket即套接字,为支持tcp/ip协议网络通信的基本操作单元,即为上层能方便通过tcp/ip协议进行网络通信的接口api,所以通常情况下socket也代表着tcp连接

http、https

http

平常用的比较多的请求方式,http基于tcp/ip先建立连接,然后以请求-响应的方式传送一次数据,传送完毕数据后,自动断开连接,可以理解为一次性的任务(基于http1.0)

注意:在http1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求

https

https是以安全为目标的http通道,简单讲是http的安全版本。即http下加入SSL层,https的安全基础是SSL,因此加密的详细内容就需要SSL,SSL免费证书很少,一般需要交费。

另外http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议http和https使用的是完全不同的连接方式,信息为密文传输

ping

最后介绍一个网络中常用的命令ping,其走的是和tcp、udp并列的icmp协议,即向服务端发送一个测试包,服务端收到回复反馈,那么网络就是通的,可以通过其可以诊断网络的连接状态,例如ping自己和自己服务器是否连接正常

案例:ping www.baidu.com

image.png

注意:ping中的icmp后面的的ttl是安全的数据包的生存时间(最大255,推荐64,mac上为50),主要是为了避免包在传输过程中出现回路浪费资源,因此包在传输过程没经过一个路由ttl值会减少,当减少为0是,会被抛弃,认为无效包

网络七层协议

网络通过七层协议,将我们要发送的内容通过应用经过设备网线等发送到对方设备的应用上

七层协议从上到下为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

我们通常将应用层、表示层、会话层合并为统称为应用层

image.png

各个协议之间的通信最终都要转化为0和1的电信号,通过物理介质进行传输才能到达对方的设备,因此主要经过如下几层协议将想要传输的内容加工传输到对方设备,对方也要经过同样的步骤,反向解析出正确的传输内容

image.png