面试知识点总结之网络基础知识

1. OSI的七层网络结构图程序员

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层;TCP/IP的五层结构图:应用层、传输层、网络层、数据链路层、物理层。面试

具体各层的协议、做用见校招面试计算机网络基础知识面试常考点数据库

2. 请问交换机和路由器分别的实现原理是什么?分别在哪一个层次上面实现的?编程

物理层是转发器(repeater),数据链路层是网桥或交换机(根据MAC地址寻址,经过站表选择路由,站表的创建和维护由交换机自动进行),网络层是路由器(router)(它根据IP地址进行寻址,经过路由表路由协议产生),网络层以上是网关(gateway)(网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不一样的网络互连。)浏览器

请你详细的解释一下IP协议的定义,在哪一个层上面,主要有什么做用? TCP与UDP呢?服务器

IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互链接进行通讯而设计的协议。在因特网中,它是能使链接到网上的全部计算机网络实现相互通讯的一套规则,规定了计算机在因特网上进行通讯时应当遵照的规则。任何厂家生产的计算机系统,只要遵照 IP协议就能够与因特网互连互通。正是由于有了IP协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通讯网络。所以,IP协议也能够叫作“因特网协议”。网络协议(IP)是网络上信息从一台计算机传递给另外一台计算机的方法或者协议。网络上每台计算机(主机)至少具备一个IP地址将其与网络上其余计算机区别开。当你发送或者接受信息时(例如,一个电子邮件信息或一个网页),信息被分红几个小块,称为信息包。每一个信息包都包含了发送者和接受者的网络地址。网关计算机读到了目的地址,信息包继续向前到下一个邻近的网关照例读到目的地址,如此一直向前经过网络,直到一个网关确认这个信息包属于其最紧邻或者其范围内的计算机。最终直接进入到其指定地址的计算机。 由于一个信息被分红了许多信息包,若是必要,每一个信息包可以经过网络不一样的路径发送。信息包能按照与它们发送时的不一样顺序到达。网络协议(IP)仅仅是递送他们。IP是一个无链接协议,这就意味着在通讯的终点之间没有连续的线路链接。每一个信息包做为一个处理过的独立的单元在网络上传输,这些单元之间没有相互的联系。(信息包能放在正确的位置上是由于TCP明了信息中信息包顺序的面向链接协议。)网络

IP协议工做在网络层TCP UDP(用户数据报协议)工做在传输层。TCP保证提供可靠的交付,而UDP只能提供尽最大努力的交付。多线程

具体IP协议及其余协议见校招面试计算机网络基础知识面试常考点并发

3. TCP和UDP的区别socket

1)TCP面向链接,发送数据以前要先创建链接(三次握手),UDP无链接,发送数据以前不须要创建链接

2)TCP提供可靠的链接,经过TCP传送的数据保证无差错和不丢包,UDP提供不可靠的链接,可能丢包

3)TCP面向字节流,UDP面向报文

4)TCP有拥塞控制,UDP没有,网络出现拥塞不会使源主机的发送速率下降

5)TCP要求系统资源较多,头部开销大(20个字节),UDP较少(8个字节)

6)TCP是点到点的链接,UDP支持一对一,一对多,多对一,多对多

4. DNS(Domain Name System,域名系统)

万维网上做为域名和IP地址相互映射的一个分布式数据库,可以使用户更方便的访问互联网,而不用去记住可以被机器直接读取的IP数串。每一个IP地址均可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就好了。这就是DNS协议的功能。

在浏览器中输入www.baidu.com后执行的所有过程

1)客户端浏览器经过DNS解析到www.baidu.com的IP地址220.181.27.48,经过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,而后经过TCP进行封装数据包,输入到网络层。

2)在客户端的传输层,把HTTP会话请求分红报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。而后使用IP层的IP地址查找目的端。

3)客户端的网络层不用关系应用层或者传输层的东西,主要作的是经过查找路由表肯定如何到达服务器,期间可能通过多个路由器,这些都是由路由器来完成的工做,我不做过多的描述,无非就是经过查找路由表决定经过那个路径到达服务器。

4)客户端的链路层,包经过链路层发送到路由器,经过邻居协议查找给定IP地址的MAC地址,而后发送ARP请求查找目的地址,若是获得回应后就可使用ARP的请求应答交换的IP数据包如今就能够传输了,而后发送IP数据包到达服务器的地址。

5. 进程和线程的区别:

1)进程(process)是一块包含了某些资源的内存区域,进程中所包含的一个或多个执行单元称为线程(thread)。

2)一个程序至少有一个进程,一个进程至少有一个线程。

3)进程和线程的主要差异在于它们是不一样的操做系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不一样执行路径。线程有本身的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,因此多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

6. 线程间通讯:

1)为何要进行线程间通讯:多个线程并发执行时, 在默认状况下CPU是随机切换线程的,当咱们须要多个线程来共同完成一件任务,而且咱们但愿他们有规律的执行, 那么多线程之间须要一些协调通讯,以此来帮咱们达到多线程共同操做一份数据的目的,避免对同一共享变量的争夺。

2)什么是线程间通讯,定义:多个线程在处理同一个资源,而且任务不一样时,须要线程通讯来帮助解决线程之间对同一个变量的使用或操做。就是多个线程在操做同一份数据时,避免对同一共享变量的争夺。因为线程没有独立的地址空间,多线程共享地址空间和数据空间,当有若干个线程都要使用某一共享资源时,任什么时候刻最多只容许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。

3)怎么作:等待唤醒机制:(wait()、notify())

就是在一个线程进行了规定操做后,就进入等待状态(wait), 等待其余线程执行完他们的指定代码事后 再将其唤醒(notify)

7. 线程间同步

所谓同步(synchronization)就是指一个线程访问数据时,其它线程不得对同一个数据进行访问,即同一时刻只能有一个线程访问该数据,当这一线程访问结束时其它线程才能对这它进行访问。同步最多见的方式就是使用锁(Lock),也称为线程锁。锁是一种非强制机制,每个线程在访问数据或资源以前,首先试图获取(Acquire)锁,并在访问结束以后释放(Release)锁。在锁被占用时试图获取锁,线程会进入等待状态,直到锁被释放再次变为可用。

8. 进程通讯:

进程间通讯(IPC,Interprocess communication)是一组编程接口,让程序员可以协调不一样的进程,使之能在一个操做系统里同时运行,并相互传递、交换信息。这使得一个程序可以在同一时间里处理许多用户的要求。由于即便只有一个用户发出要求,也可能致使一个操做系统中多个进程的运行,进程之间必须互相通话。

进程间通讯的8种方法:无名管道通讯、高级管道通讯、有名管道通讯、消息队列通讯、信号量通讯、信号、共享内存通讯、套接字通讯

1)无名管道( pipe ):管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备亲缘关系的进程间使用。进程的亲缘关系一般是指父子进程关系。

2)高级管道(popen):将另外一个程序当作一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式咱们成为高级管道方式。

3)有名管道 (named pipe) : 有名管道也是半双工的通讯方式,可是它容许无亲缘关系进程间的通讯。

4)消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5)信号量( semophore ) : 信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它常做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。

6)信号 ( sinal ) : 信号是一种比较复杂的通讯方式,用于通知接收进程某个事件已经发生。

7)共享内存( shared memory ) :共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问。共享内存是最快的 IPC 方式,它是针对其余进程间通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号两,配合使用,来实现进程间的同步和通讯。

8)套接字( socket ) : 套接口也是一种进程间通讯机制,与其余通讯机制不一样的是,它可用于不一样机器间的进程通讯。

9. 什么是socket

socket,即套接字是一种进程间通讯机制,凭借这种机制,客户/服务器(即要进行通讯的进程)系统的开发工做既能够在本地单机上进行,也能够跨网络进行。也就是说它能够让不在同一台计算机但经过网络链接计算机上的进程进行通讯。

socket通讯创建过程 :三次握手创建TCP链接,四次握手断开链接

详解见面试必考的计算机网络知识点梳理

1)三次握手

•客户端向服务器发送一个SYN J(调用connect函数)

•服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1(调用accept函数)

•客户端再向服务器发一个确认ACK K+1(connect返回,accept返回)

2)四次挥手

•某个应用进程首先调用close主动关闭链接,TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。

•服务器收到这个FIN,执行被动关闭,它发回一个ACK,对这个FIN进行确认,确认序号为收到的序号加1。和SYN同样,一个FIN将占用一个序号。

• 服务器关闭客户端的链接,发送一个FIN给客户端。

•接收到这个FIN客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

10. 为何链接创建须要三次握手,而不是两次握手?

防止失效的链接请求报文段被服务端接收,从而产生错误。

PS:失效的链接请求:若客户端向服务端发送的链接请求丢失,客户端等待应答超时后就会再次发送链接请求,此时,上一个链接请求就是『失效的』。

若创建链接只需两次握手,客户端并无太大的变化,仍然须要得到服务端的应答后才进入ESTABLISHED状态(打开),而服务端在收到链接请求后就进入ESTABLISHED状态。此时若是网络拥塞,客户端发送的链接请求迟迟到不了服务端,客户端便超时重发请求,若是服务端正确接收并确认应答,双方便开始通讯,通讯结束后释放链接。此时,若是那个失效的链接请求抵达了服务端,因为只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端链接资源。

11. 为何要四次挥手

由于TCP有个半关闭状态,假设A.B要释放链接,那么A发送一个释放链接报文给B,B收到后发送确认,这个时候A不发数据,可是B若是发数据A仍是要接受,这叫半关闭。而后B还要发给A链接释放报文,而后A发确认,因此是4次。(服务端的ack和fin不能同时发送)

12. 为何客户端要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?

为了保证服务端能收到客户端的确认应答。若客户端发完确认应答后直接进入CLOSED状态,那么若是该应答丢失,服务端等待超时后就会从新发送链接释放请求,但此时客户端已经关闭了,不会做出任何响应,所以服务端永远没法正常关闭。