计算机网络面试常问


不懂三次握手和四次挥手先转下方超链接

三次握手四次挥手详解

1、tcp首部

2、三次握手

  • 第一次握手:客户端将SYN的标志位置为1,随机产生一个数值c,作为数据包的序列号seq,即seq=c,然后发送数据包给服务端

  • 第二次握手:服务端收到了来自客户端的报文,通过SYN=1,知道了这是要请求建立连接,于是服务端先随机生成一个数值s作为自己数据包的序号,即seq=s,然后在TCP首部的确认应答号ack=c+1 ,将SYN和ACK的标志位置为1,然后发送报文给客户端。

  • 第三次握手:客户端收到了来自服务端的应答,还需要想服务端回应最后一个应答报文。将应答报文TCP首部的ACK标志位置为1,seq=c+1,ack=s+1。 注意第三次握手可以携带数据。

3、四次挥手

  • 第一次挥手:客户端请求断开连接,发送一个TCP首部FIN位为1的报文,表示请求断开连接

  • 第二次挥手:服务端收到来自客户端的FIN报文后,发送ACK应答报文,表示收到请求。

  • 第三次挥手:经过前两次挥手后,此时客户端只是不再发送给服务端数据,但是还可以接收服务端的数据。 服务端把数据发送完毕后,再次发送一个FIN报文,请求断开连接。

  • 第四次挥手:客户端收到来自服务端的FIN报文,回复一个ACK应答报文,然后进入等待(2MSL)。之后服务端成功断开连接,客户端也断开了连接。

  • 拓展:如果客户端没有等待的话,当最后一个发送的ACK报文碰到网络拥堵的时候,造成服务端迟迟没有收到,不能正确关闭。然后当客户端发送新的请求连接时候,服务端就会发送RST报文,连接建立的过程就会被终止。

    如果最后客户端等待时间过长,会造成内存资源和端口资源的浪费。

4、为什么四次挥手比三次握手多一次

  • 因为第一次挥手的时候只是断开了从A到B的数据传送,但是A还是可以接收B的数据,可能此时B的数据还没传输完,所以B的第二次挥手是回复A收到了消息,第三次是B发送完后 发送fin请求断开。

5、为什么不能两次握手

  • 两次握手的话,如果第一次握手时候,客户端发送的syn碰到了网络拥堵,造成了服务端无法进行第二次握手,然后客户端发现迟迟未收到回复,又一次发送请求,过了一会,服务端收到了第一次的syn,第二次握手,然后客户端接收了,建立连接。过了一会,客户端第二次发起的请求到达了, 服务端又建立起了连接。造成了不必要的资源浪费。

6、为什么不能四次握手

  • 三次握手理论上已经是最少的通信次数,所以不需要多进行一次浪费不必要的时间开销

7、为什么要三次握手才行

  • 三次握手可以保证双方具有接收和发送能力、可以防止旧的重复连接初始化造成混乱

8、为什么要传回SYN

  • 接收端传回发送端所发送的SYN是为了证明双方的通信通道没有问题

9、为什么要传ack

  • 确认信息的准确无误

10、tcp/udp的区别

  • 连接

    • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
    • UDP 是不需要连接,即刻传输数据。
  • 服务对象

    • TCP 是一对一的两点服务,即一条连接只有两个端点。
    • UDP 支持一对一、一对多、多对多的交互通信
  • 可靠性

    • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
    • UDP 是尽最大努力交付,不保证可靠交付数据。
  • 拥塞控制、流量控制

    • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
    • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
  • 首部开销

    • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是20 个字节,如果使用了「选项」字段则会变长的。
    • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

11、流量控制、拥塞控制过程

这是一个超链接

12、UDP和TCP的特点

  • 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
  • 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。

13、tcp如何保证可靠性传输

  • 应用数据会被分割成tcp认为最适合的大小的数据块
  • tcp会给发送的每一个包进行编号,发送到接收端后,会进行排序,然后传给应用层
  • 校验和,tcp会检测首部与数据的校验和,发送到接收端后,接收端会检测校验和是否正确,如果不正确,那么就会丢弃这个数据,并且不确定收到此报文段。
  • tcp的接收端会丢弃重复数据
  • 流量控制,接收端只允许接收发送端发送接收端缓冲区能容纳的数据。当接收端来不及处理数据的时候,会减缓传输速率,防止包丢失。(流量控制协议是可变大小的滑动窗口协议)
  • 拥塞控制,网络拥堵的时候,减少数据的发送(发送方维护一个拥塞窗口(cwnd),tcp的拥塞控制采用了慢开始、拥塞避免、快恢复和快重传(fast retransmit and recovery,FFR )四种算法。
  • 停止等待ARQ协议,当发送完一个分组后,发送端会立刻停止发送,直到收到来自接收端的确认收到信号,才会继续发送
  • 重传机制,当发送一个数据包后,发送端的定时器会立刻开始计时,如果在定时器的结束时间之前没有收到来自接收端的确认收到信号,就会重新发送。

14、从浏览器输入url,发生了什么?

  • 进行DNS解析,将域名解析为对应的ip
  • 浏览器向web服务器发起http请求
  • 服务器收到请求后返回html响应
  • 浏览器解析后渲染页面

15、从浏览器输入url,都用到了什么协议?

  • dns协议,将域名解析为对应的ip地址
  • tcp协议,连接服务器
  • ip协议,tcp连接发送的数据在网络层中使用ip协议
  • ospf协议(open shortest path fast,开放式最短路径优先),路由器之间的选择使用ospf协议
  • arp协议,路由器与服务器通信,需要通过arp协议将ip地址转换为mac地址
  • http协议,在tcp连接后,采用http协议访问网页

16、网页状态码类型

  • 1xx,表示成功发出请求正在处理
  • 2xx,表示成功处理请求
  • 3xx,表示需要完成请求,需要进行重定向
  • 4xx,表示请求错误,妨碍了服务器的处理
  • 5xx,表示服务器错误
  • 常见的状态码 点击跳转

17、HTTP是不保存状态的协议,如何保存用户状态?

  • 通过Session机制,服务端给特定用户创建特定的Session后,就可以标识这个用户并跟踪这个用户,Session会有一个保存时间限制,过了这个时间,会销毁这个Session

18、Cookie的作用?和Session的区别?

  • Cookie和Session作用一样,都是为了跟用浏览器用户身份的会话方式,区别在于Cookie一般用来保存用户信息,Session用来记录用户状态。Cookie保存在本地,Session保存在服务端

19、HTTP长连接和短连接?

  • http1.0默认用短连接。客户端每次与服务端进行一次http操作就会创建一个新的连接,任务中断就断开连接。
  • 到了http1.1改用长连接。打开网页后,用于传输http数据的tcp连接不会断开,客户端再次操作时,还是通过这一条已建立的连接。
  • http的长连接和短链接本质上是tcp的长连接和短连接。

20、get和post的区别

  • 作用:get用于获取资源,post用于上传数据。
  • 参数:get的参数在url中,post的参数存储在实体主体。
  • 安全性:get是安全的,post不安全。因为get只是获取资源,不会改变服务器状态,而post上传的数据可能存在数据库中,会改变服务器状态。
  • 幂等:get方法都是幂等的,post不是。幂等指多次请求和一次请求的结果是一致的。

21、http和https的区别?

  • 端口号:http默认端口是80,https默认端口是443
  • 安全性:http上的数据都是明文的,客户端和服务端都无法验证对方身份。https是建立在ssl/tls之上的http,传输内容采用对称加密,对称加密的密钥用服务器方的证书进行了非对称加密,https更耗费服务器资源。
  • 对称加密:用同一个密钥,加密解密为同一个密码,常用算法有DES、AES
  • 非对称加密:密钥成对出现,公钥加密需要私钥解密,私钥加密需要公钥解密,常用的算法有RSA、DSA。

22、为什么DNS基于UPD

因为UDP是面向无连接 不要求准确 但是速度快,DNS解析是一种查询服务 查询要求的是速度,所以使用UDP的 ,如果用TCP一个查询要等很久。

23、DNS解析过程

首先会在浏览器缓存中,看是否有记录域名与IP地址的映射,如果没有的话,就从本机hosts文件和路由缓存中找,如果也没有,那么就去本地DNS服务器寻找,如果也没有,那么会向根域名服务器查询,根域名服务器会告诉本地DNS服务器下一级要去的域名服务器,然后迭代,直到找到对应的ip,回溯的时候,本地DNS服务器就记录这个域名与IP地址的映射,同理操作系统和浏览器也会记录下来,这样下次查询的时候就不需要再找一遍过程。

从浏览器到本地DNS服务器是递归
从本地DNS服务器到外网属于迭代

24、http1.0、http1.1、http2.0区别

这是一个超链接

http1.0与http1.1:长连接、节约带宽、host域

http1.1与http2.0:多路复用、二进制分帧、服务器推送、首部压缩

25、http

这是一个超链接
1.支持B/S和C/S
2.简单快速
3.灵活
4.无链接
5.无状态

26、ping一个域名的过程

这是一个超链接
首先如果我们ping的是一个域名,那么它会先进行DNS解析,得到和域名绑定的相关ip,得到ip地址之后,会进行ARP解析,得到这个ip地址所对应的MAC地址,然后发送ICMP报文,当发送端收到接收端的应答报文后,说明网络是连通可达的。

27、ARP协议

这是一个超链接

ARP协议,就是想要通过已知的IP地址,找到该IP地址所对应的物理设备的MAC地址。
ARP协议,通过已知的目的Ip地址,定位到下一个应该接受数据分包的物理设备的MAC地址。
如果目的IP和当前发送端的主机在同一个网段,这时会通过arp直接找到目的物理设备的mac地址
如果不在同一个网段,那么当前发送端会发送与当前主机在同一网段的一个路由器的mac地址,
然后由该路由器进行转发到下一个网段。

找到后,目的设备将自己的ip地址和mac地址丢尽ARP响应包,单播回来。



28、计算机网络体系

在这里插入图片描述
在这里插入图片描述


29、TCP粘包

这是一个超链接

TCP粘包:指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。

什么时候需要解决粘包问题
当tcp发送一个数据块的时候,里面包含了多组不相关的数据,就需要处理粘包

如何解决
1.发送端关闭Nagle算法
2.发送端要发送长度,应用层根据长度可以处理出来每一组数据的开始和结束位置



30、四次挥手的time_wait

定义
time_wait是两倍的最大报文段生命周期(2MSL)。它是tcp断开连接的时候,主动关闭的一端,第四次挥手时候传回ack后进入的一个状态。

作用
他主要是用来防止当碰到网络拥堵的时候,ack没有及时传给另一端,用来进行重传,能够正确的关闭这条tcp连接,并且可以让那些因为网络拥堵的迟到报文,被另一端识别并抛弃。

time_wait过多的影响
会占用大量的内存,一个time_wait占用4k大小

过多如何解决
1.内核参数优化
2.将短连接改为长连接,减少了tcp连接次数,等于减少了端口占用个数,也就少了关闭请求



31、端口的作用

端口分为三类,分别是周知端口、动态端口、注册端口

周知端口:范围从0到1023,即广为人知的端口号,比如http是80,https是443

动态端口:范围从49152到65535,它 一般不固定分配某种服务,而是动态分配

注册端口:端口1024到49151,分配给用户进程或应用程序。这些主要是用户选择安装的一些应用程序

作用:端口是tcp/ip协议中传输层的概念,用于区分同一台主机中的不同应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不会c语言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值