OSI七层模型是什么?每一层的作用是什么?
首先要明确七层模型是一个理论上的分层,是抽象的模型体,并没有实际的实现。下面是简单的理解。
-
物理层
物理层的作用是提供了网络的双向通讯,为双向传输提供了有保障的通路。其中定义了四个统一特性:电气特性,机械特性,功能特性,规程特性。 -
数据链路层
交换机就是工作在二层数据链路曾,链路层主要有三个功能:- 提供了通讯过程中用到的mac地址。计算机通讯过程中一共要用到两个地址:一个是物理mac地址,一个是逻辑ip地址。 mac地址就是数据链路层提供的。其实就是我们的网卡地址。
- 负责数据帧转发。数据链路层传输的数据被称为数据帧
- 提供错误检测机制。只能发现问题但不能纠正。
-
网络层
路由器工作在网络层。网络层一共有四个功能:- 提供逻辑ip地址
- 连接不同的媒介类型(内网和外网),使不同的媒介之间可以相互通信。
- 根据路由器运行的不同路由协议选择最佳路径
- 在选好的最佳路径上负责路由数据包
-
传输层
传输层的功能是提供了端口号码的概念。 -
会话层
会话层的作用是负责在应用程序之间建立,维护并解除会话连接 -
表示层
表示层的作用是负责数据加密,提供了四种常见的加密方式:- 对称加密:加密方式和揭秘方式使用相同的密钥
- 非对称加密:一把私钥,N个公钥
- hash 256加密
- 光密
-
应用层
给用户和抽象的网络之间提供一个接口,使得用户可以通过使用应用程序,app,来使用整个6层网络模型。
TCP/IP四层模型是什么?每一层的作用是什么?
上面说到了osi七层模型是一种很理论上的东西,而它落地的实现之一就有tcp/ip四层模型。当然了这种模型感觉是翻译过来的,所以中文名会略有不同,我看到了好多种叫法,但是主要作用是不变的,而且不同名称也类似。我这里用的是一种比较常见的译法:
-
应用层
TCP/IP的应用层对应OSI的应用层,会话层,表示层。主要功能是:- 为用户的应用提供服务并支持网络访问
- 负责管理网络中计算之间的通信,提供传输层不具备的连接相关功能
- 负责转化数据格式,处理数据加密和数据压缩
-
传输层
传输层主要提供以下几个功能:- 提供应用程序接口,为网络应用程序提供网络访问的途径。
- 提供可以从多个应用层接收消息的功能(多路复用),同时可以提供把消息分发给应用程序的功能(多路分解)
- 对数据进行错误检测,流量控制
TCP协议就是一个传输协议,包括下面几个特性:
1.需要三次握手建立连接,四次挥手断开连接
2. 面向流的处理,可以一个个字节的方式接收数据,然后把这些数据组成数据段,发给网际层
3. 对数据发送进行流量控制,避免发送和接收方因为缓存写满造成数据丢失。
4. 对数据进行校验,分段的数据有重排序功能,对错误和丢失的数据有重发机制。
还有一个类似TCP的协议是UDP,UPD不面向连接,错误检测机制不如TCP,也不进行流量控制。但是就因为校验少,所以性能比TCP好。如果不重视数据校验更重视性能的话,可以用UDP。
-
网际层
网际层主要是解决数据由一个计算机的ip如何路由到目标计算机的过程规范。我们的计算机消息发出去之后,经理了哪些处理才能正确的找到目标计算机,其中包括了IP,ARP,RARP,ICMP等协议。
而ip地址是一套有规则的数据组合,通过ip地址可以快速定位到我们的目标计算机区域,和mac组合就能快速找当网络中具体的一台计算机了。 -
网络访问层
主要是管理物理网络准备所需要的数据,包括:- 与计算机网络适配器连接
- 根据合适的方式调整数据传输
- 把数据转化为电子流或者脉冲的形式在传输介质上传输
- 对发送的数据添加错误检查信息,对接收的数据进行数据校验
为什么网络要分层?
可以使得每一层的功能明确,并且各层之间独立,增加了每一层的灵活性。简单来讲分层的优点如下:
- 各层之间独立,把复杂的问题分解为若干个比较容易处理的更小一些的问题。
- 灵活性好,任意一层发生变化时(例如技术变化),只需要层间接口关系保持不变,整体都不受影响。
- 某层提供的服务不需要时可以直接取消。
- 结构上可分割开,各层都采用最合适的技术来实现。
- 易于实现和维护。
- 促进标准化和流程化。
应用层有哪些常见的协议?
HTTP:超文本传输协议
超文本传输协议主要是为web浏览器与web服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们的网页就是通过http请求进行加载的,过程如下:
http协议是基于tcp协议,发送http请求之前首先要建立tcp连接也就是要经历三次握手,目前使用的http协议大部分都是1.1,在1.1的协议里面默认开启了keep-Alive,这样建立的连接可以多次在请求中被复用。
另外http协议是无状态协议,它无法记录客户端用户的状态,一般我们都是通过Session来记录客户端用户的状态。
SMTP:简单邮件传输(发送)协议
简单邮件传输(发送)协议基于TCP协议,用来发送电子邮件。
注意:接收邮件的协议不是SMTP而是POP3协议。
电子邮件的发送过程如下(比如我是163邮箱发送给qq邮箱):
- 通过SMTP协议将写好的邮件交给163邮箱服务器。
- 163邮箱服务器发现我发的是 qq邮箱。它使用SMTP协议将邮件转发到qq邮箱服务器
- qq邮箱服务器接受邮件后,通知收件邮箱来收邮件(用户通过POP3/IMAP协议将邮件取出)
如何判断邮箱是真正存在的?
- 查找邮箱域名对应的SMTP服务器地址
- 尝试与服务器建立连接
- 连接成功后尝试想需要验证的邮箱发送邮件
- 根据返回结果判定邮箱地址的真实性
POP3/IMAP邮件接收的协议
这两个没必要阐述,只要了解都是负责邮件接收的协议即可。不要和SMTP协议搞混了。SMTP协议负责邮件的发送,POP3/IMAP负责邮件的接收。
FTP文件传输协议
FTP协议主要提供文件传输服务。基于TCP实现可靠的传输。使用FTP传输文件的好处是可以屏蔽操作系统和文件存储方式。
FTP是基于客户-服务器模型而设计的,在客户端与FTP服务器之间建立两个连接。如果我们要基于FTP协议开发一个文件传输的软件的话,需要高清FTP的原理。
FTP的独特的优势同时也是其它客户服务器程序最大的不同点在于:它在两台通信的主机之间使用了两条TCP连接(其它客户服务器应用程序一般只有一条TCP连接)
- 控制连接:用于传输控制信息(命令和响应)
- 数据连接:用于数据传送
这种将命令和数据分开传送的思想大大提高了FTP的效率。
Telnet 远程登陆协议
Telnet协议通过一个终端登录到其它服务器,建立在可靠的传输协议TCP之上,Telnet协议最大的缺点之一是所有数据(包括用户名和密码)都是以明文形式发送,有潜在安全风险。这也是Telnet很少使用并被称为SSH的非常安全的协议所取代的主要原因
SSH:安全的网络传输协议
SSH是目前比较可靠,专为远程登陆会话和其它网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH建立在可靠的传输协议TCP之上。
Telnet和SSH之间主要区别在于SSH协议会对传输的数据进行加密保证数据安全性。
TCP与UDP
TCP与UDP的区别
- 是否面向连接:UDP在传输数据之前不需要先建立连接。而TCP提供面向连接的服务。在传输数据之前必须先建立连接,数据传送结束后要释放连接。
- 是否可靠传输:收到UDP报文后不需要给出确认,也不保证数据不丢失,不保证是否顺序送达。TCP提供可靠传输服务,传递数据前会三次握手建立连接,传递数据时有确认,窗口,重传,拥塞控制机制。通过TCP连接传输的数据无差错不丢失不重复且按顺序送达。
- 是否有状态:TCP传输是有状态的,比如TCP会记录自己发送消息的状态,是否发送了,是否被接收了等。为此TCP需要维护复杂的连接状态表。而UDP是无状态的,发出去就不管了。
- 传输效率:因为TCP多了很多机制,所以效率比UDP低。
- 传输形式:TCP的面向字节流的,UDP是面向报文的
- 首部开销:TCP首部开销20-60字节。UDP首部开销8字节
- 是否提供广播或者多播服务:TCP只支持点对点,UDP支持1对1,1对多,多对多。
其实根据上面的特点我们能看出来两个协议重点不一样。TCP更在意准确性从而牺牲了性能,我们可以在准确性要求高的场景使用。比如文件传输,发送和接收文件等。
而UDP则更在意性能而牺牲了准确性,在语音视频的时候使用,丢失几帧的没关系的。
HTTP协议是基于TCP协议的。
使用TCP和UDP的协议分别有哪些?
运行于TCP协议之上的协议:
- HTTP协议
- HTTPS协议:更安全的超文本传输协议,身披SSH外衣的HTTP协议
- FTP协议
- SMTP协议
- POP3/IMAP协议
- Telnet协议
- SSH协议
运行于UDP协议之上的协议:
- DHCP协议:动态主机配置协议,动态配置IP协议
- DNS:域名系统将人类可读的域名转化为机器可读的IP地址。我们可以理解其为转为互联网设计的电话本,实际上DNS同时支持UDP和TCP协议。
TCP三次握手和四次挥手
这个网上很多教程,我这里也不用官方语言讲了,用白话大概说下:
TCP建立连接的时候三次握手(先确定发起方是客户端):
- 第一次握手:客户端发送syn包到服务器,自己进入到syn_sent状态。
- 第二次握手:服务器收到syn包,返回给客户端syn,服务器进入syn_recv状态
- 第三次握手:客户端收到服务器的包并再次发送ack给服务器,双方都进入到established状态
三次握手完成后才正式开始传送数据。
TCP断开连接四次挥手(任意一方都可以主动关闭连接):
- 第一次挥手: 主动关闭方发送fin给另一方,告诉对方不会再发数据了(在这之前已发送还没接收的还正常接收)
- 第二次挥手:被动方收到fin,发ack给对方。告诉对方我知道你不给我发了。
- 第三次挥手:被动方发送fin给主动方,告诉对方我也不会再发数据了。
- 第四次挥手:主动关闭方收到fin后,发ack给被动方。断开连接
在浏览器中输入url显示主页的过程
总的来说分为下面几个过程:
- 浏览器查找域名的ip地址(DNS解析)
- 浏览器向web服务器发送一个http请求
- 服务器处理请求
- 服务器发回HTML响应
- 浏览器显示HTML。
HTTP状态码有哪些?
HTTP和HTTPS有什么区别?
- 端口号:HTTP默认80,HTTPS默认443
- URL前缀:HTTP的前缀是http://,HTTPS的前缀是https://
- 安全性和资源消耗:http协议运行在TCP之上,所传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说我们可以理解为:HTTPS是加了一层的HTTP。所以HTTP性能比HTTPS好,但是安全性没有HTTPS高。
HTTP1.0和HTTP1.1的区别
- 连接方式:1.0为短链接,1.1支持长连接
- 状态响应码:1.1中添加了大量的状态码。
- 缓存处理:1.0中主要使用header里的 If-Modified-Since,Expires来作为缓存判断标准,1.1引入了更多的缓存控制策略。
- 带宽优化以及网络连接的使用:1.1支持断点续传。在请求头中引入了range头域,允许只请求资源的某个部分。
HTTP是不保存状态的协议,如何保存用户状态?
http是一种不保存状态,即无状态的协议。也就是说http协议自身不对请求和响应之间的通信状态进行保存。那么我们如何保存用户状态呢?
session机制解决了这个问题。服务端给特定的用户创建特定的session之后就可以标识这个用户并跟踪这个用户了。
Cookie和Session的区别?
其实两者最大的区别就是Cookie是保存在客户端(浏览器端),而Sission数据保存在服务器端。
URI和URL的区别
- URI是统一资源标识符,可以唯一标识一个资源
- URL是统一资源定位符,可以提供该资源的路径。它是一种具体的URI。不仅可以标识唯一资源,还可以定位该资源的信息。
本篇笔记就记到这里,如果稍微帮到你了记得点个喜欢点个关注,这篇笔记是东拼西凑出来的知识点,比较杂,如果哪里写的有问题欢迎支持,也祝大家工作顺顺利利!