网络

网络模型

一、OSI七层模型

OSI(Open Systems Interconnection)七层模型是一种网络通信的参考模型,它将网络通信过程划分为七个层次,从上到下分别是:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。下面我们将详细介绍每个层次及其对应的协议。

  1. 应用层
    应用层是OSI模型的最上层,负责处理特定的应用程序细节。常见的协议包括TELNET、FTP、TFTP、SMTP、SNMP、HTTP、BOOTP、DHCP和DNS等。
  2. 表示层
    表示层负责对数据进行编码和解码,以确保发送方和接收方之间的数据格式一致。常见的表示层协议包括文本的ASCII和EBCDIC编码,以及图形、声音等多媒体数据的TIFF、JPEG、GIF、PICT和MIDI等编码方式。
  3. 会话层
    会话层负责建立、管理和终止会话(即数据通信的对话)。常见的会话层协议包括Socket、NFS、SQL、RPC、X-WINDOWS、ASP(APPTALK会话协议)和SCP等。
  4. 传输层
    传输层负责建立端到端的连接,确保数据能够可靠地传输到目标端。常见的传输层协议包括TCP和UDP等。
  5. 网络层
    网络层负责将数据包从源地址发送到目标地址,并在必要时通过路由选择来选择最佳路径。常见的网络层协议包括IP、IPX、ICMP和RIP等。
  6. 数据链路层
    数据链路层负责将数据包从源节点发送到目标节点,通常涉及到与网络硬件(如交换机和路由器)的直接交互。常见的数据链路层协议包括SDLC、HDLC、PPP、STP(Spanning Tree Protocol)和帧中继等。
  7. 物理层
    物理层负责将数据以比特流的形式传输,主要关注硬件设备(如电缆和收发器)的电气和机械特性。常见的物理层协议包括EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

二、TCP/IP模型

TCP/IP(Transmission Control Protocol/Internet Protocol)模型是一种简化的网络通信模型,它将OSI模型的某些层次进行了合并。TCP/IP模型分为四层:应用层、传输层、网络层和链路层。下面我们将介绍每个层次及其对应的协议。

  1. 应用层
    应用层负责处理应用程序的细节,与OSI模型的应用层类似。常见的协议包括Telnet、FTP、HTTP、SMTP和DNS等。
  2. 传输层
    传输层负责建立端到端的连接,确保数据的可靠传输。常见的协议包括TCP和UDP等。
  3. 网络层
    网络层负责将数据包从源地址发送到目标地址。常见的协议包括IP、ICMP和RIP等。
  4. 链路层
    链路层负责将数据包从源节点发送到目标节点,与OSI模型的数据链路层类似。常见的协议包括Ethernet、ARP等。

三次握手

  1. 客户端发送SYN报文至服务端,客户端处于syn-sent状态
  2. 服务端发送SYN+ACK报文至客户端,服务端处于syn-rcvd(received)状态
  3. 客户端发送ack报文至服务端**(可携带数据)**,客户端处于established状态

之所以三次的原因

主要是为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力

  1. 可以在发生网络阻塞或者客户端宕机时阻止历史连接

    假如客户端第一次发送SYN报文后宕机且网络阻塞,客户端重启之后会重新发送SYN报文。如果不是三次握手,服务端在接收到SYN报文之后进入established状态并开始发送数据,而客户端接受到数据之后比较ACK序列号发现不是自己期望的ACK(重启之后发送的SYN的响应ACK)就会发送RST报文断开连接。

    断开之后,服务端接受到新的SYN报文重新进入established状态,发送数据和ACK,客户端比较后确认并进入established状态,此时建立连接。

    这种情况,第一次的尝试连接白白发送的数据,浪费了资源!!!

    因此,要解决这种现象,最好就是在服务端发送数据前,也就是建立连接之前,要阻止掉历史连接,这样就不会造成资源浪费,而要实现这个功能,就需要三次握手。(在第二次的时候服务端不会发送数据,而是发送ACK)

    所以,TCP 使用三次握手建立连接的最主要原因是防止「历史连接」初始化了连接

img

  1. 同步双方初始序列号

    TCP 协议的通信双方, 都必须维护一个「序列号」, 序列号是可靠传输的一个关键因素,它的作用:

    • 接收方可以去除重复的数据;
    • 接收方可以根据数据包的序列号按序接收;
    • 可以标识发送出去的数据包中, 哪些是已经被对方收到的(通过 ACK 报文中的序列号知道)

    当客户端发送携带「初始序列号」的 SYN 报文的时候,需要服务端回一个 ACK 应答报文,表示客户端的 SYN 报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。

img

  1. 避免资源浪费

    和1差不多,在网络阻塞的时候会建立多次尝试的连接并发送数据,导致资源浪费

四次挥手

1. 客户端发送FIN报文,进入fin_wait_1状态,不再发送数据(双方都可以主动关闭,不一定是客户端)
1. 服务端接受到FIN报文,发送ACK报文确认,进入close_wait状态,继续发送剩下还没发送完的数据
1. 客户端接收到ACK报文后进入fin_wait_2状态
1. 服务端发送完数据后,发送FIN报文至客户端,进入last_ack状态
1. 客户端接收到FIN报文回一个ACK报文,进入time_wait状态
1. 服务端接受到后ACK后断开和客户端连接
1. 客户端经过2msl后断开服务端连接。

img

之所以四次原因

确保服务端与客户端之间发送的数据能全部传输完

连接涉及的状态大概有哪些?

  • syn_sent
  • syn_rcvd
  • established
  • time_wait
  • close_wait

linux中查看某状态的列表

1
netstat -anp|grep ESTABLISHED

TIME_WAIT状态过多可能原因

高并发下短连接过多,服务端请求处理完就进入正常挥手

解决思路:

​ 使用负载均衡器,服务器会先关闭来自负载均衡器的连接

HTTP协议

http和https区别

HTTP HTTPS
默认端口80 HTTPS默认使用端口443
明文传输、数据未加密、安全性差 传输过程ssl加密、安全性较好
响应速度快、消耗资源少 响应速度较慢、消耗资源多、需要用到CA证书

常见响应码

  • 100:Continue — 继续。客户端应继续其请求。
  • 200:OK — 请求成功。一般用于GET与POST请求。
  • 301:Moved Permanently — 永久重定向。
  • 302:Found — 暂时重定向。
  • 400:Bad Request — 客户端请求的语法错误,服务器无法理解。
  • 403:Forbideen — 服务器理解请求客户端的请求,但是拒绝执行此请求。
  • 404:Not Found — 服务器无法根据客户端的请求找到资源(网页)。
  • 500:Internal Server Error — 服务器内部错误,无法完成请求。
  • 502:Bad Gateway — 作为网关或者代理服务器尝试执行请求时,从远程服务器接收到了无效的响应。

cookie和session区别

  • 保存位置:cookie在客户端,session在服务端
  • 安全性:cookie不安全,session安全
  • 作用:cookie一般用来保存用户信息,session主要作⽤就是通过服务端记录⽤户的状态

浏览器输入URL过程

**过程:**DNS解析、TCP连接、发送HTTP请求、服务器处理请求并返回HTTP报文、浏览器渲染、结束

过程 使用的协议
1、浏览器查找域名DNS的IP地址 DNS查找过程(浏览器缓存、路由器缓存、DNS缓存) DNS:获取域名对应的ip
2、根据ip建立TCP连接 TCP:与服务器建立连接
3、浏览器向服务器发送HTTP请求 HTTP:发送请求
4、服务器响应HTTP响应 HTTP
5、浏览器进行渲染