面试:计算机网络

○ 0. URL到显示的流程

1.DNS解析
2.TCP连接
3.发送HTTP请求
4.服务器处理请求并返回HTTP报文
5.浏览器解析渲染页面




█ 1.网络七层模型:OSI参考模型

TCP协议:运输层,
IP协议:网络层,
HTTP协议:应用层。

网络七层模型:
物理层,数据链路层,网络层,运输层,会话层,表现层,应用层

网络五层模型:
物理层,数据链路层,网络层,运输层,应用层




█ 2.TCP

○ 2.1 TCP 三次握手 四次挥手

三次握手的过程

1)主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)

2)主机B收到请求后,会发回连接确认数据包。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始序列号seq(B)=y,以及主机B对主机A初始序列号的确认号ack(B)=seq(A)+1=x+1)

3)第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个序列号seq(A)=x+1;确认号为ack(A)=y+1的报文;


1、ACK 是TCP报头的控制位之一,对数据进行确认。确认由目的端发出, 用它来告诉发送端这个序列号之前的数据段都收到了。 比如确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性。

2、SYN 同步序列号,TCP建立连接时将这个位置1。

3、FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,,提出断开连接的一方将这位置1。

四次挥手过程

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。
客户端或服务器均可主动发起挥手动作,
在socket编程中,任何一方执行close()操作即可产生挥手操作。

过程:
第一次: 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 ;

第二次: 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;

第三次: 由B 端再提出反方向的关闭请求,将FIN置1 ;

第四次: 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.。


○ 2.2 TCP 可靠 UDP 应用场景

三次握手,超时重传,滑动窗口,拥塞控制。

1) TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低

2) 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易于攻击;UDP没有建立连接的过程,因而实时性较强,也稍安全

3) 在传输相同大小的数据时,TCP首部开销20字节;UDP首部开销8字节,TCP报头比UDP复杂,故实际包含的用户数据较少。TCP在IP协议的基础上添加了序号机制、确认机制、超时重传机制等,保证了传输的可靠性,不会出现丢包或乱序,而UDP有丢包,故TCP开销大,UDP开销较小

4) 每条TCP连接只能时点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信


Tcp: 传输大量数据 + 可靠性高
UDP:实时性 高速传输 可靠性低 高效




○ 2.3 SSL四次握手

安全套接层协议,安全协议,访客和网站之间保持私密状态。在传输层与应用层之间加密。

1、客户端(通常是浏览器)先向服务器发出加密通信的请求,叫做ClientHello请求。

2、服务器 向 客户端发出回应,这叫做SeverHello。

3、客户端 首先验证服务器证书。有问题就 向访问者显示一个警告,由其选择是否还要继续通信。

4、服务器的最后:生成本次会话所用的"会话密钥"。向客户端发送 编码 还有握手结束。

(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

握手完毕,进入加密通信。




█ 3.Http

○ 3.1 http https

1) https协议要 备案 申请证书到ca ,需要一定经济成本;

2) http是明文传输,https是加密的安全传输;

3) 连接的端口不一样,http是80,https是443;

4) http连接很简单,没有状态;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。




○ 3.2 http状态码

4** 客户端错误
5** 服务端错误
404
405:客户端请求中的方法被禁止

408:服务器等待客户端发送的请求时间过长,超时

502:上游服务器发的是 无效的响应。

504:没有 及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。




○ 3.3 http1.1和1.0的区别

带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。




█ 4.icmp协议 arp

icmp它是TCP/IP协议族的一个子协议,在IP主机、路由器之间传递 控制消息(网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。)。


arp协议 arp攻击

地址解析协议。

ARP攻击的 ARP欺骗。ARP应答中的IP地址和MAC地址中的信息是可以伪造的




█ 5.DNS 寻址过程

1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2、没有就,查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、都没有,首先会找TCP/ip参数中设置的首选DNS服务器,,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5、如果本地DNS服务器本地区域文件缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,看谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。

6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询




█ 6.socket

client: trycatch

Socket client = new Socket(serverName, port);
client.getRemoteSocketAddress()

DataOutputStream out = new DataOutputStream(client.getOutputStream());
DataInputStream in = new DataInputStream(client.getInputStream());
client.close();

server: trycatch

ServerSocket serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(10000);

Socket server = serverSocket.accept();
server.getRemoteSocketAddress(); getLocalPort(); getLocalSocketAddress()

DataOutputStream out = new DataOutputStream(server.getOutputStream());
DataInputStream in = new DataInputStream(server.getInputStream())

█ 7.负载均衡 反向代理模式

负载均衡:将处理的事务 以较均衡的方式 分到各个处理端。

负载均衡算法策略
1.轮循均衡 /// 2.权重轮循均衡(给服务器配权) /// 3.随机均衡 /// 4.权重随机均衡 /// 5.哈希算法 /// 6.URL 散列



反向代理接受internet上的连接请求,然后把 请求转发给 内部网络上的服务器,然后把 得到的结果返回给internet上请求连接的客户端,代理服务器对外就表现为一个服务器。


反向代理负载均衡技术是把将来自internet上的连接请求 以 反向代理的方式 动态地转发给 内部网络上的多台服务器进行处理,从而达到负载均衡的目的


优点:提升静态网页的访问速度,提供有益的性能;具备额外的安全性:网络外部用户不能直接访问真实的服务器(同理,NAT负载均衡技术也有此优点)。

缺点
反向代理是处于OSI参考模型第七层应用的,要为每一种应用服务专门开发一个反向代理服务器,这样就限制了反向代理负载均衡技术的应用范围,现在一般都用于对web服务器的负载均衡。

针对每一次代理,代理服务器就必须打开两个连接,一个对外,一个对内,因此在并发连接请求数量非常大的时候,代理服务器的负载也就非常大了,在最后代理服务器本身会成为服务的瓶颈。

一般来讲,可以用它来对连接数量不是特别大,但每次连接都需要消耗大量处理资源的站点进行负载均衡,如search等。




█ 8.路由器 交换机

1.工作区域
路由器:网络层
交换机:数据链路层

2.工作依据
路由器根据 路由表 转发(IP地址,寻址)
交换机根据 MAC地址表 转发(mac地址,过滤)

3.工作原理
路由器: 路由转发,路由选择 连接局域网和外网 隔离不同网段
交换机: 自我学习 局域网内网的数据转发 连接同一网段

4.工作效率
路由器: 依靠软件寻址,速度慢(接口少)
交换机: 硬件加速转发,速度快

posted @ 2021-03-25 23:10  千面鬼手大人  阅读(50)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css