计算机网络
网络分层架构
计算机网络体系分为三种,分别为OSI七层模型、TCP/IP四层模型和五层模型
OSI七层模型
- 物理层:主要定义物理设备标准,传输比特流
- 数据链路层:主要从物理层接受的数据进行MAC地址的封装和解封装。这一层的数据叫做帧,工作的设备是交换机,数据通过交换机来传输
- 网络层:主要从下层接受的数据进行IP地址的封装和解封装。这一层工作的设备是路由器,常把这一层的数据叫做数据包
- 传输层:定义了一些传输数据的协议和端口号,主要是将下层接受的数据进行分段传输,到达目的地址后进行重组,这一层的数据叫做段
- 会话层:通过传输层建立数据传输的通路,主要在你的系统之间 发起会话或者接受会议请求
- 表示层:主要进行对接收的数据进行解释、加密和解密、压缩和解压缩等
- 应用层:主要是一些终端的应用
TCP/IP五层模型
- 应用层:为应用服务提供交互服务。应用层协议比如HTTP协议、SMTP协议、域名系统DNS、HTTPS协议
- 传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层协议主要有传输控制协议TCP和用户数据协议UDP
- 网络层:选择合适的路由和交换器结点,确保数据及时传送。网络层协议主要有IP协议(IPV4 IPV6)、ICMP、IGMP
- 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据组装成帧,在两个相邻节点间的链路上传送帧
- 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异
图示
TCP和UDP的区别
1、TCP提供面向连接、可靠的数据流传输;UDP提供的是无连接的、不可靠的数据流传输
2、TCP传输单位成为TCP报文段;UDP传输单位成为用户数据包
3、TCP提供可靠的服务 ,注重数据安全性;UDP数据传输快,但是不保证可靠交付
4、TCP有拥塞控制;UDP没有拥塞控制,网络出现拥塞不会使源主机的发送速率降低
5、每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的通信方式
TCP的拥塞处理
在某段时间内,若对网络中某一资源的需求超过了该资源提供的可用部分,网络的性能变坏,这种情况就是拥塞。而拥塞控制就是防止过多的数据进入网络中,这样可以使网络的路由器或链路不至于过载。
控制方法主要有:
- 慢启动:不要一开始就是发送大量的数据,先探测网络的拥塞情况,然后由小到大逐渐增加拥塞窗口的大小
- 拥塞避免:拥塞避免算法使得拥塞窗口缓慢增长,每过一段时间RTT就把发送方的拥塞窗口cwnd加1,让其按照线性规律增长
- 快重传:快重传要求发送方在收到一个失序的报文段就立刻发送重复确认,而不是等到发送数据时捎带确认。快重传算法规定发送方一连收到三个重复确认就可以立即重传对方为收到的报文段,不必等待重传计时器时间过期
- 快恢复:当发送方连续收到三个重复确认,就执行乘法减小算法,将ssthresh门限减半,但是接下来并不执行慢开始算法,因为如果网络出现拥塞的话就不会收到三个重复确认,所以发送方可能认为网络没有出现拥塞,所以不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法
浏览器输入地址返回页面
1、解析域名,找到主机IP
2、浏览器利用IP直接与网站主机通信,三次握手,建立TCP连接
3、浏览器会以一个随机端口向服务端的web程序80端口发起TCP的连接
4、建立TCP连接后,浏览器向主机发起一个HTTP请求
5、服务器响应请求,返回响应数据
6、浏览器解析响应内容,进行渲染,呈现给用户
三次握手和四次挥手
TCP在传输之前会进行“三次沟通”,就是三次握手,传输完数据后断开的时候要进行“四次沟通”,就是四次挥手
三次握手
- 第一次握手:Client将标志SYN置为1,随机产生一个值seq=J,并将数据包发给Server,Client进入SYN_SENT状态,等待Server确认
- 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据发给Client确认连接请求,Server进入SYN_RCVD状态
- 第三次握手:Client收到确认后,检查ack是否为J+1,ACk是否为1,如果正确的话将ACK置为1,ack=K+1,并将该数据包发给Server;Server检查ack是否为K+1,ACK是否为1,如果正确建立连接成功,Client和Server进入ESTABLISHED状态,完成三次握手,Client和Server可以传输数据了
为什么不能用两次握手建立连接
- 三次握手的目的是确认双方的接收和发送能力是否正常,同步连接双方的初始化序列号ISN,为后面的可靠性做准备。两次握手只有服务端对客户端的起始序列号做了确认,但客户端没有会服务端的初始序列号做确认,不能保证传输的可靠性
- 三次握手可以防止已失效的连接请求报文段突然回到服务端,导致服务器错误地建立连接,而非服务器的资源
案例说明情况
客户端发出的第一个连接请求报文段并没有丢失,而是在每个网络节点长时间停留了,以至于延误连接释放以后的某个时间点才到达server,原本client发出这个报文段,而server长时间未收到,已然失效,并没有建立连接。
但是不使用三次握手,server收到这个报文段,连接就建立了。但是由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送信息。而server认为新的连接已经连接,并一直等待client发送数据,因此server的许多资源白白浪费了
而采用三次握手,server收不到来自client的确认连接,就不会建立连接了
三次握手过程可以携带数据嘛?
第三次握手时是可以携带数据的,但是在第一次和第二次时是不可以携带数据的
1、加入第一次握手携带数据的话,那么会放大SYN洪泛。如果有人恶意攻击服务器,每次都在第一次握手中的SYN报文中放入大量的数据,然后疯狂重复发送SYN报文的话,就会让服务器开辟大量的缓存来接收这些报文,内存很容易耗尽,从而拒绝服务
2、第三次握手时客户端已经处理ESTABLISGED状态,对于客户端来说,已经建立起连接了,并且已经知道服务器的接收和发送能力是正常的,所以可以携带数据了
什么是SYN洪泛
SYN洪泛是利用TCP三次握手的特性,攻击者伪造SYN报文现象服务器发起连接,服务器在收到报文后用ACK应答,但之后攻击者不再对该响应进行应答,造成 一个半连接。假设攻击者发送大量的这样的报文,那么被攻击主机造成大量的半连接,耗尽资源,导致正常的SYN请求因为队列满而被丢弃,使得正常用户无法访问
四次挥手
- 第一次挥手:Client发送一个FIN,用来关闭Client和Server的数据传送,Client进入FIN_WAIT_1状态
- 第二次挥手:Server收到FIN,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态。此时TCP处于半关闭状态,客户端没有要发送的数据了,但是服务端还有发送的数据,则客户端还要接收
- 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
- 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
TCP如何保证可靠性传输?
- 三次握手
- 应答机制与超时重传:TCP接受端收到发送端的数据时,他将发送一个确认。当TCP发送端发出一个报文段后,回启动一个定时器,等待接收端的确认报文段,如果不能及时收到一个确认,将重发这个报文段
- 数据包校验与丢弃重复数据:TCP会检测数据在传输过程中的任何变化,若校验包出错,则丢弃报文段并且不给出响应,这是TCP会超时重发数据;对于重复的数据则会进行丢弃
- 对失序数据包进行重排序:TCP报文段作为IP数据报来传输,而IP数据报到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后交给应用层
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP额接收端只允许另一端发送端缓冲区所接收的数据,防止较快主机致使较慢主机的缓冲区溢出。TCP使用的流量控制协议是可变大小的滑动窗口协议
- 拥塞控制:网络拥塞时,减少数据的传送
拥塞控制和流量控制的差别
- 相同点:都是控制丢包现象,实现机制都是让发送方发的慢一些
- 不同点:
- 拥塞控制是一个全局性的过程,防止过多的数据注入到网络中,造成网络拥塞
- 流量控制是点对点通信量的控制,作用于接收者,要做的是控制发送端发送数据的速率,以便接收端来得及接收
客户端不断进行请求链接会怎样?DDos攻击?
服务端会为每个请求创建一个链接,并向其发送确认报文,然后等待客户端进行确认
DDos攻击
- 客户端向服务端发送请求链接数据包
- 服务端向客户端发送确认数据包
- 客户端不向服务端发送确认数据包,服务器一直等待来客户端的确认
DDos的预防
- 限制同时打开SYN半链接的数目
- 缩短SYN半链接的timeout时间
- 关闭不必要的服务
HTTP和HTTPS
HTTP
http协议(Hyper Text Transfer Protocol 超文本传输)是基于从万维网服务器传输超文本到本地浏览器的传输协议,http是一个无状态的协议,client和server不需要建立长久的连接,因此客户端和服务端都无法验证对方的身份,而且http运行在TCP之上,明文传输,所以不太安全
HTTPS
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket),是以安全为目标的安全通道,运行在SSL上,而SSL运行在TCP上,可以认为添加了加密和认证的机制的HTTP
区别
- 端口不同:HTTP的端口是80,HTTPS的端口是443
- 资源消耗:与HTTP相比,HTTPS因为加了SSL证书加密解密处理消耗了更多的资源和cpu处理能力
HTTP协议特点:
- HTTP允许传输任何类型的数据。传输的类型由Content-type加以标记
- 无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话和下一次会话没有联系
- 支持客户端/服务器模式
HTTP状态码
状态码 | 状态描述 |
---|---|
200 | 客户端请求成功 |
400 | Bad Request(错误请求) |
401 | Unauthorized(未授权) |
404 | not find(请求资源不存在) |
500 | Internal Server Error(内部服务器错误) |
503 | Server Unavailable(服务不可用) |
http/1.1和http/2.0的区别
- 多路复用:http2.0采用了多路复用的技术,做到一个连接处理多个请求,并发请求的数量比http1.1打了好几个数量级
- 支持首部压缩:http2.0使用hpack算法对header数据进行压缩,数据体积变小了,网路传输更快
- 服务器推送:当向支持http2.0的web服务器请求时,服务器会顺便将客户端需要的数据一起推送到客户端,避免客户端再次创建连接发送请求到服务器获取,这种方式适合加载静态资源
- http2.0采用二进制而不是文本格式:
对称加密与非对称加密
对称加密是指加密和解密都用同一个密钥的方式,存在的最大问题就是如何安全的将密钥发送给对方
非对称加密是指用一对非对称密钥,就是公钥和私钥,公钥可以随便发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密
区别:
- 非对称加密不需要发送用来解密的私钥,因此可以保证安全性
- 对称加密非常慢,并且无法保证安全性,如果非要用对称加密的方式传送信息,所发送的密钥可以用非对称加密的方式发送出去
get和post请求的区别
1、功能:get一般是从服务器上获取资源;post一般用来更新服务器上的资源
2、REST服务角度:get是幂等的,即读取同一个资源,总是得到相同的数据;而post不是幂等的,每次请求对资源的改变并不是相同的
3、请求参数:get请求的数据附在url上,请求参数之间必须&相连,同时数据是英文字母或者数字,原样发送,否则会将其编码为application/x-www-form-urlencoded字符串;而post会把提交的数据放置在http请求报文的请求体中
4、安全性:get的安全性较差,发送的数据是url的一部分;post更安全,参数不会保存在浏览器历史中或者web服务器日志中
5、数据长度和类型的限制:get方式只允许ascii字符,并且url的长度是受限制的;而post对于数据类型和长度都没有限制
cookie和session的区别
cookie的原理
cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端颁发一个cookie,而客户端浏览器将cookie保存起来。当浏览器再次请求该网站时,浏览器会把请求的网址连同cookie一同交给服务器,服务器检查cookie,以此来辨认用户状态,因此只要不关闭浏览器,cookie一直有效,所以一直保证长时间不掉线 。服务器还可以根据需要修改cookie的内容
session的原理
Session是用于服务器端保存用户状态的协议
1、浏览器请求服务器访问web站点时,服务器首先会检查这个客户端请求是否已经包含了一个session标识,也就是sessionid
2、如果包含了一个sessionid,说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用
3、如果不包含,则服务器为此客户端创建一个session,并且生成一个于此session相关联的唯一的sessionid存放到cookie中,这个sessionid将在本次响应中返回到客户端保存
4、在交互的过程中,浏览器端每次请求时,都会带这个sessionid,服务器根据这个sessionid就可以找到对应的session达到共享数据的目的
区别
- cookie数据是保存在客户端的,session的数据是保存在服务器的
- session的过期取决于服务器的设定,cookie的过期取决于cookie生成时设定的
- cookie不是很安全,分析本地的cookie并可以进行cookie欺骗,session较为安全,因此登录信息等重要信息放在session中,而其他信息放在cookie中
- session会一定时间保存在服务器中,而当访问增多,会比较占用服务器的性能,如果考虑减轻服务器的性能,可以使用cookie
- 单个cookie在客户端的限制是有限的,可能是3k,4k,10k等
IP地址的分类
ip地址是指互联网地址,是ip协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
每一个IP地址包括两个标识码,网络ID和主机ID。同一个物理网络的所有主机都使用同一个网络 ID,网络上的一个主机有一个主机ID与其对应
1、A类地址
A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下三段为本地计算机号码。A类IP地址中网络的标识长度为8位,主机标识的长度为24位,有126个网络,网络地址的最高位为“0”
A类IP地址的范围是1.0.0.0-127.255.255.255,二进制表示为000000001 00000000 00000000 00000000 - 01111110 11111111 11111111 11111111。A类地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的三次方-2=16777214台
2、B类地址
B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码,剩下两段为本地计算机号码。B类IP地址中网络的标识长度为16位,主机标识的长度为16位,有16384个网络,网络地址的最高位为“10”
B类IP地址的范围是128.0.0.0-191.255.255.255,二进制表示为10000000 00000000 00000000 00000000 - 01111110 11111111 11111111 11111111。B类地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的二次方-2=65534台
3、C类地址
C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下一段为本地计算机号码。C类IP地址中网络的标识长度为24位,主机标识的长度为8位,有209万多个网络,网络地址的最高位为“110”
C类IP地址的范围是192.0.0.0-233.255.255.255,二进制表示为11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111。C类地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台
4、D类地址
D类地址是多播地址,最高位网络地址必须为“1110”
范围从224.0.0.0到239.255.255.255
5、E类地址
E类地址为保留地址,最高位必须为“1111”