计算机网络

217 阅读2分钟

OSI模型

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP模型

物理层、数据链路层、网络层、传输层、应用层

网络接口层、网络层、传输层、应用层

TCP 协议特性

最主要的三个特性是:面向连接的可靠流式传输

它提供了基于字节流的、全双工的数据传输,并通过确认应答、重传机制来保证可靠传输

TCP三次握手四次挥手

三次握手

  1. A请求B建立连接,进入待确认状态
  2. B同意并响应A的请求,进入待确认状态
  3. A发送确认包给B,A进入确认状态,B收到A的确认包后,B也进入确认状态

完成上述流程后,双方进入全双工通信。

必要性:

1、避免网络阻塞和历史连接等原因造成的系列号错乱,冗余连接会浪费资源,及时发出RST关闭连接

2、第三次确保了ACK+SYN并未丢失,序列号已同步,方能建立可靠连接

应对SYN攻击:(系统维护SYN队列和ACK队列,SYN队列被撑爆)

1、限制对服务器 SYN 请求的频率和次数

2、限制单个 IP 的 SYN 请求数

3、增大 SYN 队列的容量

4、使用 SYN Cookie 技术,服务端收到客户端的 SYN 请求时不立马分配资源,而是生成一些信息在 SYN+ACK 报文中返回给客户端,再收到客户端的 ACK 报文后才建立连接

四次挥手

  1. A请求B关闭连接,A不再发送新数据,没发完的继续发
  2. B同意并响应A的请求
  3. B不再发送新数据,没发完的继续发,完成后通知A关闭连接
  4. A收到B的关闭后,A的数据也发送完后,A通知B确认关闭,A在2MSL后也关闭连接

完成上述流程后,双方正式关闭连接。

TIME_WAIT为2MSL的作用:(MSL表示报文最大生存时间,而 2MSL 表示报文往返的最大生存时间,这足以让报文在网络中消失)

1、防止历史连接中的数据,被相同地址的新连接接收,造成错误数据。

2、正确关闭,防止最后的ACK报文丢失,B会重新发起 FIN 报文,若此时A已经关闭,收到B重传的 FIN 报文后,会返回 RST 报文。虽然也能关闭,但并不是一个正常的方式。

TCP通过以下机制来保证数据传输的可靠性:

  1. 序列号和确认应答:每个TCP报文段都包含一个序列号,用于标识报文段在数据流中的位置。接收方会发送确认应答,告知发送方已经成功接收到数据。

  2. 数据重传:如果发送方没有收到确认应答,会进行定时重传,确保数据可靠传输。

  3. 滑动窗口:TCP使用滑动窗口机制来控制发送方和接收方之间的数据流量。它允许发送方连续发送多个报文段,而不需要等待确认应答,从而提高传输效率。

  4. 拥塞控制:TCP具有拥塞控制机制,它通过动态调整发送速率来避免网络拥塞。当网络拥塞时,TCP会减少发送速率,确保网络的稳定性。

TCP的机制

HTTP的请求过程

TCP和UDP的区别

TCP是传输控制协议,UDP是用户数据报协议。

TCP是面向连接的可靠数据流传输,UDP是无连接的不可靠报文协议。

TCP注重按照顺序到达目的地,拥有错误检测和重传机制。

UDP注重速度,可能会丢失、重复或乱序。

Http与Https的区别

端口分别是80和443。

HTTPS使用SSL(Secure Socket Layer)或TLS(Transport Layer Security)协议对通信进行加密,添加了加密和认证机制。

HTTPS开销大,但是更安全,采用了对称加密和非对称加密机制。

HTTPS 具备加密通信、校验机制和数字证书三个特性,从而保证了数据传输的安全性。

三次握手后的第四次握手就是加密的过程。

HTTP 2.0比1.0最大的提升大于,多路复用、头部压缩、服务端推送,

HTTPS 非对称加密+对称加密

  1. 服务器拥有非对称加密的公钥和私钥

  2. 服务端将收到请求后,将公钥明文传输给客户端

  3. 客户端随机生成一个对称加密的秘钥S,用公钥加密S后返回给服务器

  4. 服务器用私钥解密后获得对称加密秘钥S

  5. 双方通过秘钥S进行通信

中间人攻击:即中间人冒充了服务器。骗了客户端的数据,同时自己与服务端通信,骗了服务端数据。

为了防止中间人攻击,引入网络世界的“公理”——CA机构,让它给服务端颁发“身份证”——数字证书

防止数字证书被篡改,需要对数字证书进行签名,再判断签名是否跟证书中的一致即可(就像下载文件校验MD5的原理)。这个签名叫——数字签名

数字签名的制作过程:

  1. CA机构拥有非对称加密的公钥和私钥
  2. CA机构对证书的明文数据T进行hash
  3. 对hash后的值用私钥加密,得到数字签名S

数字证书 包含了 证书明文数字签名,颁发给服务端

如何确保CA机构的公钥是可信的?(该公钥是否对应该网站)

客户端(系统、浏览器)会预装一些根证书,以根证书为起点,通过信任链层层信任,可以校验公钥是可信的。有时客户端需要内置证书 或 浏览器会提示需要下载证安装书(风险自己承担),此时客户端就拥有了可信的公钥。

上述可推导出:客户端(浏览器)自带CA机构的公钥

客户端验证过程:

  1. 客户端拿到服务器返回的证书(带公钥)

  2. 客户端自带CA机构的证书对服务端证书进行校验

  3. 校验通过则证书可信任,否则警告提示不可信任,提示安装证书

安全通信机制流程图:

彻底搞懂HTTPS的加密原理

一篇读懂https的本质、证书验证过程以及数据加密

HTTP的9个请求方法

  • GET,获取数据;无body,有安全、幂等、可缓存的特性,数据在URL中,数据大小限制在浏览器对URL长度的支持,直接请求,有历史记录和缓存。

  • POST,提交数据;有body,无安全、幂等、可缓存的特性,数据不透明,数据大小无限制,需要先校验head,后校验body,所以抓包经常能看到post请求会有两次,其中一次是options验证Header,第二次才是data发送。

  • HEAD,获得报头;类似GET,无Response,用于查询资源是否存在

  • OPTIONS,询问支持的方法;在报文头的Allow字段中返回支持的方法(GET\POST等)

  • PUT,文件上传;类似POST,但PUT指定了资源存放位置,POST由服务端决定

  • PATCH,局部更新文件;对PUT方法的补充,对已知资源进行局部更新

  • DELETE,删除文件;请求服务器删除指定文件

  • TRACE,追踪路径;主要用于测试,客户端可以对请求消息的传输路径进行追踪,让服务端将之前的请求通信还给客户端

  • CONNECT,要求用隧道协议连接代理;实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

HTTP请求通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

Requet

POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。

Response

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

第二部分:消息报头,用来说明客户端要使用的一些附加信息。

第三部分:空行,消息报头后面的空行是必须的。

第四部分:响应正文,服务器返回给客户端的文本信息。

常见状态码

  • 1XX,信息,请求正在处理

  • 2XX,成功,请求正常处理,200成功

  • 3XX,重定向,请求完成,但需要附加操作,301重定向

  • 4XX,客户端错误,服务器无法处理请求,400请求错误,404无法找到资源

  • 5XX,服务器错误,服务器出错,500内部错误,501无法处理请求

DNS流程

  1. 客户机向其本地域名服务器发出DNS请求报文

  2. 本地域名服务器收到请求后,查询本地缓存,假设没有该记录,则以DNS客户的身份向根域名服务器发出解析请求

  3. 根域名服务器收到请求后,判断该域名所属域,将对应的顶级域名服务器的IP地址返回给本地域名服务器

  4. 本地域名服务器向顶级域名服务器发出解析请求报文

  5. 顶级域名服务器收到请求后,将所对应的授权域名服务器的IP地址返回给本地域名服务器

  6. 本地域名服务器向授权域名服务器发起解析请求报文

  7. 授权域名服务器收到请求后,将查询结果返回给本地域名服务器

  8. 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机

Cookie和Session

cookie是客户端状态保持方案,各浏览器大小限制不同,安全性低

session是服务器端状态保持方案,取决于服务端存储空间,常依赖于cookie回传sessionid,安全性高

浏览器中向域名发起请求后的全过程

  1. 浏览器通过DNS解析域名获得IP

  2. 浏览器发起一个到IP的HTTP请求

  3. 通过TCP封装数据包,随机选一个可用端口与服务器指定端口进行数据传输

  4. 网络层通过路由表查找到服务器的路径,期间会使用ARP协议进行查找

  5. 服务器收到数据并作出响应后,按上述流程原路返回给客户端

WebSocket是基于HTTP协议实现的长链接封装,是一种特定的通信协议。

Socket是基于网络层的封装,适应性广泛,用TCP、UDP等协议通信。