春招面试题总结--计网部分

一、五层协议模型

五层体系结构

1、应用层

应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。

1、 域名系统 DNS:完成从域名到IP地址的解析

2、简单邮件传送协议SMTP:发送邮件

3、超文本传输协议HTTP:提供一种发布和接收 HTML 页面的方法

1、Cookies和Sessions

他们都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。

比如我们输入用户名和密码,点击登录。这个时候后台会验证这个账号,如果验证成功,就会给用户生成一个token,后台自己存一份,再给前端发一份,之后客户端和服务器之间的交互就通过这个token完成,前端用这个token表示自己的身份,后端用token验证客户端的身份。而本地保存token的东西叫做cookies,服务器保存token的叫做sessions,另外token有个过期时间,很长时间不进行token操作就会失效,需要重新登陆。

2、http和https

端口上:http的URL由http://起始,默认80端口;https的URL由https://起始,默认443端口。

安全性上:https安全性比http高,http运行在TCP之上(计网中是TCP运行在传输层,将应用层的http进行封装),所传输的内容是明文,客户端和服务端无法确认对方身份因此安全性较低;而https运行在SSL/TLS之上,SSL/TLS运行在TCP之上,传输的内容经过加密,因此安全性较高,但需要消耗更多的服务器资源。

3、http长连接和短连接

http1.1之前默认使用短连接,客户端和服务器每进行一次http操作就建立一次连接,任务结束中断连接。http1.1以后默认使用长连接,当一个网页打开以后,客户端和服务器之间用于传输http数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这条已经建立的连接, Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

4、get和post

作用:GET用于获取资源,POST用于传输实体主体

参数:GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。

安全性:安全的http方法不会改变服务器状态,因此GET是安全的,而POST是不安全的,因为POST会传送实体主体内容,上传成功以后,服务器会把内容传送至数据库,这样状态也就发生了改变。

幂等性:同样的请求执行一次和多次效果是一样的,GET是幂等的,而POST不是。

可缓存:GET可缓存,POST不可。

5、从输入URL到页面加载发生了什么

检查本机的 C:\Windows\System32\drivers\etc\hosts 配置文件中有没有这个域名的映射,如果有,则根据对应的IP地址直接访问,否则去DNS服务器找。

**DNS解析:**互联网中唯一标识一台计算机的是它的IP地址,而IP地址比较难记忆,我们通常使用域名也就是俗称的网址来请求网页,DNS类似于一个翻译者的角色将网址翻译成IP地址。(DNS优化–>DNS缓存;DNS负载均衡–>根据每台机器的负载量,该机器离用户地理位置的距离等等 返回一个合适的机器的IP给用户 )

TCP连接

发送HTTP请求:建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。HTTP请求报文是由三部分组成: 请求行, 请求报头和请求正文。
**服务器处理请求并返回HTTP报文:**后端从在固定的端口接收到TCP报文开始,这一部分对应于编程语言中的socket。它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。这一部分工作一般是由Web服务器去进行。

HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。
浏览器解析渲染页面: 浏览器在收到HTML,CSS,JS文件后, 把它呈现到屏幕上。
连接结束

6、http常用方法

(1)get方法:获取资源
GET方法是用来请求URL指定的资源。指定资源经服务器端解析后返回响应内容。
例:返回index.html的页面资源

GET /index.html HTTP/1.1
Host: www.php.cn

(2)post方法:传输实体主体

例:返回submit.cgi接收数据的处理结果

POST /submit.cgi HTTP/1.1
Host:www.php.cn
Content-Length:1560

(3)PUT方法:传输文件

PUT方法用来传输文件。像FTP协议的文件上传一样,要求在请求报文主体中包含文件的内容,然后保存到请求URL指定的位置。不太常用。

例:响应返回状态码204 No Content(比如:该html已存在于服务器上)

PUT /example.html HTTP/1.1
Host:www.php.cn
Content-Type: text/html
Content-Length: 1560

(4)HEAD方法:获取报文首部

HEAD /index.html HTTP/1.1
Host:www.php.cn

(5)DELETE方法:删除文件

DELETE方法用来删除文件,是PUT的相反方法。DELETE方法按请求URL删除指定的资源。也不常用。

例:响应返回状态码204 No Content(比如:该html已从该服务器上删除)

DELETE /example.html HTTP/1.1
Host:www.php.cn

(6)OPTIONS方法:询问支持的方法

OPTIONS方法用来查询针对请求URL指定的资源支持的方法。

OPTIONS * HTTP/1.1
Host:www.php.cn

7、http状态码

200:请求相应成功 200;

3xx:请求重定向;

  • 重定向:你重新找你的新位置去;

4xx:找不到资源 404

5xx:服务器代码错误 500 502:网关错误

8、HTTP 报文中包括什么

请求行、请求头、请求体

www.xxy.com:80/getAll --URL /getA–URI

GET /index.html HTTP/1.1   #请求行:方法、URI、HTTP协议
Host: www.enjoytoday.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://www.enjoytoday.cn/posts/326
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: bdshare_firstime=1466032270994; UM_distinctid=15c4ef2ac4e2e4-0d13269271b947-1b2a120b-1fa400-15c4ef2ac4f7b5; un=aGZjYWk=; comment_author=aGZjYWk=; comment_author_email=1710600212@qq.com; comment_author_url=http://www.enjoytoday.cn; c_id=dUhIaTlndmc4MVVYbjRQTGxMRTotMTpFODg3QjgzQjg1NjgxQjQxRUYxNjg2QzJFRkMyQjI2QQ==; JSESSIONID=ADBC8C3DADF6C815D778450C193C6637.ajp13_worker; Hm_lvt_ce55bfda158556585a8b7b246346c8ba=1498560244,1498739070,1498833193,1498917432; Hm_lpvt_ce55bfda158556585a8b7b246346c8ba=1498917597; CNZZDATA1262047894=1598545996-1495973145-%7C1498917578

username=hfcai&sex=man

1、请求行

GET /index.html HTTP/1.1 :方法、URI、HTTP协议版本

2、请求头

Host: www.enjoytoday.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
......
请求头中包含请求源、请求浏览器的一些基本信息、和缓存有关的信息存入

3、请求体

username=hfcai&sex=man 保存着请求数据,如 json;POST 方法包含的信息就存在请求体中。

1

2、传输层(TCP UDP)

运输层(transport layer)的主要任务就是提供两台主机进程之间通用的数据传输服务。传输层采用端口号来确定不同的进程。

主要使用以下两种协议:

  1. 传输控制协议 TCP(Transmission Control Protocol)–提供面向连接的,可靠的数据传输服务,传送的是字节流(方便进行流量控制 拥塞控制等,保证可靠传输),只能是一对一通信。

  2. 用户数据协议 UDP(User Datagram Protocol)–提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性),传送的是应用报文,适用于实时性要求比较高的应用场景,比如视频会议等,可以进行一对一,一对多甚至多对多通信。

2.1 三次握手建立连接

1612361870944

三次握手的目的是建立可靠的通信信道 , 双方确认自己与对方的发送与接收是正常的

  • 客户端–发送带有 SYN 标志的数据包–一次握手–服务端

  • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端

  • 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

详细版

1619414981832

第一次握手: 建立连接。客户端发送连接请求报文段,将SYN位置为1,Seq同步序列号为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

第二次握手: 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Ack为x+1(Sequence Number+1);同时,自己还要发送SYN请求信息,将SYN位置为1,Seq为y,一并发送给客户端,此时服务器进入SYN_RECV状态;

第三次握手: 客户端收到服务器的SYN+ACK报文段。然后将Ack设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

为什么要三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

假设客户端发出的某个连接请求在某个网络节点滞留了,以至于到了连接释放后的某个时间才到达服务端,此时这个连接请求实际上已经失效了,但是服务端并不知道,它仍然会发出确认报文段并且建立连接,客户端收到确认报文后,由于它并没有在发送连接请求,所以并不会理睬这个确认报文,也不会传送数据,此时服务端还在等待客户端传送数据,服务端的资源就被白白浪费了。

2.2 四次握手断开连接

四次挥手
  • 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送

  • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号

  • 服务器-关闭与客户端的连接,发送一个FIN给客户端

  • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

详细版

第一次分手: 主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

第二次分手: 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

第三次分手: 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

第四次分手: 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

上图中服务器发回rst位,同时win置为0,是告诉客户端不要发包。按tcp流控机制来说,此时客户端应该停止发包,直至服务器发送信息告诉客户端可以继续发送。

为什么要四次握手?

当客户端给服务端发送一个FIN报文段时,表示客户端数据已经传送完毕,服务端返回一个ACK报文,表示知道客户端已经发送完毕了;但此时服务端可能还有数据要向客户端传送,当服务端也向客户端发送FIN报文段的时候,表示自己也完成了发送,客户端返回一个ACK报文,连接正式关闭,通信双方的数据都能安全传输完毕。

2.3 TCP如何保证数据可靠传输

校验和: TCP 将保持它首部和数据的检验和。 如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。

流量控制: TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 为了防止流量控制信号丢失而造成的死锁局面(流量控制窗口为0,服务器不能发送数据,在等待客户端更改滑动窗口大小,而客户端发送的更改滑动窗口信号传输过程中丢失了,客户端并不知道丢失了,也在等服务器发送数据),设置一个持续计数器发送零窗口探测报文段,看看客户端要不要修改滑动窗口大小。

拥塞控制: 拥塞是指网络超过现有负荷。为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度, 发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。 TCP的拥塞控制采用了四种算法,即 慢开始(从发送数据开始,逐渐增加发送窗口大小) 、 拥塞避免 (逐渐增加拥塞窗口)、快重传 和 快恢复(快速恢复丢失的数据包)。

超时重传机制:

**停止等待协议:**每发送完一个分组就停止发送,等待对方确认(回复ACK),每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。

连续ARQ协议:发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。缺点是一旦某个数据传送失败了,这个数据以及它之后的数据都要重传,不管是否传输正确。

2.4 TCP粘包和拆包

**是什么:**TCP只是一种协议,具体实现由收发双方的socket来完成,发送方socket会维持一个发送窗口,它类似于一个缓存,只有当发送窗口满的时候才将信息整体发送出去。假设A向B发出了两个信息,可能的情况有三种:两条信息均正确到达;发送窗口太大,能够同时容纳M1和M2,此时M1和M2就会发生粘包;发送窗口小了,比如可以容纳M1但是不足以容纳M2,此时M2就会发生拆包,同时进入发送窗口的部分会和M1发生粘包。

**怎么办:**一种比较粗暴的方法就是放弃发送窗口的维持,每当有数据来就发送出去;另外一种方法是在信息头部表明信息长度,确定信息的位置便于接收方完整的接受信息。

1619057290484

3、网络层

在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。

4、数据链路层

两台主机之间的数据通信总是在一段一段的链路上完成的,数据链路层将网络层传下来的IP数据包封装成帧,在数据链路中传输,每一帧数据包括数据部分和控制信息部分,控制信息可以帮助判错和纠错,接收数据时将控制信息部分抽离,只传数据到上层运输层。

5、物理层

在物理层上传输的数据单位是比特,作用是实现相邻计算机节点之间比特流的透明传输(经实际电路传送后比特流没有发生变化),尽可能屏蔽掉具体传输介质和物理设备差异,使数据链路层不必考虑网络中的具体传输介质是什么。

面试题:

TCP是哪一层的协议,TCP和UDP的区别,怎样标识一条TCP连接

TCP滑动窗口讲讲

tcp和udp的区别 首部报文格式差异 三次握手 四次握手 流量控制和拥塞控制

计算机网络的层数

一帧数据包括数据部分和控制信息部分,控制信息可以帮助判错和纠错,接收数据时将控制信息部分抽离,只传数据到上层运输层。

5、物理层

在物理层上传输的数据单位是比特,作用是实现相邻计算机节点之间比特流的透明传输(经实际电路传送后比特流没有发生变化),尽可能屏蔽掉具体传输介质和物理设备差异,使数据链路层不必考虑网络中的具体传输介质是什么。

面试题:

TCP是哪一层的协议,TCP和UDP的区别,怎样标识一条TCP连接

TCP滑动窗口讲讲

tcp和udp的区别 首部报文格式差异 三次握手 四次握手 流量控制和拥塞控制

计算机网络的层数

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值