网络基础
网络
网络模型
一、OSI七层模型
OSI(Open Systems Interconnection)七层模型是一种网络通信的参考模型,它将网络通信过程划分为七个层次,从上到下分别是:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。下面我们将详细介绍每个层次及其对应的协议。
- 应用层
应用层是OSI模型的最上层,负责处理特定的应用程序细节。常见的协议包括TELNET、FTP、TFTP、SMTP、SNMP、HTTP、BOOTP、DHCP和DNS等。 - 表示层
表示层负责对数据进行编码和解码,以确保发送方和接收方之间的数据格式一致。常见的表示层协议包括文本的ASCII和EBCDIC编码,以及图形、声音等多媒体数据的TIFF、JPEG、GIF、PICT和MIDI等编码方式。 - 会话层
会话层负责建立、管理和终止会话(即数据通信的对话)。常见的会话层协议包括Socket、NFS、SQL、RPC、X-WINDOWS、ASP(APPTALK会话协议)和SCP等。 - 传输层
传输层负责建立端到端的连接,确保数据能够可靠地传输到目标端。常见的传输层协议包括TCP和UDP等。 - 网络层
网络层负责将数据包从源地址发送到目标地址,并在必要时通过路由选择来选择最佳路径。常见的网络层协议包括IP、IPX、ICMP和RIP等。 - 数据链路层
数据链路层负责将数据包从源节点发送到目标节点,通常涉及到与网络硬件(如交换机和路由器)的直接交互。常见的数据链路层协议包括SDLC、HDLC、PPP、STP(Spanning Tree Protocol)和帧中继等。 - 物理层
物理层负责将数据以比特流的形式传输,主要关注硬件设备(如电缆和收发器)的电气和机械特性。常见的物理层协议包括EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
二、TCP/IP模型
TCP/IP(Transmission Control Protocol/Internet Protocol)模型是一种简化的网络通信模型,它将OSI模型的某些层次进行了合并。TCP/IP模型分为四层:应用层、传输层、网络层和链路层。下面我们将介绍每个层次及其对应的协议。
- 应用层
应用层负责处理应用程序的细节,与OSI模型的应用层类似。常见的协议包括Telnet、FTP、HTTP、SMTP和DNS等。 - 传输层
传输层负责建立端到端的连接,确保数据的可靠传输。常见的协议包括TCP和UDP等。 - 网络层
网络层负责将数据包从源地址发送到目标地址。常见的协议包括IP、ICMP和RIP等。 - 链路层
链路层负责将数据包从源节点发送到目标节点,与OSI模型的数据链路层类似。常见的协议包括Ethernet、ARP等。
三次握手
- 客户端发送SYN报文至服务端,客户端处于syn-sent状态
- 服务端发送SYN+ACK报文至客户端,服务端处于syn-rcvd(received)状态
- 客户端发送ack报文至服务端**(可携带数据)**,客户端处于established状态
之所以三次的原因
主要是为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力
可以在发生网络阻塞或者客户端宕机时阻止历史连接
假如客户端第一次发送SYN报文后宕机且网络阻塞,客户端重启之后会重新发送SYN报文。如果不是三次握手,服务端在接收到SYN报文之后进入established状态并开始发送数据,而客户端接受到数据之后比较ACK序列号发现不是自己期望的ACK(重启之后发送的SYN的响应ACK)就会发送RST报文断开连接。
断开之后,服务端接受到新的SYN报文重新进入established状态,发送数据和ACK,客户端比较后确认并进入established状态,此时建立连接。
这种情况,第一次的尝试连接白白发送的数据,浪费了资源!!!
因此,要解决这种现象,最好就是在服务端发送数据前,也就是建立连接之前,要阻止掉历史连接,这样就不会造成资源浪费,而要实现这个功能,就需要三次握手。(在第二次的时候服务端不会发送数据,而是发送ACK)
所以,TCP 使用三次握手建立连接的最主要原因是防止「历史连接」初始化了连接
同步双方初始序列号
TCP 协议的通信双方, 都必须维护一个「序列号」, 序列号是可靠传输的一个关键因素,它的作用:
- 接收方可以去除重复的数据;
- 接收方可以根据数据包的序列号按序接收;
- 可以标识发送出去的数据包中, 哪些是已经被对方收到的(通过 ACK 报文中的序列号知道)
当客户端发送携带「初始序列号」的
SYN
报文的时候,需要服务端回一个ACK
应答报文,表示客户端的 SYN 报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。
避免资源浪费
和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后断开服务端连接。
之所以四次原因
确保服务端与客户端之间发送的数据能全部传输完
连接涉及的状态大概有哪些?
- 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、浏览器进行渲染 |