计算机网络

计算机网络

计算机网络:是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。
按分布范围,计算机网络里有
局域网LAN和广域网WAN, 其中局域网的代表以太网,
以及这两种网络最重要的区分点,局域网基于广播技术,广域网基于分组交换技术。

网络层次划分

为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。
它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:
物理层(Physics Layer)、
数据链路层(Data Link Layer)、
网络层(Network Layer)、
传输层(Transport Layer)、
会话层(Session Layer)、
表示层(Presentation Layer)、
应用层(Application Layer)。
其中第四层完成数据传送服务,上面三层面向用户。

OSI参考模型是网络互连的七层框架。

除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:
请添加图片描述

OSI七层网络模型

TCP/IP协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。不管是OSI七层模型还是TCP/IP的四层、五层模型,每一层中都要自己的专属协议,完成自己相应的工作以及与上下层级之间进行沟通。
请添加图片描述

请添加图片描述

TCP/IP协议

TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

三次握手和四次挥手

TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
请添加图片描述

注:seq:"sequance"序列号;
SYN:"synchronize"请求同步标志; ACK:“acknowledge"确认标志”;FIN:"Finally"结束标志。
TCP最关键的三个步骤:三次握手、传输确认、四次挥手。

三次握手是建立连接的过程:

  1、当客户端向服务器端发起连接时候,会先发一包连接请求数据,过去询问一下,能否与你建立连接,这包数据成为SYN包
  2、如果对端同意连接,则回复一包SYN+ACK包
  3、客户端收到之后回复一包ACK包

为什么是三次握手而不是两次握手

服务端回复完SYN+ACK之后就建立连接呢?
这是为了防止因为已经失效的请求报文,突然又传到服务器引起错误。
假设采用两次握手建立连接,客户端向服务端发送一个SYN包来请求建立连接,因为某些未知的原因,并没有到达服务器,在中间某个网络节点产生了滞留,
为了建立连接客户端会重发SYN包,这次数据包正常送达,服务端回复SYN+ACK之后建立起了连接,但是第一包数据阻塞的网络节点突然恢复,第一包SYN包
又送达到服务器,这时服务端会误认为是客户端又发起了一个新的连接,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手情 况下,服务端收不到最后的ACK包,自然不会认为连接建立成功,所以三次握手本质上来说就是为了解决网络信道不可靠的问题,
为了能在不可靠的 信道上建立可靠的连接,经过三次握手之后客户端和服务端都进入数据传输状态。

四次挥手

处于连接状态的客户端和服务端都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭,
1、假设客户端主动发起了连接关闭请求,他需要向服务端发起一包FIN包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手
2、服务端收到FIN包,发送一包ACK包,表示自己进入关闭等待状态,客户端进入终止等待2状态,这是第二次挥手,此时服务端还可以发送未发送的数据。
而客户端还可以接受数据。
3、待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手,
4、客户端收到之后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包之后,立即关闭连接,这是第四次挥手。

为什么客户端需要等待超时时间:

这是为了保证对方已经收到ACK包,因为假设客户端发送最后一包ACK包后就释放了连接,一旦ACK包在网络中丢失服务端将一直停留在最后确认状态。
如果客户端发送最后一包ACK包后,等待一段时间,这时服务端因为没有收到ACK包,会重发FIN包,客户端会响应这个FIN包,重发ACK包并刷新超时时间,
这个机制跟三次握手一样,也是为了保证在不可靠的数据链路中进行可靠的连接断开确认。

总结

二次握手就可以建立链接,三次握手是为了防止丢包的链接被服务端等待(syn~ syn ack~ack)
四次挥手(finackfin~ack)是因为服务端有未发送完的数据。所以需要服务端连续发两次分别是Ack和Fin。
同时客户端最后的等待也是为了确保服务端收到ASK请求,如果过了等待时间则认为服务端已经关闭

使用TCP的协议

FTP(文件传输协议)、
Telnet(远程登录协议)、
SMTP(简单邮件传输协议)、
POP3(和SMTP相对,用于接收邮件)、
HTTP协议等。

UDP协议

UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
  UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询—应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。

每个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:
  (1)源端口号;
  (2)目标端口号;
  (3)数据报长度;
  (4)校验值。
  使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。

TCP 与 UDP 的区别:

相同点:
都是在传输层,在程序之间传输数据。
不同点:
TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。
在日常生活中,常见使用TCP协议的应用如:浏览器,用的HTTP;FlashFXP,用的FTP;Outlook,用的POP、SMTP;Putty,用的Telnet、SSH;QQ文件 传输

UDP的应用:当强调传输性能而不是传输的完整性时, 要求网络通讯速度能尽量的快。如:QQ语音 QQ视频等。

传输层两个好兄弟大哥tcp,二弟udp大哥靠谱,二弟不靠谱。

DNS协议

DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,域名和IP地址的映射。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。

DHCP协议

DHCP动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。 所有的WWW文件都必须遵守这个标准。

HTTP 协议包括哪些请求?

GET:请求读取由URL所标志的信息。  
POST:给服务器添加信息(如注释)。  
PUT:在给定的URL下存储一个文档。  DELETE:删除给定的URL所标志的资源。

HTTP 中, POST 与 GET 的区别

1)Get是从服务器上获取数据,Post是向服务器传送数据。  
2)Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。  
3)Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。  
4)根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。  
I. 所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。  
II. 幂等 的意味着对同一URL的多个请求应该返回同样的结果。

HTTP与HTTPS区别

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

Session、Cookie和Token的区别

HTTP协议本身是无状态的。
什么是无状态呢,即服务器无法判断用户身份。

什么是cookie
cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户身份。
什么是session
session是依赖Cookie实现的。session是服务器端对象。
session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。
cookie与session区别
存储位置与安全性:cookie数据存放在客户端上,安全性较差,session数据放在服务器上,安全性相对更高;
存储空间:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,session无此限制。
占用服务器资源:session一定时间内保存在服务器上,当访问增多,占用服务器性能,考虑到服务器性能方面,应当使用cookie。

什么是Token
1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
4、Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位
5、Token常用JWT实现,原来需要客户端需要请求服务端验证session合法性,现在只需要通过算法检验Token是否合法,减少了查数据库或者访问服务器比对用户密码,用户身份的消耗。也就是通过算法和密钥代替了访问数据库或服务器比对的过程

session与token区别
1、session机制存在服务器压力增大,CSRF跨站伪造请求攻击,扩展性不强等问题;
2、session存储在服务器端,token存储在客户端
3、token提供认证和授权功能,作为身份认证,token安全性比session好;
4、session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上,token适用于项目级的前后端分离(前后端代码运行在不同的服务器下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值