2018年秋招运维岗常见计算机网络基础知识点总结

静态变量和非静态变量的区别:

静态变量被所有的对象所共享,在内存中只有一个副本,当且仅当类在初次加载会被初始化。
非静态常量是对象所拥有的,在创建对象的时候被初始化存在多个副本,static在不同实例中地址一样,存在全局区。

僵尸进程和孤儿进程:

僵尸进程:一个子进程在其父进程还没有调用wait或waitpid()情况下退出。
孤儿进程:一个父进程在子进程运行时退出,孤儿进程将被init进程所收养。
僵尸进程会导致浪费资源,孤儿进程不会。

TCP的三次握手和四次挥手:

三次握手过程:

这块容易忽略一种监听状态,也就是LISTEN状态。
1.建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认。
2.服务器收到SYN包,必须确认客户端的SYN,同时自己也发送一个SYN+ACK包,此时服务器进入SYN-RECV状态。
3.客户端收到ACK+SYN包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

四次挥手过程:

A发送释放请求:
TCP连接的释放一共需要四步,因此称为『四次挥手』.我们知道,TCP连接是双向的,因此在四次挥手中,
前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接.
第一次挥手:
若A认为数据发送完成,则它需要向B发送连接释放请求.该请求只有报文头,头中携带的主要参数为:
FIN=1,seq=u.此时,A将进入FIN-WAIT-1状态.
FIN=1表示该报文段是一个连接释放请求.
seq=u,u-1是A向B发送的最后一个字节的序号.

B回应释放的应答,A到B连接已经断掉:
第二次挥手:
B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放.
此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含: ACK=1,seq=v,ack=u+1.
ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答.
seq=v,v-1是B向A发送的最后一个字节的序号.
ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节.A收到该应答,
进入FIN-WAIT-2状态,等待B发送连接释放请求.

B发送释放请求:
第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。
但B到A方向的连接仍然存在,B可以继续向A发送数据。
第三次挥手:
当B向A发完所有数据后,向A发送连接释放请求,请求头中包含:
FIN=1,ACK=1,seq=w,ack=u+1.随后B进入LAST-ACK状态.

A回应释放的应答,B到A连接已经断掉:
第四次挥手:
A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态.该状态会持续2MSL时间,
若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB.当B收到确认应答后,也便进入CLOSED状态,撤销TCB.

在第四次挥手时,为什么A要先进入TiME-WAIT状态,等待2MSL时间才进入closed状态?

为了保证B能收到A的确认应答,若A发送完应答直接进入CLOSED状态,如果该应答丢失,B等待超时后会重新发送释放请求,
但此时A已经关闭,不会有任何响应,因此B永远无法正常关闭。

TCP连接的11种状态:

1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN
2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立
一个连接.之后状态置为SYN_SENT
3)、SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV
4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。

5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后
进入FIN_WAIT1状态
6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求,并进入CLOSE_WAIT. 
7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了FIN-WAIT-2
8) 、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP
也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK
9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态。等待足够的时间以确
保远程TCP接收到连接中断请求的确认。
10)、CLOSING: 比较少见等待远程TCP对连接中断的确认
11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。

TCP和UDP的区别:

TCP--传输控制协议,面向连接,可靠的字节流服务,在客户端和服务器交换数据前,必须在双方建立一个TCP连接才
可以传输数据,TCP提供超时重发,丢弃重复数据,检验数据,流量控制,保证数据从一端到另外一端。
UDP---用户数据报协议,面向无连接的,是一个简单的面向数据报的传输协议,UDP不提供可靠性,只是把应用程序
传递给IP层的数据报发送出去,并不可保证是否到达,UDP传输不需要建立连接,且没有超时重发等机制,传输速度快。
TCP		 ------   UDP
打电话  ------     发短信

TCP和UDP的应用场景:

	若通信数据完整性需让位于通信实时性,则应该选择TCP协议。(文本传输,重要状态的更新等),反之则使用
	UDP协议(如视频传输,实时通信等)
	
	TCP协议适用于对效率要求相对低,但对准确性要求相对高的场景下,或者是有一种连接概念的场景下;而UDP
	协议适用于对效率要求相对高,对准确性要求相对低的场景。
	
	TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢)远程登录(TELNET SSH 对数据
	准确性有一定要求,有连接的概念)等等;UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,
	但速度必须快),在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受
	的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。
	
	比如,TCP可以用于网络数据库,分布式高精度计算系统的数据传输;UDP可以用于服务系统内部之间的
	数据传输,因为数据可能比较多,内部系统局域网内的丢包错包率又很低,即便丢包,顶多是操作无效,
	这种情况下,UDP经常被使用。

TCP的流量控制:

	如果发送方发送数据过快,接收方来不及接受不造成数据的丢失。
	TCP的流量控制利用滑动窗口机制来实现的,接收方在返回的ACK包中会包含自己的接受窗口大小,以控制发送方的数据发送。
问题:当ACK报文丢失,出现A等待B确认,B等待A发送数据的死锁状态。
	利用rwnd值实现接收方对发送方的流量控制。
	当A收到rwnd=0时,启用持续计时器,时间到了则发送一个探测报文,询问B是否很忙或者ACK丢失,B回应自身接受窗口大小
	,若返回仍为0,则重复步骤。

TCP的拥塞控制:

网络的需求超过自己的工作极限出现拥塞,拥塞控制是为了防止过多的数据注入到网络中,可以使网络中的路由器或者链路不过载。
1.慢开始和拥塞避免结合。
慢开始是指发送数据开始,并不清楚网络中的负荷情况,会先发送一个字节试探报文,以指数类推。
小于门槛值,使用慢开始算法加倍。
大于门槛值使用拥塞避免算法缓慢加1。

快重传和快恢复算法:

快重传和快恢复算法旨在快速恢复丢失的数据包。快重传当接受方发现M3丢失,则立即发送对M2的重复确认,一旦发送方
接连收到三个M2的重复确认,立即重传M3,也就是发送方收到第四个确认时。
快恢复算法:
当发送方在cmnd=24连续收到三确认,把慢开始门限值减半为12.
用拥塞避免算法替换慢开始算法使拥塞窗口缓慢放大。

SYN攻击以及解决办法:

SYN攻击就是利用TCP协议的缺陷,来导致系统服务器停止正常的响应。
SYN攻击原理:
TCP在发送数据前需要经过三次握手,SYN攻击的原理就是向服务器发送SYN数据包,并伪造源IP地址,在服务器收到SYN包
时,会将连接加入backlog队列,并向源IP发送SYN-ACK数据包并等待ACK,以完成三次连接。由于源IP地址是伪造的不存在的
主机IP,所以服务器无法收到ACK包并不断重发,同时backlog队列会被不断攻击的SYN连接占满,导致无法处理正常的连接。
SYN攻击处理:
1.减少ACK包的重发次数。
2.使用SYN cookie技术,返回SYN-ACK包时,不分配专门的数据包,根据SYN包计算出一个cookie值,在服务器收到SYN-ACK
包时,利用cookie值检测是否合法,若合法再分配数据包。
3.增加backlog队列(默认为1024)
4.限制SYN并发数。

后退n帧协议和选择重传协议:

后退n帧协议:
发送窗口的大小为n,接收的大小仍为1,这里假设n=9,发送方一次发送10个帧,前两个帧已经正确返回,后面的帧出现错误,
发送方要重新发送2-8,接收方也必须丢失之前接受的3-8这几个帧。
选择重传协议:
为了解决后退n帧协议的总要重发该帧之后的所有帧,会导致进一步恶化网络,接收方首先缓存所有收到的帧,某个帧出现错误时
只重传该帧,只有当某个序号之后所有帧正确收到后,才一起提交给高层应用,缺点在于需要更多的缓存。

对称加密和非对称加密:

对称加密是指加密和解密用的是同一种密钥。
非对称加密指的是:加密和解密使用不同的密钥,一把作为公钥,一把作为私钥。

多线程和多进程的区别:

多进程可以轻松的实现并发,多进程相对于多线程更加独立,可以不在同一台机器执行不同的代码,保持线程同步需要线程锁。

ARP欺骗:

核心思想就是向目标主机发送伪造的ARP应答,并使目标主机接受应答中伪造的IP地址与mac地址之间的映射对,
从此更新目标主机的ARP缓存。

BGP和OSPF的区别:

BGP:用来处理不同网络之间的协议。
OSPF:用来处理同一网络内部的链路协议。

什么是IPV4和IPV6?

IPV4指的是地址位数是32位,最多有2的32次方位主机可以连接到Internat。
IPV6采用128位地址空间,几乎不受限制的提供地址。

路由器和交换机有什么区别:

1.路由器可以给你的局域网自动分配IP,虚拟拨号,交换机只是用来分配网络数据的。
2.路由器在网络层,根据IP寻址,路由器可以处理TCP/IP协议,交换机不可以,交换机
在中继层,根据MAC寻址。
3.路由器可以把一个IP分配给很多主机使用,这些主机对外只表现出一个IP,交换机可以
把很多主机连接起来,这些主机对外表现不同IP。
4.路由器可以提供防火墙,交换机不提供该功能。

进程和线程的区别:

1.进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。
2.同一个进程可以包含多个线程,并且线程共享整个进程的所有资源,一个进程至少包含一个线程。
3.进程结束后所有线程都会销毁,而线程的结束不会影响进程中其他线程的约束。
4.线程是轻两级的进程,他的创建和销毁所需时间比进程小很多。
5.线程的执行一般都需要进行同步和互斥,因为他们共享同一个进程的所有资源。

阻塞,非阻塞,同步,异步:

阻塞:用户进程访问数据时,如果未完成IO,等待IO操作完成或者进行系统调用来判断IO是否完成。
非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成。
同步:用户进程发起IO(就绪判断后),轮询内核状态。
异步:用户进程发起IO后,可以做其他事情等待内核通知。

死锁的概念以及产生原理

概念:多个并发进程因争夺资源而产生相互等待的现象。发生死锁的进程进行不下去,所持有资源无法释放,导致
CPU吞吐量下降会浪费系统资源影响CPU性能。
原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,产生死锁。
本质原因:
1.系统资源有限
2.进程推送顺序不合理
死锁产生的4个必要条件:
1.互斥:某种资源只允许一个进程访问,其他进程不可访问。
2.占有且等待:一个进程本身占有资源,同时还有资源未满足等待其他进程释放资源。
3.不可抢占:别人已经占有了某项资源。
4.循环等待:存在一种进程链,使得每个进程占有下一个进程所需的至少一种资源。
避免死锁的方法:
1.死锁的预防----确保系统不会进入死锁
由于互斥是非共享必须的,破坏其他的三个条件。
2.避免死锁-----在使用前进行判断,只允许不会产生死锁的进程申请资源。
3.死锁的检测与解除-----在检测到运行系统进入死锁进行恢复。

操作系统常见的进程调度算法:

1.先来先服务(FCFS)
2.最短作业优先,时间短的进程优先分派(SJF)
3.最高响应比优先法(HRRN)
4.时间片轮转算法(RR)
5.多级反馈调度算法

分页和分段有什么区别:

1.页是信息的物理单位,分页是为了实现离散分配方式,分段的目的是为了更好地满足用户需要。
2.页的大小固定,段的长度不固定。
3.分页是单一的线性空间,分段是二维的作业地址。

OSI四层模型:

应用层
传输层
网络互连层
网际层

OSI七层模型以及各层对应服务:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/82964253