计算机网络面试总结

 

按照网络作用范围分类:

(1)广域网WAN  (2)城域网MAN  (3)局域网LAN  (4)个人区域网PAN

 

OSI七层模型

 

OSI中的层

功能

相关协议

应用层

文件传输,电子邮件,文件服务,虚拟终端

HTTP,FTP,SMTP,DNS,DHCP

表示层 

数据格式化,代码转换,数据加密

 

会话层

解除或建立与别的接点的联系

SQL,SCP

传输层

提供端对端的可靠的报文传递和错误恢复

TCP,UDP

网络层 

负责数据包从源到宿的传递和网际互联

IP,ARP,ICMP

数据链路层 

传输有地址的帧以及错误检测功能,点对点传递

PPP

物理层 

以二进制数据形式在物理媒体上传输数据 

 

 

数据链路层使用的信道主要有两种:

点对点信道(使用PPP协议) 广播信道(使用CSMA/CD协议)

数据链路层三个基本问题

封装成帧  透明传输  差错检测

 

中间设备:

(1)物理层:转发器或集线器

(2)数据链路层:网桥或桥接器或交换机

(3)网络层:路由器

(4)网络层以上的:网关

ARP地址解析协议:由IP地址找出其相应的硬件地址

请简单解释一下,arp协议和arp攻击。

地址解析协议。ARP攻击的第一步就是ARP欺骗。由上述“ARP协议的工作过程”我们知道,ARP协议基本没有对网络的安全性做任何思考,当时人们考虑的重点是如何保证网络通信能够正确和快速的完成——ARP协议工作的前提是默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。不过后来,人们发现ARP应答中的IP地址和MAC地址中的信息是可以伪造的,并不一定是自己的真实IP地址和MAC地址,由此,ARP欺骗就产生了。

两级IP缺点:

IP地址空间的利用率有时很低

给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏

两级IP地址不够灵活

 

socket与TCP/IP的对应关系

Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口  

 

运输层两个重要协议:

用户数据报协议UDP:面向事务的不可靠信息传送服务,适用于多点广播,对可靠性要求低的场景

传输控制协议TCP:面向连接的、可靠的、基于字节流的传输层通信协议,适用于需要数据完整性与实时性的场景

 

TCP四种拥塞控制算法:慢开始,拥塞避免,快重传,快恢复

TCP运输连接有三个阶段:连接建立、数据传送、连接释放

三次握手,四次挥手

 

第一次:建立连接,客户端发送SYN包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;

第二次:服务器收到SYN包,确认客户的SYN(ack=x+1),同时自己也发送一个SYN+ACK包(seq=y),此时服务器进入SYN_RCVD状态;

第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(seq=x+1,ack=y+1),此包发送完毕,客户端和服务器进入ESTAB_LISHED状态,完成三次握手

第一次:客户端发送FIN,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态

第二次:服务器发送ACK给客户端,服务器进入CLOSE_WAIT状态,此时服务器还可以给客户端发送数据,反之不行

第三次:服务器发送FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态

第四次:客户端收到FIN后,发送ACK给服务器,然后进入TIME_WAIT状态,服务器进入CLOSED状态,客户端等待2MSL后进入CLOSED状态,完成四次挥手

 

为什么要等待2MSL时间:

确保有足够的时间让对方收到ACK包

避免新旧连接混淆

 

 

为什么要三次握手

三次握手的目的是建立可靠的通信信道

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

所以三次握手就能确认双方收发功能都正常,缺一不可。

为什么TCP客户端最后还要发送一次确认呢?

主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

 

 

 

域名系统DNS(Domain Name System):从域名解析出IP地址。

域名服务器四种类型:

(1)根域名服务器(2)顶级域名服务器(3)权限域名服务器(4)本地域名服务器

文件传送协议FTP(File Transfer Protocol)

万维网WWW(World Wide Web)

统一资源定位符URL

简单邮件传送协议SMTP

 

代理服务器(proxy server)

作用:代理服务器把最近的一些请求和响应暂存在本地磁盘中,当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去互联网访问该资源。减轻出口路由负担。

 

在浏览器中输入网址后执行的全部过程

1.查找域名对应的IP地址。这一步会依次查找浏览器缓存,系统缓存,路由器缓存,ISPNDS缓存,根域名服务器。

2.向IP对应的服务器发送请求。

3.服务器响应请求,发回网页内容。

4.浏览器解析网页内容。

 

输入 ping IP 后敲回车,发包前会发生什么?

首先根据目的IP和路由表决定走哪个网卡,再根据网卡的子网掩码地址判断目的IP是否在子网内。如果不在则会通过arp缓存查询IP的网卡地址,不存在的话会通过广播询问目的IP的mac地址,得到后就开始发包了,同时mac地址也会被arp缓存起来。

 

IP地址的编码分为哪俩部分?

分网络号和主机号

A类IP第一字节是网络号,后三字节是主机号

B类IP前两字节是网络号,后两字节是主机号

C类IP前三字节是网络号,后一字节是主机号

HTTP和HTTPS的主要区别?

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

ttp的连接很简单,是无状态的;

HTTPS默认使用443端口,HTTP使用80端口

HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全

HTTPS需要到CA申请证书,HTTP不需要

 

HTTPS建立连接过程

1 客户端访问https连接

2 服务器端发送证书(公钥)给客户端

3 客户端验证服务器端的证书,生成随机字符串并加密数据

4 服务器端接收加密信息,解密得到客户端提供的随机字符串

 

HTTP状态码

1xx:指示信息——表示请求已接收,继续处理

2xx:成功——表示请求已被成功接收、理解、接受

3xx:重定向——要完成请求必须进行更进一步的操作

4xx:客户端错误——请求有语法错误或请求无法实现

5xx:服务器端错误——服务器未能实现合法的请求

 

HTTP1.0 与1.1区别

  • 连接方式 : HTTP 1.0 为短连接,HTTP 1.1 支持长连接。
  • 状态响应码 : HTTP/1.1中新加入了大量的状态码,光是错误响应状态码就新增了24种。比如说,100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址。
  • 缓存处理 : 在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
  • 带宽优化及网络连接的使用 :HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  • Host头处理 : HTTP/1.1在请求头中加入了Host字段。

 

Cookie: https://mp.weixin.qq.com/s/iDOoeBA48gnoJUhkCHosqA

 

GET请求和POST请求的区别

HTTP报文层面:GET将请求信息放在URL,POST放在报文体中

数据库层面:GET符合幂等性和安全性,POST不符合

其他层面:GET可以被缓存、被存储,而POST不行

 

TCP粘包/拆包

TCP是个“流”协议,所谓流,就是没有界限的一串数据,它们是连成一片的,其间并没有分界线。

TCP粘包:socket读取时,读到了实际意义上的两个或多个数据包的内容,同时将其作为一个数据包进行处理。

TCP拆包:socket读取时,没有完整地读取一个数据包,只读取一部分。

解决思路:

(1)消息定长,例如每个报文的大小为固定长度200字节,如果不够,空位补空格;

(2)在包尾增加回车换行符进行分割,例如FTP协议;

(3)将消息分为消息头和消息体,消息头中包含表示消息总长度的字段;

(4)更复杂的应用层协议。

 

posted @ 2019-05-13 11:03  feifei97  阅读(813)  评论(0编辑  收藏  举报