## 计算机网络面试总结
计算机网络中的结构:
7层结构:应用层,表示层,会话层,传输层(tcp,udp),网络层(ip),数据链路层,物理层
5层结构:应用层,传输层,网络层,数据链路层,物理层
tcp与udp:
tcp:tcp是一种有连接,能保证数据传输正确,有序的服务协议;在传输数据之前,必须先通过tcp三次握手建立一个可靠的连接,它能保证传输数据的正
确性和有序性,它的传输效率低于udp,所以一般用来传输重要的信息;如邮件,远程登陆等;
udp:udp是一种无连接,不能保证数据传输的正确性,但传输效率很高的服务协议;在传输数据前不需要建立连接,接收方收到消息后也不会反馈确认报
文,但它传输效率很高,所以一般用于即时通信,如qq,微信等;
tcp的三次握手:
第一次:客户端向服务端发送确认报文ack=1,以及syn=1,seq为一个序列号,发送到服务端;
第二次:服务端接收到客户端的ack,十一年,seq,并把客户端的seq加1,syn,以及服务端的seq和确认报文ack发送到客户端;
第三次:客户端收到消息,检查ack number是否正确,再返回确认报文ack,以及以及服务端的seq加1返回给服务端;
为什么要建立三次握手:(保证建立的连接能正确传输数据)
第一次握手:服务端确定自己能正常接收,和正常发送;客户端能正常发送
第二次握手:服务端能正常接收,正常发送;客户端自己能正常发送,能正常接收,对方能正常发送,正常接收;
第三次握手:服务端自己能正常发送,正常接收,对方能正常接收,能正常发送;客户端能正常发送,正常接收;
为什么第一次握手过去的syn在第二次握手要返回?
这样能让客户端确认syn的确是自己发送过去的syn,从而确认建立的连接是能正确传输数据的;
tcp为什么能保证数据传输正确:
(1)传输的数据会被tcp分割成它认为最适合传输的数据段;
(2)tcp会对发送的每一个数据包进行编号,接收方全部收到后,要对编号进行排序,正确排好之后才会传给应用层;
(3)检验和:tcp会保持首部与数据段的检验和;这是一种端到端的检验方式,为了保证数据在传输过程中是否发生了变化,通过判断数据段的检验和是否
正确,如果不正确,接收方将丢弃这个数据段并不会确认收到这个数据段;
(4)流量控制:在每个接收方都有一个接收数据缓冲区,接收方只允许发送方发送缓冲区能容纳的数据;当接收方来不及处理发送方传来的数据,将提示发
送方降低传输速率,这个是利用流量滑动窗口来实现的;
(5)拥塞控制:当网络堵塞时,会降低发送速率;
(6)丢弃重复数据:接收方不会接收重复的数据段;
(7)超时重传:发送方在发送一个数据段时,会触发一个定时器,如果发送方在超时时间内为收到接收方的确认报文,那么发送方将重新发送这个数据段,
直到接收到确认报文;
(8)ARQ协议:为了保证数据传输可靠,tcp每传输一组数据就要等接收到接收方的确认报文之后,才会继续传输下一组数据;
输入URL之后会执行的过程:
(1)首先会查看浏览器缓存,路由器缓存,看是否有所请求的数据,用的话就直接用;
(2)对输入的url进行域名解析(DNS解析),获取相应的ip地址信息;
(3)在发送http请求前,先通过tcp三次握手建立可靠的传输连接;
(4)发送http请求,请求数据包;
(5)服务端接收到请求,对请求进行响应,把响应信息反馈给浏览器;
(6)浏览器收到响应信息,进行页面渲染,显示;
(7)关闭连接;
长连接与短连接:
短连接:指的是客户端与服务端建立的连接每次只处理一个请求,当客户端发送请求,服务端接收到请求并响应给客户端后,连接就会关闭;
缺点:每次请求都要重新建立连接,http是基于tcp/ip协议的,每一次连接和断开连接都要经历三次握手和四次挥手的资源开销,如果经常这样,开销就很大
开启长连接:Connection: keep-alive
长连接:指的是客户端与服务端建立的连接会维持一段时间,并不会处理完一次请求与响应就关闭连接,但连接不会一直存在,会维持一段时间;
URI与URL:
uri:指的是唯一资源标识符,可以唯一标识一个资源;
url:指的是唯一资源定位符,可以提供获取该资源的路径;
http与https:
(1)访问地址开头:http是以http://开头;https是以https://开头
(2)端口号:http端口号是8080;https端口号是443;
(3)安全性:http是超文本传输协议,是明文传输;https是安全版的http协议,它会通过ssl层的协议进行加密,是密文传输;
(4)资源消耗:http是一种简单的连接,而https要经过ssl协议进行加密,所以第一次建立连接相对慢一点,并且传输数据会更消耗内存资源以及宽带资源
ARQ协议:
(1)停止传输ARQ协议:它采用的是发送方每传输一个分组就会停止传输,等待接收方的确认报文,如果在超时时间内为收到接收方的确认报文,那么将
重新发送一份,直到接收到接收方的确认报文才会发送下一组数据;
优点:实现简单
缺点:通道利用率低
(2)连续传输ARQ协议:在发送方会维持一个发送窗口;一次性会发送多个分组,接收方会累计接收,并把确认报文一起反馈给发送方;
优点:提高了通道的利用率
缺点:因为中途可能会有数据发生丢失,发送方无法正确的知道哪一个分组丢失了,所以会重传丢失的分组以及丢失之后的分组;
加密:
对称加密:密钥只有一个,加密和加密都为同一个密码,且加密速度快;典型的对称加密算法有DES,AES等;
非对称加密:密钥是成对出现(且根据公钥无法推知私钥),加密和解密使用不同的密钥,公钥加密需要用私钥解密,私钥加密需要用公钥解密;相对于对称
加密速度较慢,典型的非对称加密算法有RSA,DSA等;
http是不保存状态的协议,如何保存用户的状态?
http是一种无状态协议(stateless协议),也就是说http协议自身是不对请求和响应之间的通信状态进行保存;所以我们利用session机制,session的主要作用通过服务器记录用户的状态;典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为http协议是无状态的,服务器给特定
的用户创建特定的session之后就可以标识这个用户并且跟踪这个用户了,session一般会保持一段时间,如果在这段时间内没有访问这个session,这个session将会过期失效;
session与cookie的区别:
(1)存储位置:cookie是存储在浏览器的临时文件中;session是存储在服务器的内存中;
(2)安全性:cookie是为多个用户共享,并且是明文存储,安全性相对较低;session是为一个用户私有,并且是存储在服务器的内存中,安全性较高;
(3)传输方面:cookie能把信息传输到session,而session不能将信息传输到cookie;
(4)使用原则:因为session是存储在服务器的内存中,所以往session存储过多的信息或存储过大的对象,可能会影响服务器内存,所以一般来说,session用来存储一些比较重要的个人信息,而cookie则存储相对来说不太重要的信息;