1 get和post
解析:参考
get | post | |
---|---|---|
目的 | 从服务器获取指定资源 | 对指定资源做出处理,会修改服务器上的资源 |
参数位置 | url中(长度会受到浏览器的限制) | body中(浏览器不会对body大小做限制) |
是否可以缓存 | 如果请求的是静态资源,就会缓存;如果请求的是数据,就不会缓存。 | 不可以 |
数据包个数 | 1个 | 2个(建立连接后会先发送头,在接收到100continue后才会继续发送数据) |
浏览器回退 | 无害 | 会再次提交请求 |
保留历史参数 | 保留 | 不保留 |
信息 | 可见,不安全 | 在body中,较安全 |
长度 | 限制 | 不限制 |
参考答案:
get和post是http协议中客户端向服务端发送请求的两种方法。从语义上来说,get是从服务器获取指定的资源,如静态文本、页面、视频或图片等,post是根据请求负荷对指定资源做出处理。从实现上来说,两种方法的参数位置不同,get请求的资源包含在url中,post对资源的处理信息包含在请求消息的请求体中。在传输上两种方法没有区别,因为底层使用的传输层协议都是TCP协议,但是从数据包个数上来说,通常情况下两种方法是不同的,get只会产生一个数据包,post会产生两个数据包(但火狐只会发一个)。get比post会更高效。
(但是由于两种方法在传输层是一样的,因此可以通过在get的body中加入数据用post实现get,也可以通过在url中加入修改的资源用get实现post。但是浏览器或服务器不一定支持接收)
不能用get来代替post优化网站性能。因为get和post最大的区别就是产生的数据包的个数了,如果网络环境好,那发一次包和两次包的时间差可以忽略,如果网络不好,两次包的TCP在验证数据包的完整性上具有很大的优点(为什么?)。
2 HTTP和HTTPS
「解析」:
HTTP | HTTPS | |
---|---|---|
是否加密 | 明文传输 | 加密传输 |
建立连接 | TCP三次握手 | TCP三次握手+SSL/TSL握手 |
端口号 | 80 | 443 |
协议层次 | 是应用层协议,运行在TCP上 | 运行在SSL/TSL协议上的HTTP协议(Secure Socket Layer,Transport Layer Security) |
加密和证书 | 使用对称加密、需要到CA申请证书 | |
能耗、效率 | 耗费更多资源,响应速度更慢 |
参考答案:
HTTP和HTTPS协议主要差别在是否安全,HTTP是运行在TCP上的应用层协议,是明文传输的,HTTPS是运行在SSL/TLS协议上的HTTP协议,会对传输的数据进行加密,因此更加安全。在建立连接的时候HTTP协议只需要进行TCP的三次握手,HTTPS协议在TCP三次握手后还需要进行SSL/TSL握手,因此更耗费资源、响应速度更慢。
3 HTTP和Socket
「解析」
HTTP | Socket | |
---|---|---|
本质 | 运行在应用层的网络协议,需要建立TCP连接后才能使用 | 本身不是协议,是应用程序与网络之间的接口,在本地浏览器与服务端进行通信的过程中,由浏览器调用Socket库来委托协议栈工作 |
一台主机上的多个应用程序可以通过一个套接字传输数据,Socket是网络通信过程中端点的抽象表示 | ||
通信形式 | 请求-响应,只有客户端向服务器发送一次请求后,服务端才能向客户端返回数据 | 建立Socket连接后,双方可以直接通信,直到双方连接断开 |
传输层 | 只能基于TCP | TCP和UDP都可以 |
效率 | 需要解析头部字段 | 效率高 |
连接方式 | 短连接 | 长连接 |
参考答案:
HTTP是运行在应用层的网络协议,Socket是进行网络编程时的接口,通过Socket可以使用TCP/IP协议。
使用HTTP协议,需要先建立TCP连接,并在浏览器和服务器之间以“请求-响应”的模式进行通信,只有客户端向服务器发起了请求后,服务器才能对客户端进行响应,并且建立的是短连接。
使用Socket,可以方便我们程序员去调用函数,比如listen, bind, connect, accept等函数,建立TCP连接。Socket也支持使用UDP。建立的连接是长连接,通信过程中没有必须先发送请求才能响应的要求,服务器可以直接向客服端发送数据,直到通信双方断开连接。
4 TCP的三次握手、四次挥手
答案解析:
TCP三次握手:建立连接的时候,将先发起连接请求的一方看成客户端,接受连接的是服务端。1)客户端首先发起一个同步报文,SYN = 1,并包含一个随机序列号x,发送后进入SYN_SENT状态。2)服务端收到同步报文后,进入SYN_RECIVED状态,向客户端回复一个确认报文,TCP报文的首部控制位SYN = 1, ACK = 1,并包含一个随机序列号y,和ack号x+1。3)客户端收到服务端的报文后,进入ESTABLISHED状态,并传递一个确认报文给服务端,首部控制位ACK = 1,确认号为y+1,报文的序列号seq = x + 1。这个报文中可以携带数据。服务端在接收到最后这个报文后,也会进入ESTABLISHED状态。
TCP四次挥手:断开连接的时候,将主动断开的一方看成是客户端,被动断开的一方看成是服务端。1)客户端发起断开报文,首部控制位FIN = 1,序列号为m,发送后进入FIN_WAIT_1阶段,之后客户端只能向服务端发送控制报文。2)服务端收到FIN报文,回复确认报文,首部控制位ACK = 1,确认序列号ack = m + 1,序列号seq = n, 同时服务端进入CLOSE_WAIT阶段,客户端在收到该条报文后进入FIN_WAIT_2阶段。这之后服务端还可以继续向客户端发送数据。3)在服务端结束了所有数据的发送后,会发送断开连接报文,首部控制位FIN = 1, 序列号为大于n的一个数。之后服务端进入LAST_ACK状态,等待客户端的确认包。4)客户端在收到了服务端的FIN报文后,会返回确认报文,首部控制位ACK = 1, 确认号是第三次挥手时服务端发送的序列号+1,报文发出后客户端会进入TIME_WAIT状态,等待2MSL后关闭客户端。服务端在期间收到了客户端的报文后进入closed状态。
三次握手的原因:为了保证连接的正常建立,保证数据收发双方都具有接收数据和发送数据的能力。比如说第一次握手之后,服务端确认了对方发送数据的能力和自己接收数据的能力;第二次握手之后,客户端确认了自己收发数据的能力和对方收发数据的能力;第三次握手后,服务端确认了对方接收数据的能力和自己发送数据的能力。三次握手还能处理一些意外情况,比如当服务端对客户端的同步报文进行确认时丢包,客户端会对同步报文超时重传,但服务端可能已经认为连接建立,开启了错误连接。
2MSL:保证服务端正常断开的机制。如果在客户端收到了服务端的FIN报文回复ACK包后立即断开,那当最后一次挥手消息丢包的时候,服务端会因为没有收到确认消息而无法正常关闭。如果让客户端等待2MSL,那当丢包的时候,服务端会重传FIN包,保证客户端再次发送ACK报文,进而正常关闭。还有一种说法是,可以在该段等待时间内让本次连接的所有报文都消失在网络中,避免对下次通信造成干扰。
5 TCP和UDP
解析
TCP | UDP | |
---|---|---|
连接状态 | 面向连接,使用TCP进行通信的双方首先需要通过三次握手建立连接 | 无连接 |
数据传输形式 | 字节流 | 报文段 |
可靠性 | 全双工的可靠信道,通过校验和、序列号、流量控制、拥塞控制、超时重传等机制保证连接的可靠性 | 尽力交付 |
能耗与速率 | 耗费资源多,传输速率慢 | 耗费资源少,传输速率快 |
应用场景 | 文件传输 | 视频通话 |
参考答案:
TCP和UDP都是传输层协议,TCP面向连接,使用TCP通信的双方首先需要进行三次握手建立连接,连接建立后才可以进行通信,UDP无连接,不需要建立连接就可以进行通信。TCP还有许多机制保证数据的可靠交付,比如使用校验和、序列号、到达确认等机制保证交付,UDP就没有这些机制,只是尽力交付,丢包是可能发生的。因为这些特点,TCP消耗的资源和UDP相比更多,速度也更慢,适用于一些对可靠性要求比较高的场景,比如传输文件,UDP比较适合用在对实时性要求比较高的场景下,比如是视频通话。
6 输入URL到显示网页发生了什么
参考答案:
浏览器对URL进行解析,确定进行通信的服务器域名和请求的文件路径。
对域名进行解析,得到服务器的IP地址。
应用层生成HTTP请求报文,之后浏览器调用Socket库,委托协议栈将请求报文进行网络传输。
传输层建立TCP连接、网络层使用IP协议选择网络路由、数据链路层实现网络相邻结点之间的可靠数据通信、物理层传输数据。
此时数据包到达服务器,服务器对收到的数据包进行处理,检查MAC头部、IP头部、TCP头部信息,将数据包发给相应进程,进程处理后返回响应。
同样的,响应信息经过网络传输后到达客户端,客户端接收到响应数据包后检查各层头部信息后将数据包交给浏览器,浏览器收到了HTTP响应报文后渲染页面,网页就显示出来了。
7 OSI七层协议
参考答案
「物理层」负责在物理网络中传输比特
「数据链路层」负责将比特封装成帧和点到点的传输
「网络层」负责数据的路由、转发、分片
「传输层」负责端到端的数据传输
「会话层」建立、管理和终止会话
「表示层」对数据进行翻译、加密和压缩。
「应用层」负责给应用程序提供统⼀的接口
8 cookie和session
「解析」
cookie | session | |
---|---|---|
实现机制 | 服务器保存在本机的小段文本,客户端发送请求的时候,cookie会随着请求发送给服务器。 | 使用sesion id实现,当服务器第一次接收到来自浏览器的请求时,会自动生成一个session id标识该客户端,并将其加密保存在服务器上。 |
验证过程 | 服务器收到请求后,检查请求头部并拿到cookie,根据cookie内容验证用户信息 | cookie中会附带session id,浏览器会根据该session id将session检索出来 |
存储位置 | 客户端 | 服务器 |
参考答案
两者都是用于给无连接的http提供身份认证的。
补充
-
cookie的分类:
-
会话cookie:不设置过期时间,关闭浏览器窗口cookie就会失效
-
持久cookie:设置过期时间,关闭再打开浏览器,cookie依然有效,直到超过过期时间
-
9 DNS
参考答案
DNS过程:检查浏览器缓存和操作系统缓存以及host配置文件,请求本地DNS服务器,请求查询过程是递归查询,本地DNS会请求根域名服务器进行迭代查询,找到IP地址后返回给浏览器,浏览器会进行缓存。
DNS作用:将域名解析成IP地址
DNS获取流程:用户主机运行DNS客户端,浏览器将域名传送给本机上运行的DNS客户端,由DNS客户端向DNS服务器发送查询报文,DNS服务端会返回结果。
10 SYN洪泛攻击
「问题」SYN洪泛攻击是什么?如何解决?
参考答案:
SYN泛洪攻击:攻击者伪装成客户端向服务端发起同步报文,服务端为了与客户端建立TCP连接会向客户端发送ACK确认报文,此时攻击者不会对该报文进行确认,再服务端会将该连接挂起,并且由于没有收到客户端的回复,服务端会进行超时重传,重新发送确认报文。SYN泛洪攻击就是攻击者向服务端开启了大量此类连接,使服务端有大量挂起的连接,并且不断发送重复的确认报文,消耗服务端的内存,甚至可能会使服务端死机无法正常工作。
如何解决:1)降低SYN time out 时间,在超时时间内没有收到确认报文的话,就释放挂起的连接;2)采用SYN cookie设置,为每个请求连接的ip地址分配一个cookie,如果在短时间内收到多个来自同一个IP的同步报文,就可以认为收到了SYN泛洪攻击,自动丢弃该ip地址传送过来的包。
11 IP地址和MAC地址
「问题」什么是IP地址和MAC地址?为啥有了IP地址还需要MAC地址?IP地址与MAC地址的区别?
参考答案
定义:MAC地址是用来表示每个网络设备的物理地址,是网络设备的唯一标识,不可篡改。IP地址是根据网络拓扑结构对网络中的主机进行分配的逻辑地址。
替代性:IP地址是按照网络拓扑结构分配的,可以通过IP地址知道主机位于网络中哪个位置,因此不能用MAC地址来替代IP地址的作用,MAC地址是没有规律的,是在网络设备出厂时确定的不可更改的地址,而IP地址可以随着网络结构的改变而改变,比较适合在网络中定位主机位置。
区别:1)长度不同:IP地址32位二进制数,MAC地址48位二进制数;
2)分配依据不同:IP地址由网络拓扑结构决定,MAC地址由网卡制造商决定;
3)寻址协议层不同:IP地址用于网络层,MAC地址用于数据链路层。