计算机网络知识汇总
1.OSI七层
为了方便理解,所以将计算机之间的通信进行分层讨论,他只是只用理论体系,帮助我们按照逻辑去理解计算机之间的通讯。
目前已掌握的分层方法:
- OSI七层:物理层、链路层、网络层、传输层、会话层、表示层、应用层。
- TCP/IP模型:网络接口层(物理层、链路层)、网路层(IP)、传输层(UDP/TCP)、应用层(会话层、表示层、应用层)
- 5层协议的原理体系结构:物理层、链路层、网络层、传输层、应用层(会话层+表示层+应用层)——目前所采用的
2.局域网和互联网
可以理解为一个互联网是由多个局域网所组成的,而局域网就是在家里、公司、或者学校等一个区域内计算机相互通信的网络。
3.网络层
IP,计算机是通过IP地址查找到听一台计算机进行通信的
4.传输层
UDP/TCP协议,运输层提供应用层提供端到端通信服务,通俗的讲,两个主机通讯,也就是应用层上的进程之间的通信,也就是转换为进程和进程之间的通信了。
比如你用你的电脑qq发给另一台登陆qq的电脑。这两个qq都有各自的端口,而传输层两个端口通信的介质。其中重要的就是以下连个协议。
(1)UDP协议
用户数据报协议,与Tcp协议一样,都是在网络层。
- 无连接:意思就是在通讯之前不需要建立连接,直接传输数据。
- 不可靠:是将数据报的分组从一台主机发送到另一台主机,但并不保证数据报能够到达另一端,
- 任何必须的可靠性都由应用程序提供。在 UDP 情况下,虽然可以确保发送消息的大小,却不能保证消息一定会达到目的端。
- 没有超时和重传功能,当 UDP 数据封装到 IP 数据报传输时,如果丢失,会发送一个 ICMP 差错报文给源主机。
- 即使出现网络阻塞情况,UDP 也无法进行流量控制。此外,传输途中即使出现丢包,UDP 也不负责重发,
甚至当出现包的到达顺序杂乱也没有纠正的功能
- 应用层协议中DNS,也就是根据域名解析ip地址的一个协议,他使用的就是UDP
- DHCP,这个是给各电脑分配ip地址的协议,其中用的也是UDP协议
(2)TCP协议——与UDP的区别,相当于传输层优化版
- TCP协议是面向连接的、可靠传输、有流量控制,拥塞控制,面向字节流传输等很多优点的协议。其最终功能和UDP一样,在端和端之间进行通信,但是和UDP的区别还是很大的。
- TCP比udp的报文结构复杂,这些多的内容,是的TCP比UDP更加可靠稳定。具体多了:序列号(可靠传输)、确认应答(可靠传输)、控制位、窗口(可靠传输)、填充
- 其中在面向连接时使用SYN控制位进行三次握手,能够确保发送的端口是自己的想要指定的。
(3)TCP的三次握手,与四次握手
TCP三次握手建立连接
一开始客户端和服务端都市关闭状态,但是在某个时刻,客户端需要和服务端进行通信,此时双方都会各自准备好端口,服务器段的端口会处于监听状态,等待客户端的连接。客户端可会知道自己的端口号,和目的进程的端口号,这样才能发起请求。
第一次握手:客户端想与服务器进行连接了,所以状态变为主动打开,同时发送一个连接请求报文给服务器段SYN=1,并且会携带x个字节过去。发送完请求连接报文后,客户端的状态就变为了SYN_SENT,可以说这个状态是等待发送确认(为了发送第三次握手时的确认包)
第二次握手:服务端接收到连接请求报文后,从LSTTEN状态变为被动打开状态,然后给客户端返回一个报文。这个报文有两层意思,一是确认报文,而可以达到告诉客户端,我也打开连接了。发完后,变为SYN_RCVD状态(也可以说是等待接受确认状态,接受客户端发过来的确认包)
第三次握手:客户端得到服务器端的确认和知道服务器端也已经准备好了连接后,还会发一个确认报文到服务器端,告诉服务器端,我接到了你发送的报文,接下来就让我们两个进行连接了。客户端发送完确认报文后,进入ESTABLISHED,而服务器接到了,也变为ESTABLISHED
进入到ESTABLISHED状态后,连接就已经完成了,可以进行通信了。
问题:为什么需要第三次握手,有前面两次不就已经可以了吗?
假设没有第三次握手,客户端发送一个连接请求报文过去,但是因为网络延迟,在等待了一个超时时间后,客户端就会在重新发一个请求连接报文过去,然后正常的进行,服务器端发回一个确认连接报文,然后就开始通讯,
通讯结束后,那个第一次因为网络延迟的请求连接报文到了服务器端,服务器端不知道这个报文已经失效,也发回了一个确认连接报文,客户端接收后,发现自己并没有发送连接请求(因为超时了,所以就认为自己没有发),
所以对这个确认连接请求就什么也不做,但是此时客户端不这么认为,他认为i连接已经建立了,就一直打开着等待客户端传数据过来,这就造成了极大的浪费。如果有了第三次握手,那么客户端就可以通知服务器了。所以第三次握手也很重要。三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
TCP四次握手断开连接
第一次挥手:从ESTABLISHED变为主动关闭状态,客户端主动发送释放连接请求给服务器端,FIN=1。发送完之后就变为FIN_WAIT_1状态,这个状态可以说是等待确认状态。
第二次挥手:服务器接收到客户端发来的释放连接请求后,状态变为CLOSE_WAIT,然后发送确认报文给客户端,
告诉他我接收到了你的请求。为什么变为CLOSE_WAIT,原因是是客户端发送的释放连接请求,可能自己这端还有数据没有发送完呢,所以这个时候整个TCP连接的状态就变为了半关闭状态。服务器端还能发送数据,
并且客户端也能接收数据,但是客户端不能在发送数据了,只能够发送确认报文。客户端接到服务器的确认报文后,就进入了FIN_WAIT_2状态。也可以说这是等待服务器释放连接状态。
第三次挥手:服务器端所有的数据度发送完了,认为可以关闭连接了,状态变为被动关闭,所以向客户端发送释放连接报文,
发完之后自己变为LAST_WAIT状态,也就是等待客户端确认状态
第四次挥手:客户端接到释放连接报文后,发送一个确认报文,然后自己变为TIME_WAIT,而不是立马关闭,因为客户端发送的确认报文可能会丢失,丢失的话服务器就会重传一个FIN,
也就是释放连接报文,这个时候客户端必须还没关闭。 当服务器接受到确认报文后,服务器就进入CLOSE状态,也就是关闭了。但是由于上面说的这个原因,客户端必须等待一定的时间才能够进入CLOSE状态。
- 为什么关闭连接多一次握手,同样都是客户端先发送申请,主要原因就是多了一个半关闭的的环节,即服务端能发送数据,而客户端只能接受不能发送了。待服务器发送完以后,认为可以关闭,会向客户端发送报文,等待客户端做最后确认后中断连接。
5.应用层:
位于计算机网络体系结构的最上层,前面四层做的所有事情就是为了他服务,他也是设计和建立计算机网络的最终目的,通俗的讲,就是我们开发的应用软件,就处于这一层。
(1)DNS域名解析协议
- 它的作用就是将域名解析成对应的IP地址。因为让我们人去记那些IP地址,很难记得住,所以就想办法让IP地址转变为了现在的域名(www.baidu.com)同IP地址找到了,就能找到我们要访问的服务器了。
(2)HTTP协议:服务器与客户端的请求与响应
- URL格式:://:/ 平常会省略协议和端口号,因为这些度是默认的,在访问主页时,路径也会省略。比如www.baidu.com这个默认进入百度的主页 完整写法 http://www.baidu.com:80/index.htm
(3)浏览器通过网址访问网页是如何做到的
- 第一步:我们一般都是通过域名进行访问的,所以要想访问到目标服务器/主机,首先就是要利用DNS域名解析协议把域名解析成IP地址,然后通过IP地址找到目标服务器
- 第二步:客户端按照一定的格式向服务端发送请求报文,主要包括请求方法(get/post)、Host域名、路径、以及其他相关的header
- 第三步:服务器在收到请求以后会给客户端一个响应报文,其格式与请求报文类似,但里面包含最主要的信息就是
响应状态码(访问成功与失败通过状态码告诉客户端)、响应类型:由Content-Type指定、以及其他相关的Header、
其次就是Body,包含响应的内容,网页的HTML源码就在Body中。 - 第四步:果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。
(4)需要了解的响应状态码
100-199表示消息中包含一个临时的信息响应, 200-299表示请求成功,300-399表示请求需要被重定向到另一个资源,400-499表示客户 端发生了一个不应该重复的错误,500-599表示服务器端遇到了一个错误。
具体:
- 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
- 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
- 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
- 204 NO CONTENT - [DELETE]:用户删除数据成功。
- 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
- 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
- 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
- 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
- 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
- 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
- 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
- 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
(5)http与https的区别
1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
(6)长连接与短链接
短链接:客户端与服务端通信,发送数据。每发送一次数据,必须得进行三次握手四次挥手。如果想要发送多个数据,就会不停的三次握手四次挥手,这样不断的进行三次握手四次挥手,很浪费资源。
长连接:三次握手建立连接以后,不马上断开,知道数据发完之后才断开。
其特点导致各有利弊,看应用场景。
(如果一个游戏,用户登录以后先当于长连接,客户端与服务端不断进行交互,但如果你长时间不断开就会被强制中断,因为占用资源。)
(如果一个web服务器,就没必要长连接,访问完就立刻中断,如果很多给一直连着,服务器会因为被占用过多导致性能下降。)
6.restful API
restful API 是基于HTPP的一种协议,他的出现,就是为了给移动端、PC机、以及其他展示媒介的前端,与后台服务器互动的一种规范。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
那什么是rest,为什么要rest呢,rest就是指用url定位资源,用HTTP动词描述操作。
- 原则
- 资源。网络实体,文本,歌曲,图片。HTML XML JSON
- 统一接口,通过HTTP动词实现
- URI:同定位资源的方式,即URL
- 无状态的
- URL里有API版本号,不能有动词。如果记录数量过多的话,会过滤
7.Cookie和Session的区别?
Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
8.Session与JWT
都是为了身份提供者和身份认证者之间传递用户身份信息,多用于在用户登录上。
- 而区别就在于:由于http是无状态的,所以当用户登陆以后,为了使客户端与服务端能够保持通信,会在客户端,也就是浏览器保存一个cookie,在服务器保存一个session。但session会保存一段时间之后才会消失,所以当用户过多的时候,会增加服务器的压力。
而JWT采用的则使另外一种方式。它仅仅在客户端形成token,每次在请求时只需携带token,服务端进行认证解析即可,更加的轻量级。
JWT构成简单,占用字节小,便于传输。
9.ip地址、子网掩码地址、网关地址
1.MAC地址:
- 纯纯的物理地址,是唯一的,由网卡决定的。在osi七层中的链路层,MAC通信使用的是介质间进行通信,如光纤同轴电缆等。
2.外网与内网
- 外网:局域网,一个区域下多台计算机的专用网,ip地址是一个
- 内网:每台计算机在专用网上的IP地址
- 比如:就像我的电脑的ip(内网)是192.168.1.189,而公司的网络即局域网专用网(外网)是183.194.37.2,一个局域网可映射出多个内网IP,且同一局域网下的主机可互相访问。
3.ip地址
- ip地址分为网络地址和主机地址两部分,分配给这两部分的位数随地址类(A类、B类、C类等)的不同而不同。
- 网络地址用于路由选择,而主机地址用于在网络或子网内部寻找一个单独的主机。
- 一个IP地址使得将来自源地址的数据通过路由而传送到目的地址变为可能。
4.子网掩码
- 子网掩码的作用就是将ip地址拆分成上述两部分。长度为32位,左边是网络位,用二进制1表示;右边是主机位用二进制0表示。而常用是255.255.255.0或
255.255.0.0两种。 - 如255.255.255.0的子网掩码表达的就是1有24个,0有8个,那它所对应的ip地址右边8位就是主机号。
- 注:(子网掩码是“255.255.255.0”的网络:最后面一个数字可以在0~255范围内任意变化,因此可以提供256个IP地址。但是实际可用的IP地址数量是256-2
即254个,因为主机号不能全是“0”或全是“1”。)
5.默认网关
- 网关是路由器,充当着转换转发数据包的角色,网关是一个翻译器、一个连接内部网与internet上其他网的中间件。