计算机网络重点知识汇总(面试题)

一 计算机网络体系结构:

计算机网络的各层及其协议的集合就是网络的体系结构。

(1)OSI(计算机网络体系结构的形成)

  • 国际标准化组织ISO提出著名的开放系统互连基本参考模型 OSI/RM(Open Systems Interconnection Reference Model),简称OSI。只要遵循OSI标准,一个系统可以与世界上任何地方,也遵循这同一标准的其他任何系统进行通信。
  • 20实际九十年代初期,整套的OSI国际标准都已经制定出来了,但由于在这之前基于TCP/IP的互联网已经抢先在全球范围成功运转,所以OSI并没有实现市场化,只获得一些理论研究的成果
  • OSI七层协议:应用层、表示层、会话层、运输层、网络层、数据链路层、物理层
  • OSI不足:OSI协议实现起来过分复杂,而且运行效率很低;层次划分不清晰,有些功能在多个层次中重复出现

(2)协议:为进行网络中的数据交换而建立的规则、标准或约定

协议三要素:

  • 语法:数据与控制信息的结构
  • 语义:需要发出何种控制信息,完成何种动作以及做出何种响应
  • 同步:事件实现顺序的详细说明

协议分层的好处:

  • 各层之间独立。某一层并不需要它的下一层如何实现,只需要知道该层通过层间接口所提供的服务;
  • 灵活性好, 任何一层变化(比如技术的变化)只要层间接口关系保持不变,则其它层都不受影响。还可以在不需要某一层服务时,将该层取消;
  • 结构上可分割开:各层都可以采用最合适的技术来实现;
  • 易于实现和维护: 将一个庞大复杂的系统分解成许多相对独立的子系统;
  • 促进标准化工作: 通常各层所需要的功能主要有一下一些(可以包括有一种,也可以多种):差错控制(相应层次对等方的通信更加可靠)、流量控制(发送端发送数据不能太快,接收端要来得及接收)、分段与重装(发送端将数据划分小段,接收端还原)、复用与分用(发送端几个高层会话复用一条低层的连接,在接收端再进行分用)、连接建立与释放

(3)具有五层协议的体系结构

应用层、运输层、网络层、数据链路层、物理层

  1. 应用层:
    应用层协议是应用进程间通信和交互的规则,进程是主机中正在运行的程序
    不同的网络应用需要不同的应用层协议;
    常见:域名系统DNS;支持万维网应用的HTTP协议;支持电子邮件的SMTP协议;
    应用层交互的数据单元成为报文

  2. 运输层

    为两台主机进程之间的通信提供通用的数据传输服务,应用进程利用该服务传送应用层报文;
    通用指的是多种应用可以使用同一运输层服务

    !!!!!注意 什么是分用与复用:一台主机可同时运行多个进程,因此运输层有复用和分用功能,复用就是多个应用进程可同时使用下面运输层的服务,分用是运输层把收到的信息分别交付给上面应用层中的相应进程。

(即在应用层中不同的网络应用需要不同的应用层协议,但是到了运输层,运输层会使用通用的数据传输服务,所以多个应用进程可以同时使用下层运输层服务,到接收端时,运输层再把信息分别交付给上面的应用层)

运输层主要使用两种协议:
TCP:传输控制协议(数据传输单位:报文段)
UDP:用户数据报协议(数据传输单位:用户数据报)
  1. 网络层
    网络层负责为分组交换网上的不同主机提供通信服务
    发送数据时,网络层把运输层产生的报文段或者用户数据报封装成分组进行传送;
    TCP/IP协议中,网络层使用IP协议,因此分组也叫做IP数据报
    网络层另一任务:选择合适的路由,使源主机运输层传下来的分组,能够通过网络中的路由器找到目的主机;(互联网由大量的异构网络通过路由器相互连接在一起,互联网使用的网络层协议是无连接的网际协议IP和许多路由器选择协议,因此,互联网的网络层也叫作网际层或IP层);

  2. 数据链路层
    两台主机之间的数据传输,总是在一段一段的链路上传送,需要使用专门的链路层的协议;
    在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送帧,每一帧包括数据和必要的控制信息(同步信息、地址信息、差错控制);
    接收数据时:接收端能从控制信息中知道一个帧从哪一个比特开始从哪一个比特结束,这样能够确保数据链路层收到一个帧后就能够提取数据上交给网络层;
    数据链路层还要查错和纠错,如果发现有差错,就简单丢弃这个出了差错的帧;如果需要修改,就更改(要采用可靠传输协议来纠正出现的差错)。

  3. 物理层
    物理层所传数据的单位是比特,发送方发送1(0),接收方接收1(0)。物理层要考虑用多大的电压代表1和0,以及接收方如何识别发送方发送的比特币。 除此,物理层还需确定连接电缆的插头应当有多少根引脚以及各引脚应如何连接。
    传递信息使用的一些物理媒体,如双绞线、电缆、无线信道等并不在物理层协议之内而是在物理层协议的下面,因此也有人把物理层下面的物理媒介当做0层。
    在这里插入图片描述
    注意上图:从应用层开始每层要加必要的控制信息,到了数据链路层,控制信息被分为两部分,分别加到本层数据单元的首部(H2)与尾部(T2),第一层比特流传送,不加控制信息,传送比特流从首部开始传送。
    当比特流离开主机,经网络的物理媒体传送到路由器,就从路由器的第一层依次上升到第三层,每一层都根据控制信息进行必要的操作,然后将控制信息剥离,向上交付剩下的数据单元,当分组到了第三层,就根据首部中目的地址查找路由器的转发表,找出转发分组的接口,然后向下传送到第二层,加上新的首部和尾部,再到下面的第一层,然后在物理媒体上把每一个比特发送出去。

(4)协议:

	协议是控制两个(或多个)对等实体进行通信的规则的集合。
	(实际应用进程的数据传给接收方是上面的复杂过程,但是对用户来说都屏蔽掉了,会觉得是AP1直接把数据交给了应用进程AP2,对于其它层,也好像直接传递给对方,这就是所谓对等层之间的通信,各层的协议,实际上是各个对等层之间传递数据时的各项规定,在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务,还须使用下一层的服务)。
		实体:任何可以发送或接收信息的硬件或软件进程。
	(文献中的协议栈:几个层次画在一起很像一个栈的结构)

(5)TCP/IP的体系结构(四层协议):

TCP/IP协议并不一定单指TCP/IP两个协议,而往往表示互联网使用的整个TCP/IP协议族。
应用层–》运输层=》网际层=》网络接口层

二、问题总结:

1、请简述TCP与UDP的区别?

TCP与UDP是运输层中的协议。
(1)TCP是面向连接的运输层协议,应用程序在使用TCP之前,必须建立TCP连接,传送完毕后,必须释放已经建立的TCP连接。UDP无连接,即发送数据前不需要建立连接。 减少开销和发送数据之前的时延。
(2)**TCP提供可靠交付的服务,**通过TCP连接传送的数据无差错、不丢失、不重复。 UDP尽最大努力交付,即不保证可靠交付。
(3)TCP提供全双工通信, TCP允许通信双方的应用进程任何时候都能发送数据,TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。发送的时候,把数应用进程把数据传送给缓存,就可以做自己的事,而TCP在合适的时候把数据发送出去,在接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
(4)! TCP面向字节流,TCP不保证接收方应用程序所收到的数据块和发送方应用程序发送的数据块具有对应大小关系。(例如,发送方应用程序交给发送方TCP共十个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。TCP并不关心应用进程一次把多少数据块发送到TCP的缓存中,而是 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应该包含多少字节;
UDP面向报文; UDP发送的报文长度是应用进程给出的; 发送方的UDP对应用程序交付下来的报文,再添加首部后就直接向下交付IP层,UDP对应用层交下来的报文既不合并也不拆分。因此,应用程序必须选择合适大小的报文,若报文太长,UDP交付给IP层后,IP层在传送时可能还要进行分片,这会降低IP层的效率,反之太短的话,会使IP数据报的首部相对长度过大,也降低了IP层的效率,因此,应用程序必须选择合适大小的报文。
(5)UDP没有拥塞控制, 并且允许在网络发生拥塞时丢失一些数据,但却不允许有很大的时延(对IP电话、实时视频会议这些实时应用非常适用);TCP拥塞控制,使用慢开始、拥塞避免、快恢复、加法增大、乘法减小算法;
(6)TCP首部开销20字节(源端口和目的端口各两个、序号、确认号、数据偏移、紧急URG…),UDP的首部开销小,只有8个字节(源端口、目的端口、长度、检验和 各2各字节);
(7)UDP支持一对一、一对多、多对一、多对多的交互通信;而TCP连接只能有两个端点,也就是一对一的;

2.TCP三次握手与四次挥手?

ACK: 仅当ACK=1时,确认号字段才有效;ACK=0时,确认号无效,TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。
ack: 确认号,期望对方下一个报文段的第一个数据字节的序号。
seq: 序号,本报文段所发送的数据的第一个字节的序号。(tcp面向字节流,发送的每个字节都有编号)
SYN: 连接建立时用来同步序号,当SYN =1、ACK=0时表明是一个连接请求报文;对方若同意建立连接,则SYN=1/ACK=1;
在这里插入图片描述
主机A:客户程序; 主机B:服务器程序
close:关闭状态;
Listen:收听状态;
SYN-sent:同步已发送;
SYN-RCVD:同步收到;
ESTAB-LISHED:已建立连接

最初两个进程都处于close(关闭)状态,A主动打开连接,B被动打开连接。

  • 一开始,B的TCP服务进程先创建传输控制模块,然后,准备接收客户端进程的连接请求,此时服务器进程处于收听状态,等待客户的连接请求;
  • A的TCP客户进程也是先创建传输控制模块,然后,向B发出连接请求报文段,这时首部同步位SYN = 1,选择一个序号seq = x,SYN=1的报文段不携带数据,但会消耗一个序号。TCP客户进程进入同步已发送阶段。
  • B收到连接请求报文后,如同意建立连接,则向A发送确认。确认报文段SYN=1.ACK=1,ack=x+i,选择一个序号seq=y,该报文段SYN=1,不携带数据也要消耗掉一个序号。TCP服务进程进入同步受到状态。
  • TCP客户进程收到B的确认后,还要向B给出确认,确认报文段中ACK=1,确认号ack=y+1,自己的序号为seq = x+1,TCP标准规定,ACK报文段可以携带数据,但如果不携带则不会消耗序号,在这不携带的话,下一个数据报文段的序号仍是seq = x+1。这时,TCP连接已建立,A进入已建立连接阶段。
  • B收到A的确认后,也进入已建立连接状态。

为什么A最后还要发送一次确认呢?

防止已经失效的连接请求报文段突然又传送到B,因而产生错误。比如:

考虑一种情况:A发出连接,但因连接请求报文在某些网络节点长时间滞留,导致延迟了,A等了一会又发送了一次连接请求,后来正常收到确认,建立了连接,传输完毕后释放了连接。但此时B收到了之前延迟的连接请求报文,就误认为是A又发了一次,然后B又发一次确认,如果不是三次握手,这时新的连接就建立了,但是A并没有要发送的数据,B的资源就白白浪费了。
采用三次握手时,上述情况A不会再向B的确认发送确认。B收不到确认也就不会建立连接。

TCP四次挥手?

在这里插入图片描述
注意:FIN即使不携带数据,它也消耗掉一个序号。

  • A,B都处于已建立连接状态;
  • A的应用进程先向TCP服务进程发送连接释放报文段,并停止发送数据,FIN = 1,序号seq = u,为前面已经传送数据的最后一个字节的序号+1,A进入终止等待1状态;
  • B收到释放连接的请求后发出确认,确认号为ack = u+1,报文段自己的序号是seq = v,B进入关闭等待状态;TCP服务器进程通知高层应用进程,因而从A到B这个方向的连接就释放了,;这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若在发送数据,A仍要接收;
  • A收到B的确认后,进入终止等待2状态,等待B发出连接释放报文段,
  • 若B不发数据了,B发出连接释放报文,FIN=1,B的序号假设为w,b还必须重复上次发送的确认号,ack =u+1,此时B进入最后确认状态;
  • A对此发出确认,ACK=1,seq=u+1,确认号ack = w+1,然后进入时间等待状态,经过时间等待计时器设置的时间2MSL(最长报文段寿命)后,A才进入CLOSE状态。
  • B只要收到A发出的确认,就进入CLOSE状态,同样B结束TCP连接的时间要比A早。

为什么要等待2MSL?

(1) 保证A发送的最后一个ACK能够到达B,如果最后一个确认消失了,B会超时重传这个连接释放报文段,A在这个时间段内就能再次收到,并再次发送确认报文,重新开启时间等待计时器,使AB都能正常进入CLOSE状态。
(2)A在发送完ACK报文段后,在经过2个最长报文段寿命后,就可以使本连接持续时间内所产生的所有报文段都从网络中消失,这样在下一个新的连接中不会出现旧的连接请求报文。

3. 了解的端口及对应的服务?

端口的理解: 把IP地址比作成房子,那端口类似房子的门,IP地址有65536(2^16)个门,每个端口用整数来表示,范围: 0~65535;
端口的作用: 本地机器会根据有需求的程序分配端口,随机从1024~65535之间生成。主要用来判断该数据包是要发给哪一个应用程序的。 端口号0-1023是分配给固定特殊的一些网络服务。

端口 服务
21 FTP(文件传输协议)
25 SMTP(简单邮件传输协议)
53 DNS域名服务器
80 HTTP超文本传输协议
3306 MySql服务
443 HTTPS
23 Telnet(远程登录)服务

4.在浏览器中输入网址之后执行会发生什么?

参考地址牛客网:https://www.nowcoder.com/discuss/1937

在浏览器中输入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.从浏览器地址输入url到显示页面的步骤?

  • 浏览器通过 DNS 对请求的 URL 交给进行域名解析,找到 IP 地址,
  • 浏览器与服务器建立tcp连接;
  • 浏览器向服务器发起请求,http请求报文;
  • 服务器交给后台处理,返回http响应报文,浏览器接受文件;
  • 浏览器对加载到的资源(html/css/js/image)进行语法解析,建立相应的内部数据结构(如html的DOM);
  • 载入解析到的资源文件,渲染页面。

6.http与https的区别?

在HTTP和TCP之间添加一个安全协议层(SSL或TSL),就成了我们常说的HTTPS。
(1)http是超文本传输协议,信息是明文传输;https则是具有安全性的ssl/tls加密传输协议
(2)https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
(3)两者使用完全不同的连接方式,用的端口也不一样,http是80,https是443;
(4)http连接无状态(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。),对于事务处理没有记忆能力;https协议可以进行加密传输、身份认证。

使用HTTPS,密钥在起点和终点才有,避免网络请求过程中在中间节点(路由器)被修改。

7.get和post区别?

(1)功能: get从服务器上获取数据,post是向服务器传送数据
(2)位置: get参数url可见,post通过请求体传送数据
(3)浏览器缓存: get请求会被浏览器主动缓存,而post不会,除非手动设置。
(4)回退: get请求页面后退时,不产生影响,post请求页面后退时会重新提交请求
(5)数据大小: get一般传输数据大小不超过2K-4K(根据浏览器不同限值会有所不同),post请求传输数据大小没要求
(6)安全性: post肯定比get安全,但是还是没有很大区别,也没有很安全。

较详细答案:

  • (1). 从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
  • (2). 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;
  • (3). 从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。
  • (4). 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。
  • (5). 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。

8.http请求报文与响应报文?

请求报文:和响应报文都是由三个部分组成:

  • 开始行:请求报文中叫请求行,响应报文中叫状态行。
  • 首部行:用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。每一个首部行中有首部字段名和它的值,每一行在结束的地方都要有“回车”“换行”,整个首部结束后,还有一空行将首部和后面的实体主体分开;
  • 实体主体:在请求报文中一般都不用这个字段,有些响应报文也可能不用。

请求行的三个内容:方法、请求资源的url、HTTP的版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

状态行有三个内容:HTTP版本、状态码、以及解释状态码的简单短语

  • 1XX:表示通知信息,如请求收到了或正在进行处理;
  • 2XX表示成功,如接收或知道了
  • 3XX表示重定向,如果完成请求还需采取进一步的行动
  • 4XX表示客户的差错,如请求中有错误的语法或不能完成(404找不到)
  • 5XX表示服务器的差错,如服务器失效无法完成请求
https://www.runoob.com/http/http-status-codes.html

100:这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果
200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果
202:表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定
204:服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息
301:客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
403 Forbidden:对被请求页面的访问被禁止
404 Not Found:请求资源不存在
500 Internal Server Error:服务器内部遇到未知的错误,导致无法完成客户端当前的请求。
503 Server Unavailable:请求未完成,服务器临时过载或宕机,一段时间后可能恢复正常。

9.HTTP协议请求的几种方式?

get:默认的http请求方法,请求的参数作为url的一部分;请求指定的页面信息,并返回实体主体;
post:向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。post请求可能会导致新的资源的建立或已有资源的修改;
head:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头;
put:从客户端向服务器传送的数据取代指定的文档内容;
delete:请求服务器删除指定的页面;
trace:回显服务器收到的请求,主要用于测试或诊断;
option:返回所有可用的方法;可检查服务器支持哪些方法;
connect:预留给能够将连接改为管道方式的代理服务器;
在这里插入图片描述

10.HTTP响应头的信息?

在这里插入图片描述
在这里插入图片描述

11.content-type

语法:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

在这里插入图片描述
常见的媒体格式类型如下:

text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式

以application开头的媒体格式类型:
application/xhtml+xml :XHTML格式
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
另外一种常见的媒体格式是上传文件之时使用的:

multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

猜你喜欢

转载自blog.csdn.net/qq_43812504/article/details/114961965