计算机网络基础知识
前言
作为【面试系列】文章的开始,首先对计算机网络相干常识进行总结,此篇文章次要讲述根底的网络体系结构、TCP 协定、单点登录等,后续会进行更多计算机网络常识的分享,欢送关注!
1. 网络体系结构
1.1、OSI 模型
1.2、<font color=”green”>TCP/IP 模型 </font>
- OSI 的七层协定体系结构的概念分明,实践也较完整,但它 既简单又不实用,TCP/IP 体系结构则不同,但它当初却失去了十分宽泛的利用
- TCP/IP 网络模型,个别是五层模型,然而也能够分为四层,就是 把链路层和物理层都示意为网络接口层
1.3、各层性能
物理层
- 该层为下层协定提供了一个传输数据的牢靠的物理媒体。简略的说,物理层确保原始的数据可在各种物理媒体上传输。
数据链路层
- 数据链路层为网络层提供牢靠的数据传输
- 根本数据单位为帧 ,次要的协定为 以太网协定
- 两个重要设施名称:网桥和交换机
<font color=”green”> 网络层 </font>
- 网络层负责抉择适合的网间路由和替换结点,确保计算机通信的数据及时传送。此外,网络层还能够实现拥塞管制、网际互连等性能
- 根本数据单位为 IP 数据报
-
蕴含的次要协定为:
- IP 协定(Internet Protocol,因特网互联协定)
- ICMP 协定(Internet Control Message Protocol,因特网管制报文协定);
- ARP 协定(Address Resolution Protocol,地址解析协定);
- RARP 协定(Reverse Address Resolution Protocol,逆地址解析协定)。
- 重要的设施:路由器
传输层
- 传输层负责将下层数据分段并提供端到端的、牢靠的或不牢靠的传输以及端到端的差错控制和流量管制问题
-
蕴含的次要协定:
- TCP 协定(Transmission Control Protocol,传输控制协议)、
- UDP 协定(User Datagram Protocol,用户数据报协定);
- 重要设施:网关
应用层
- 应用层通过利用过程间的交互来实现特定网络应用
- 数据传输根本单位为 报文
-
蕴含的次要协定为:
- FTP(文件传送协定)
- Telnet(近程登录协定)
- DNS(域名解析协定)
- SMTP(邮件传送协定)
- POP3 协定(邮局协定)
- HTTP 协定(Hyper Text Transfer Protocol)
2. 单点登录
单点登录全称 Single Sign On(简称 SSO),是指 在多零碎利用群中登录一个零碎,便可在其余所有零碎中失去受权而无需再次登录,包含单点登录与单点登记两局部
单点登录
- 相比于单零碎登录,sso 须要一个独立的认证核心,只有认证核心能承受用户的用户名明码等平安信息,其余零碎不提供登录入口,只承受认证核心的间接受权。间接受权通过令牌实现,sso 认证核心验证用户的用户名明码没问题,创立受权令牌,
- 在接下来的跳转过程中,受权令牌作为参数发送给各个子系统,子系统拿到令牌,即失去了受权,能够借此创立部分会话,部分会话登录形式与单零碎的登录形式雷同。这个过程,也就是单点登录的原理
单点登记
单点登录天然也要单点登记,在一个子系统中登记,所有子系统的会话都将被销毁 。用户登录胜利之后,会与 sso 认证核心及各个子系统建设会话, 用户与 sso 认证核心建设的会话称为全局会话,用户与各个子系统建设的会话称为部分会话,部分会话建设之后,用户拜访子系统受爱护资源将不再通过 sso 认证核心,全局会话与部分会话有如下束缚关系
- 部分会话存在,全局会话肯定存在
- 全局会话存在,部分会话不肯定存在
- 全局会话销毁,部分会话必须销毁
sso 认证核心始终监听全局会话的状态,一旦全局会话销毁,监听器将告诉所有注册零碎执行登记操作
JWT
JWT(json web token)机制 是可能让你的浏览器具备记忆能力的一种机制。与 Cookie 不同,JWT 是保留在客户端的信息,它 宽泛的利用于单点登录的状况。JWT 具备两个特点:
- JWT 的 Cookie 信息存储在客户端,而不是服务端内存中。也就是说,JWT 间接本地进行验证就能够,验证结束后,这个 Token 就会在 Session 中随申请一起发送到服务器,通过这种形式,能够节俭服务器资源,并且 token 能够进行屡次验证。
- JWT 反对跨域认证,Cookies 只能用在单个节点的域或者它的子域中无效。如果它们尝试通过第三个节点拜访,就会被禁止。应用 JWT 能够解决这个问题,应用 JWT 可能通过多个节点进行用户认证,也就是咱们常说的跨域认证。
用户登录鉴权流程
- 用户应用用户名明码申请服务器
- 服务器进行验证用户信息
- 服务器通过验证后发送给用户一个 token
- 客户端存储 token,并在每次申请时附送上这个 token 值
- 服务端验证 token 值,并返回数据
3. TCP 协定
- TCP 是一种 面向连贯的、牢靠的、基于字节流的传输层通信协议 ,在发送数据前,通信单方必须在彼此间建设一条连贯。 所谓的“连贯”,其实是客户端和服务端保留的一份对于对方的信息,如 ip 地址、端口号等。
- TCP 能够看成是一种字节流,它会解决 IP 层或以下的层的丢包、反复以及谬误问题。在连贯的建设过程中,单方须要替换一些连贯的参数。这些参数能够放在 TCP 头部。
- 一个 TCP 连贯由一个 4 元组形成,别离是两个 IP 地址和两个端口号。一个 TCP 连贯通常分为三个阶段:连贯、数据传输、退出(敞开)。通过三次握手建设一个链接,通过四次挥手来敞开一个连贯。
- 当一个连贯被建设或被终止时,替换的报文段只蕴含 TCP 头部,而没有数据
3.1、TCP 报文头部构造
上图中有几个字段须要重点介绍下:
(1)序号:seq 序号 , 占 32 位 ,用来 标识从 TCP 源端向目标端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:ack 序号 , 占 32 位 只有 ACK 标记位为 1 时,确认序号字段才无效,ack=seq+1。
(3)标记位 : 共 6 个,即 URG、ACK、PSH、RST、SYN、FIN 等,具体含意如下:
- ACK:确认序号无效。
- FIN:开释一个连贯。
- PSH:接管方应该尽快将这个报文交给应用层。
- RST:重置连贯。
- SYN:发动一个新连贯。
- URG:紧急指针(urgent pointer)无效。
须要留神的是: - 不要将确认序号 ack 与标记位中的 ACK 搞混了。
- 确认方 ack= 发起方 seq+1,两端配对。
3.2、<font color=”red”> 三次握手 </font>
- 首先,我让信使运输一份函件给对方,对方收到了,那么他就晓得了我的发件能力和他的收件能力是能够的。
- 于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是能够的,并且他的发件能力和我的收件能力是能够。
- 然而此时他还不晓得他的发件能力和我的收件能力到底可不可以,于是我最初回馈一次,他若收到了,他便分明了他的发件能力和我的收件能力是能够的。
-
三次握手的实质是确认通信单方收发数据的能力
-
刚开始客户端处于
Closed
的状态,服务端处于Listen
状态。进行三次握手:-
第一次握手:客户端给服务端发一个
SYN
报文,并指明客户端的初始化序列号ISN(c)
。此时 客户端处于SYN_SEND
状态。首部的同步位
SYN=1
,初始序号seq=x
,SYN=1
的报文段不能携带数据,但要消耗掉一个序号。 -
第二次握手:服务器收到客户端的
SYN
报文之后,会以本人的 SYN 报文作为应答,并且也是指定了本人的初始化序列号ISN(s)
。同时会把客户端的ISN + 1
作为 ACK 的值,示意本人曾经收到了客户端的SYN
,此时服务器处于SYN_RCVD
的状态。在确认报文段中
SYN=1
,ACK=1
,确认号ack=x+1
,初始序号seq=y
。 -
第三次握手:客户端收到
SYN
报文之后,会发送一个ACK
报文,当然,也是一样把服务器的ISN + 1
作为ACK
的值,示意曾经收到了服务端的SYN
报文,此时客户端处于ESTABLISHED
状 态。服务器收到 ACK 报文之后,也处于ESTABLISHED
状态,此时,单方已建设起了连贯。确认报文段
ACK=1
,确认号ack=y+1
,序号seq=x+1
(初始为seq=x
,第二个报文段所以要 +1),ACK
报文段能够携带数据,不携带数据则不耗费序号。
-
第三次握手的时候,是能够携带数据的。然而,第一次、第二次握手不能够携带数据,为了避免服务端受到歹意攻打,如果每次握手能够携带数据,一些歹意申请在握手时携带大量垃圾数据包,服务端解析能力无限,申请较多时,会产生解体
<font color=”red”>3.3、四次挥手 </font>
四次挥手的目标是敞开一个连贯
-
刚开始单方都处于
ESTABLISHED
状态,如果是客户端先发动敞开申请。四次挥手的过程如下:- 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于
FIN_WAIT1
状态 。即收回 连贯开释报文段(FIN=1,序号 seq=u),并进行再发送数据,被动敞开 TCP 连贯,进入 FIN_WAIT1(终止期待 1)状态,期待服务端的确认。 - 第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明曾经收到客户端的报文了,此时服务端处于
CLOSE_WAIT
状态。即服务端收到连贯开释报文段后即收回 确认报文段 (ACK=1,确认号 ack=u+1,序号 seq=v), 服务端进入 CLOSE_WAIT(敞开期待)状态 ,此时的 TCP 处于半敞开状态,客户端到服务端的连贯开释。 客户端收到服务端的确认后,进入 FIN_WAIT2(终止期待 2)状态,期待服务端收回的连贯开释报文段。 - 第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此 时服务端处于
LAST_ACK
的状态 。即服务端没有要向客户端收回的数据,服务端收回 连贯开释报文段(FIN=1,ACK=1,序号 seq=w,确认号 ack=u+1),服务端进入 LAST_ACK(最初确认)状态,期待客户端的确认。 - 第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为本人 ACK 报文的序列号值,此时客户端处于
TIME_WAIT
状态 。须要过一阵子以确保服务端收到本人的 ACK 报文之后才会进入 CLOSED 状态, 服务端收到 ACK 报文之后,就处于敞开连贯了,处于CLOSED
状态 。即客户端收到服务端的连贯开释报文段后,对此收回 确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入 TIME_WAIT(工夫期待)状态。此时 TCP 未开释掉,须要通过工夫期待计时器设置的工夫 2MSL 后,客户端才进入 CLOSED 状态。
收到一个 FIN 只意味着在这一方向上没有数据流动。客户端执行被动敞开并进入 TIME_WAIT 是失常的,服务端通常执行被动敞开,不会进入 TIME_WAIT 状态。
- 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于
3.4、TCP/IP 协定族
TCP(传输控制协议)和 IP(网际协议)是最先定义的两个外围协定,所以才统称为 TCP/IP 协定族
TCP 是面向连贯的通信协议,通过三次握手建设连贯,通信实现时要拆除连贯,因为 TCP 是面向连贯的所以只能用于端到端的通信。TCP 提供的是一种牢靠的数据流服务,采纳“带重传的必定确认”技术来实现传输的可靠性。TCP 还采纳一种称为“滑动窗口”的形式进行流量管制,所谓窗口理论示意接管能力,用以限度发送方的发送速度。
- TCP 是传输控制协议,提供面向连贯的,基于字节流的,牢靠的数据传输服务,只能进行一对一通信,首部最小 20 字节,最大 60 字节,实用于要求牢靠传输的利用,比方文件传输、发送和接管邮件等场景。
- UDP 是用户数据协定,提供无连贯的,基于报文的数据传输服务,不保障数据传输的可靠性。反对一对一,一对多,多对多等交互通信形式,首部开销小,仅 8 字节,实用于实时利用,比方视频会议、直播等。
<img src=”https://tva1.sinaimg.cn/large/008i3skNgy1gstjzasql7j30lc0eogma.jpg” alt=”TCP/IP 协定群 ” />
<font color=”red”>4. TCP 可靠性传输 </font>
TCP 如何保障可靠性传输,是面试中常被问到的问题,答复的时候肯定要保障本人的条理性,先说清次要形式,而后再由点及面,一步一步扩宽广度!
- 利用数据被宰割成 TCP 认为最适宜发送的数据块。
- TCP 给发送的每一个包进行编号,接管方对数据包进行排序,把有序数据传送给应用层。
- 校验和: TCP 将放弃它 首部和数据的测验和 。这是一个端到端的测验和, 目标是检测数据在传输过程中的任何变动。如果收到段的测验和有过错,TCP 将抛弃这个报文段和不确认收到此报文段。
- TCP 的接收端会抛弃反复的数据。
- 流量管制: TCP 连贯的每一方都有固定大小的缓冲空间,TCP 的接收端只容许发送端发送接收端缓冲区能接收的数据。当接管方来不及解决发送方的数据,能提醒发送方升高发送的速率,避免包失落。TCP 应用的流量控制协议是可变大小的滑动窗口协定。(TCP 利用滑动窗口实现流量管制)
- 拥塞管制: 当网络拥塞时,缩小数据的发送。
- ARQ 协定: 也是为了实现牢靠传输的,它的基本原理就是每发完一个分组就进行发送,期待对方确认。在收到确认后再发下一个分组。
- 超时重传: 当 TCP 收回一个段后,它启动一个定时器,期待目标端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
4.1、重传机制
TCP 针对数据包失落的状况,会用 重传机制 解决。上面为几种常见的重传机制:
- 超时重传
- 疾速重传
- SACK
- D-SACK
超时重传
重传机制的其中一个形式,就是 在发送数据时,设定一个定时器,当超过指定的工夫后,没有收到对方的 ACK
确认应答报文,就会重发该数据 ,也就是咱们常说的 超时重传。
超时触发重传存在的问题是,超时周期可能绝对较长。于是就能够用「疾速重传」机制来解决超时重发的工夫期待。
疾速重传
疾速重传(Fast Retransmit)机制 ,它 不以工夫为驱动,而是以数据驱动重传。
<img src=”https://tva1.sinaimg.cn/large/008i3skNgy1gstjz1cr7rj30hz0gqgmq.jpg” alt=”img” />
疾速重传的工作形式 是当收到三个雷同的 ACK 报文时,会在定时器过期之前,重传失落的报文段。
疾速重传机制只解决了一个问题,就是超时工夫的问题,然而它仍然面临着另外一个问题。就是重传的时候,是重传之前的一个,还是重传所有的问题。为了解决不晓得该重传哪些 TCP 报文,于是就有 SACK
办法
SACK
还有一种实现重传机制的形式叫:SACK
(Selective Acknowledgment 选择性确认)。
这种形式须要 在 TCP 头部「选项」字段里加一个 SACK
的货色 ,它 能够将缓存的地图发送给发送方 ,这样发送方就能够晓得哪些数据收到了,哪些数据没收到,晓得了这些信息,就能够 只重传失落的数据。
D-sack
Duplicate SACK 又称 D-SACK
,其次要 应用了 SACK 来通知「发送方」有哪些数据被反复接管了。
4.2、滑动窗口和流量管制
TCP 利用滑动窗口实现流量管制。流量管制是为了管制发送方发送速率,保障接管方来得及接管。 接管方发送的确认报文中的窗口字段能够用来管制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
4.3、拥塞管制
在某段时间,若对网络中某一资源的需要超过了该资源所能提供的可用局部 ==,网络的性能就要变坏。这种状况就叫拥塞 。 拥塞管制就是为了避免过多的数据注入到网络中,这样就能够使网络中的路由器或链路不致过载。拥塞管制所要做的都有一个前提,就是网络可能接受现有的网络负荷。
为了进行拥塞管制,TCP 发送方要维持一个 拥塞窗口 (cwnd) 的状态变量。 拥塞管制窗口的大小取决于网络的拥塞水平,并且动态变化。发送方让本人的发送窗口取为拥塞窗口和接管方的承受窗口中较小的一个。
TCP 的拥塞管制采纳了四种算法 ,即 慢启动 、 拥塞防止 、 快重传 和 快复原。在网络层也能够使路由器采纳适当的分组抛弃策略(如被动队列治理 AQM),以缩小网络拥塞的产生。
- 慢启动: 慢启动算法的思路是 当主机开始发送数据时,如果立刻把大量数据字节注入到网络,那么可能会引起网络阻塞 ,因为当初还不晓得网络的合乎状况。教训表明, 较好的办法是先探测一下,即由小到大逐步增大发送窗口,也就是由小到大逐步增大拥塞窗口数值。cwnd 初始值为 1,每通过一个流传轮次,cwnd 加倍。
- 拥塞防止: 从慢启动能够看到,cwnd 能够比拟快的增长,然而不能始终有限增长,须要某个限度,TCP 应用了 ssthresh 的变量,当 cwnd 超过这个值后,慢启动过程完结,进入拥塞防止阶段。拥塞防止的次要思维是加法增大,也就是让 cwnd 的值线性减少,cwnd 的值随着 RTT 线性减少,这样就能够防止增长过快导致网络拥塞,缓缓的减少到网络的最佳值。
- 快重传与快复原: 在 TCP/IP 中,疾速重传和复原(fast retransmit and recovery,FRR)是一种拥塞控制算法,它 能疾速复原失落的数据包 。没有 FRR,如果数据包失落了,TCP 将会应用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接管到一个不按程序的数据段,它会立刻给发送机发送一个反复确认。如果发送机接管到三个反复确认,它会假设确认件指出的数据段失落了,并立刻重传这些失落的数据段。有了 FRR,就不会因为重传时要求的暂停被耽搁。当有独自的数据包失落时,疾速重传和复原(FRR)能最无效地工作。 当有多个数据信息包在某一段很短的工夫内失落时,它则不能很无效地工作。
末
计算机网络波及常识较多较杂,我会加紧更新【面试系列】文章,心愿各位大哥大姐能点个再看啊,欢送继续关注!