计算机网络整理

大家都知道计算机网络对于我们计算机专业的人来说是很重要的,属于计算机基础四大件的一个,不管是考研还是找工作中的面试都是必问的,小编给大家整理了以下面试常问的希望对大家有所帮助。

1、OSI七层模型是什么?TCP/IP四层体系结构?五层协议体系结构?

  • 物理层:
    • 主要解决两台物理机之间的通信,通过二进制比特流的传输来实现,二进制数据表现为电流电压上的强弱,到达目的地再转化为二进制机器码。网卡、集线器工作在这一层。
  • 数据链路层:
    • 在不可靠的物理介质上提供可靠的传输,接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路。提供物理地址寻址功能。交换机工作在这一层。
  • 网络层:
    • 将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方,通过路由选择算法为分组通过通信子网选择最佳路径。路由器工作在这一层。
  • 传输层:
    • 传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。
  • 会话层:
    • 建立会话:身份验证,权限鉴定等; 保持会话:对该会话进行维护,在会话维持期间两者可以随时使用这条会话传输局; 断开会话:当应用程序或应用层规定的超时时间到期后,OSI会话层才会释放这条会话。
  • 表示层:

    • 对数据格式进行编译,对收到或发出的数据根据应用层的特征进行处理,如处理为文字、图片、音频、视频、文档等,还可以对压缩文件进行解压缩、对加密文件进行解密等。

  • 应用层:

    • 提供应用层协议,如HTTP协议,FTP协议等等,方便应用程序之间进行通信。

2、在浏览器中输入网址比如(www.csdn.com)后执行的全过程?

①首先浏览器获取输入的域名www.csdn.com

②浏览器向域名系统DNS请求解析www.csdn.com的IP

③DNS解析处csdn服务器的IP地址

④浏览器与服务器建立TCP连接(默认端口80)

⑤浏览器发出HTTP请求,请求csdn页面

⑥服务器通过HTTP请求把首页文件发给浏览器

⑦TCP连接释放

⑧浏览器解析首页文件,展示web界面给用户

以上涉及到的协议有:

        应用层:http、dns

        传输层:tcp、udp

        网络层:ip、icmp(提供网络传输过程中的差错检测)、ARP(将本机的默认网关ip地址映射成物理mac地址)

     

下面是我画的图:

3、TCP简介

1、TCP(传输控制协议)是一种面向连接、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。

2、客户端在收发数据前要使用connect()函数和服务器建立连接,建立连接的目的是保证IP地址,端 口,物理链路等正确无误,为数据的传输开辟通道。

3、TCP建立连接时,要传输三个数据包,俗称三次握手。

UDP简介

UDP(用户数据报协议)是一种面向无连接、不可靠、面向报文、数据在传输前不需要建立连接

4、三次握手和四次挥手

三次握手:

        1、序号:Seq序号

        2、确认号:Ack确认号(确认序号有效)

        3、标志位:SYN建立一个新连接、FIN断开一个连接

过程描述:

        1、首先客户端(Client)发送连接请求报文

        2、服务端(Server)接收连接后恢复ACK报文,并为这次连接分配资源

        3、客户端收到ACK报文后也向服务端发送ACK报文,并分配资源,这样TCP连接就建立了

如下图:

 三次握手的关键是要确认对方收到了自己的数据包:看ack = sql+1是否成立,如果成立说明对方正确收到了自己的数据包。

如果只有两次握手,这是哈客户端没有回应会浪费服务端的资源。

        1、第一次:A向B发送信息之后,B收到信息后可以确认自己的收信能力和A的发信能力没有问题

        2、第二次:B向A发送请求之后,A可以确认自己的发信能力和B的收信能力没有问题

        3、B确认自己的发信能力

小结:三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都要知道彼此准备好了)

四次挥手:

连接重要,断开也很重要,如果不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。

A:“任务处理完毕,我希望断开连接。”

B:“哦,是吗?请稍等,我准备一下。” 等待片刻后……

B:“我准备好了,可以断开连接了。”

A:“好的,谢谢合作。”

数据传输完毕后,双方都可以释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态, 然后客户端主动关闭,服务器被动关闭。

5、为什么TIME_WAIT状态需要经过2MSL(最大报文段的生存时间)才能返回到CLOSE状态?

虽然四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可 能最后一个ACK丢失,所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的 ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立 即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client 会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等 待2MSL。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。 如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

6、为什么连接的时候是三次握手,关闭的时候却是四次挥手?

        因为当服务端收到来自客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文,其中ACK报文是用来应答的,SYN是用来同步的。

        但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭socket,所以只能先回复一个ACK报文,告诉客户端,”你发起的FIN报文我收到了“。只有等我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。所以要四步。

7、TCP三次握手过程

  1. 第一次握手:客户端将标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端 进入syn_sent状态,等待服务端确认。
  2. 第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和 ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务端进入syn_rcvd状态。
  3. 第三次握手:客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,并将该数据包发送给服务端,服务端进行检查如果正确则连接建立成功,客户端和服务端进入established状态,完成三次握手,随后客户端和服务端之间可以开始传输数据了。

8、为什么TCP握手需要三次,两次行不行?

不行。TCP进行可靠传输的关键就在于维护一个序列号,三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值。如果只是两次握手, 至多只有客户端的起始序列号能被确认, 服务器端的序列号则得不到确认。

9、TCP四次挥手过程

  1. 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入finwait1状态。
  2. 第二次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入Close_wait状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
  3. 第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入Last_ack状态。
  4. 第四次挥手:客户端收到FIN后,客户端进入Time_wait状态,接着发送一个ACK给服务端,确认后,服务端进入Closed状态,完成四次挥手。

10、为什么TCP挥手需要4次

        主要原因是当服务端收到客户端的 FIN 数据包后,服务端可能还有数据没发完,不会立即关闭。所以服务端会先将 ACK 发过去告诉客户端我收到你的断开请求了,但请再给我一点时间,这段时间用来发送剩下的数据报文,发完之后再将 FIN 包发给客户端表示现在可以断了。之后客户端需要收到 FIN 包后发送 ACK 确认断开信息给服务端。

11、TCP的三次握手一定能保证传输可靠吗?

        三次握手比两次更可靠,但也不是完全可靠,而追加更多次握手也不能使连接更可靠了,因此选择 了三次握手。 世界上不存在完全可靠的通信协议。从通信时间成本空间成本以及可靠度来讲,选择了“三次握手” 作为点对点通信的一般规则。 TCP粘包,拆包 TCP报文最大长度:1518Bytes 最小长度:64Bytes

12、简述TCP粘包现象

TCP是面向流协议,发送的单位是字节流,因此会将多个小尺寸数据被封装在一个tcp报文中发出去的可能性。 可以简单的理解成客户端调用了两次send,服务器端一个recv就把信息都读出来了。

13、TCP粘包现象处理方法

固定发送信息长度,或在两个信息之间加入分隔符。

14、为什么TCP可靠

TCP有三次握手建立连接,四次挥手关闭连接的机制。 除此之外还有滑动窗口和拥塞控制算法。最最关键的是还保留超时重传的机制。 对于每份报文也存在校验,保证每份报文可靠性。

15、为什么UDP不可靠

UDP面向数据报无连接的,数据报发出去,就不保留数据备份了。 仅仅在IP数据报头部加入校验和复用。 UDP没有服务器和客户端的概念。 UDP报文过长的话是交给IP切成小段,如果某段报废报文就废了。

16、TCP和UDP的区别

  • TCP是面向连接的,UDP是面向无连接的
  • UDP程序结构比较简单
  • TCP是面向字节流的,UDP是面向数据报的
  • TCP保证数据正确性,UDP可能丢包
  • TCP保证数据顺序,UDP不保证

17、TCP拥塞避免控制算法

  • 慢开始:由小到大逐渐增加拥塞窗口的大小,每接一次报文,cwnd指数增加。

  • 拥塞避免:cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1。

  • 快速重传:使发送方尽快进行重传,而不是等待超过重传计时器超时再重传。 接收方应立即发送确认; 收到失序报文时也要对已收到的报文段重复确认; 发送方一旦收到了3个连续的重复确认,就将相应的报文进行重传,而不是等待超时重传计时器超 时再重传; 对于个别丢失的报文段,发送方不会出现超时重传,也不会误认为出现了拥塞。

  • 快速恢复:一旦发送方收到了3个重复确认,就知道丢失了个别报文段,于是不启动慢开始算法, 而执行快恢复算法;发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始拥 塞控制算法。 也可以把拥塞窗口cwnd值再增大一些,即等于ssthresh+3。

18、简述TCP协议的滑动窗口

        滑动窗口是传输层进行流量控制的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,防止发送方发送速度过快而导致自己被淹没。

19、HTTP请求的几种类型

  • GET 请求读取URL所标志的信息
  • HEAD 请求读取URL所标志的信息的首部
  • POST 给服务器添加信息
  • PUT 在指明的URL下存储一个文档
  • CONNECT 用于代理服务器

20、简述HTTP协议

        http协议是超文本传输协议。它是基于TCP协议的应用层传输协议,即客户端和服务端进行数据传输的一种规则。该协议本身HTTP 是一种无状态的协议。

21、HTTP和HTTPS

  • 超文本传输协议HTTP是明文传输,所有当请求被拦截时,用户输入的信息可能会被泄露
  • HTTP是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据
  • 安全套接字层超文本传输协议为了保证数据安全的传输,HTTPS在HTTP的基础上加上了SSL/TLS的协议
  • HTTPS的作用主要有两种,一种是 建立一个信息安全通道,保证数据安全性,第二种是确认网站的真实性。

http与https的区别

http所有传输的内容都是明文,并且客户端和服务器端都无法验证对方的身份。 https具有安全性的ssl加密传输协议,加密采用对称加密, https协议需要到ca申请证书,一般免费证书很少,需要交费。

22、简述http状态码和对应的信息

  • 1XX:接收的信息正在处理
  • 2XX:请求正常处理完毕
  • 3XX:重定向
  • 4XX:客户端错误
  • 5XX:服务端错误

常见错误码: 301:永久重定向 302:临时重定向 304:资源没修改,用之前缓存就行 400:客户端请求的报文有错误 403:表示服务器禁止访问资源 404:表示请求的资源在服务器上不存在或未找到。

23、简述HTTP短连接与长连接区别

  • HTTP中的长连接短连接指HTTP底层TCP的连接。
  • 短连接: 客户端与服务器进行一次HTTP连接操作,就进行一次TCP连接,连接结束TCP关闭连接。
  • 长连接:如果HTTP头部带有参数keep-alive,即开启长连接网页完成打开后,底层用于传输数据的TCP连接不会直接关闭,会根据服务器设置的保持时间保持连接,保持时间过后连接关闭。

24、简述TLS/SSL, HTTP, HTTPS的关系

SSL全称为Secure Sockets Layer即安全套接层,其继任为TLSTransport Layer Security传输层安全协议,均用于在传输层为数据通讯提供安全支持。可以将HTTPS协议简单理解为HTTP协议+TLS/SSL

25、HTTP请求包含了什么

包含:请求方法字段、URL字段、HTTP协议版本

产生请求的浏览器类型,请求数据,主机地址。

26、http的request具体格式

http request部分报文分三部分。第一部分是请求行,第二部分是请求头,第三部分是请求实体。

请求行包括:请求方法(GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE),请求的url,协议版本格式(http1.0/http1.1)

请求头包括一些附加信息,比如说:

  • Host:域名或ip加端口号
  • User-Agent:发送请求的应用程序名称,比如XX浏览器
  • Connection:连接是不是长连接
  • Accept-Charset:编码样式
  • Accept-Encoding:数据压缩格式

请求实体: 比如post就会把需要的数据放入请求实体中。

27、http的response具体格式

HTTP响应报文分为三部分。第一部分是状态行,第二部分是响应头部,第三部分是响应正文。

状态行由协议版本,状态码,状态码描述三部分组成。

响应头部包含了一些附加信息,如:

  • server:服务器(apache等)
  • content-type:如application/json
  • content-charset:编码格式
  • content-encoding:数据压缩格式

响应正文:响应的详细回传数据。

28、https的连接过程

  1. 浏览器将支持的加密算法信息发给服务器
  2. 服务器选择一套浏览器支持的加密算法,以证书的形式回发给浏览器
  3. 客户端(SSL/TLS)解析证书验证证书合法性,生成对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,用服务器的公钥对客户端密钥进行非对称加密。
  4. 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端对称密钥发送给服务器
  5. 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
  6. 服务器将加密后的密文发送给客户端
  7. 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成

29、简述http1.0

规定了请求头和请求尾,响应头和响应尾(get post)

每一个请求都是一个单独的连接,做不到连接的复用

30、简述http1.1的改进

HTTP1.1默认开启长连接,在一个TCP连接上可以传送多个HTTP请求和响应。使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。

支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

服务端无法主动push

31、简述http2.0的改进

提出多路复用。多路复用前,文件时串行传输的,请求a文件,b文件只能等待,并且连接数过多。引入多路复用,a文件b文件可以同时传输。

引入了二进制数据帧。其中帧对数据进行顺序标识,有了序列id,服务器就可以进行并行传输数据。

32、HTTP2.0的特性

1)完全采用二进制格式

2)多路复用

3)头部压缩

4)服务端推送

5)请求优先级

33、简述session

session用于标记特定客户端信息,存在在服务器的一个文件里。 一般客户端带Cookie对服务器进行访问,可通过cookie中的session id从整个session中查询到服务器记录的关于客户端的信息。

session.setAttribute("key",value);

是session设置值的方法,原理同HashMap的键值对,意思是key现在为“user“,存放的值为 userName。

可以使用session.getAttribute(“key”)来取值 setAttribute和getAttribute就是基于HashMap的put方法和get方法的实现,一般叫键值对或者keyvalue,即通过键找到值。

session.setAttribute("xyyyy",xyyy);
//保存
session.getAttribute("xyyyy");
//取得把自己要的数据放在session里面传来传去

34、简述cookie

HTTP 协议本身是无状态的,为了使其能处理更加复杂的逻辑,HTTP/1.1 引入 Cookie 来保存状态信息。

Cookie是由服务端产生的,再发送给客户端保存,当客户端再次访问的时候,服务器可根据cookie辨识客户端是哪个,以此可以做个性化推送,免账号密码登录等等。

35、session和cookie的区别

  • cookie数据存放在客户的浏览器上,session数据放在服务器上
  • cookie不是很安全
  • session会在一定时间内保存在服务器上
  • 单个cookie的客户端限制是3k
  • 将登录信息等重要信息存放为session;其他信息如果需要保存可以放在cookie

36、简述半连接队列

TCP握手中,当服务器处于SYN_RCVD 状态,服务器会把此种状态下请求连接放在一个队列里,该队列称为半连接队列。

37、浏览器中输入一个网址后,具体发生了什么

  1. 进行DNS解析操作,根据DNS解析的结果查到服务器IP地址
  2. 通过ip寻址和arp,找到服务器,并利用三次握手建立TCP连接
  3. 浏览器生成HTTP报文,发送HTTP请求,等待服务器响应
  4. 服务器处理请求,并返回给浏览器
  5. 根据HTTP是否开启长连接,进行TCP的挥手过程
  6. 浏览器根据收到的静态资源进行页面渲染

38、简述SYN攻击

SYN攻击即利用TCP协议缺陷,通过发送大量的半连接请求,占用半连接队列,耗费CPU和内存资源。

优化方式:

  1. 缩短SYN Timeout时间
  2. 记录IP,若连续受到某个IP的重复SYN报文,从这个IP地址来的包会被一概丢弃。

39、简述DNS劫持

DNS是指将网页域名翻译为对应的IP的一种方法。DNS劫持指攻击者篡改结果,使用户对域名的解析IP变成了另一个IP。

40、简述dos攻击

DoS是Denial of Service的简称,也称为拒绝服务攻击,通过发送大量的无用请求数据包给服务器,耗尽服务器资源,从而无法通过正常的访问服务器资源,导致服务器崩溃。

41、get和post的区别

Get:指定资源请求数据,刷新无害,Get请求的数据会附加到URL中,传输数据的大小受到url的限制。

Post:向指定资源提交要被处理的数据。刷新会使数据会被重复提交。post在发送数据前会先将请求头发送给服务器进行确认,然后才真正发送数据。

42、为什么有了 MAC 地址还需要 IP 地址
如果我们只使用 MAC 地址进行寻址的话,我们需要路由器记住每个 MAC 地址属于哪一个子网,不然每一次路由器收到数据包时都要满世界寻找目的 MAC 地址。而我们知道 MAC 地址的长度为 48 位,也就是说最多总共有 2 的 48 次方个 MAC 地址,这就意味着每个路由器需要 256 T 的内存,这显然是不现实的。
和 MAC 地址不同,IP 地址是和地域相关的,在一个子网中的设备,我们给其分配的 IP 地址前缀都是一样的,这样路由器就能根据 IP 地址的前缀知道这个设备属于哪个子网,剩下的寻址就交给子网内部实现,从而大大减少了路由器所需要的内存。

43、简述DNS解析过程

1、客户机发出查询请求,在本地计算机缓存查找,若没有找到,就会将请求发送给dns服务器

2、本地dns服务器会在自己的区域里面查找,找到即根据此记录进行解析,若没有找到,就会在本地的缓存里面查找

3、本地服务器没有找到客户机查询的信息,就会将此请求发送到根域名dns服务器

4、根域名服务器解析客户机请求的根域部分,它把包含的下一级的dns服务器的地址返回到客户机的dns服务器地址

5、客户机的dns服务器根据返回的信息接着访问下一级的dns服务器

6、这样递归的方法一级一级接近查询的目标,最后在有目标域名的服务器上面得到相应的IP信息

7、客户机的本地的dns服务器会将查询结果返回给我们的客户机

8、客户机根据得到的ip信息访问目标主机,完成解析过程

44、对称加密和非对称的区别,非对称加密有哪些?
加密和解密的过程不同:对称加密和解密过程使用同一个密钥;非对称加密中加密和解密采用公钥和私钥两个密钥,一般使用公钥进行加密,使用私钥进行解密。
加密和解密的速度不同:对称加密和解密速度较快,当数据量比较大时适合使用;非对称加密和解密时间较长,速度相对较慢,适合少量数据传输的场景。
传输的安全性不同:采用对称加密方式进行通信时,收发双方在数据传送前需要协定好密钥,而这个密钥还有可能被第三方窃听到的,一旦密钥泄漏,之后的通信就完全暴漏给攻击者了;非对称加密采用公钥加密和私钥解密的方式,其中私钥是基于不同的算法生成的随机数,公钥可以通过私钥通过一定的算法推导得出,并且私钥到公钥的推导过程是不可逆的,也就是说公钥无法反推导出私钥,即使攻击者窃听到传输的公钥,也无法正确解出数据,所以安全性较高。
常见的非对称加密算法主要有:RSA、Elgamal、背包算法、Rabin、D-H 算法等等。

45、两个主机之间如何进行数据传输?

应用层通过协议把数据封装好传到运输层,

运输层通过TCP/UDP协议把数据传输到网络层,

网络层通过IP协议把数据封装好传到链路层,

链路层把数据封装成帧,传到物理层。

路由器再把物理层传的数据一层一层进行解析,

再根据解析出来的数据进行重写封装,

最后传到真正需要通信的那个主机上。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快醒醒鸭今天你编程了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值