计算机网络汇总

面试题汇总

计算机网络

1、OSI七层模型分别是什么?各自功能是什么?TCP/IP四层模型?

OSI七层:

物理层---底层数据传输,如网线;网卡标准

数据链路层---定义数据的基本格式,如何传输,如何标识;如网卡MAC地址

网络层---定义IP编址,定义路由功能;如不同设备的数据转发

传输层---端到端传输数据的基本功能;如TCP UDP

会话层---控制应用程序之间会话能力;如不同软件数据分发给不同软件

表示层---数据格式标识,基本压缩加密功能

应用层---各种应用软件;包括web应用

TCP/IP四层:

数据链路层、网络层、传输层、应用层

总结

网络七层模型是一个标准,而非实现。

网络四层模型是一个实现的应用模型。

网络四层模型有七层模型简化合并而来。

2、三次握手(建立TCP连接)

三次握手

【作用是为了确认双方的接受与发送能力是否正常】

刚开始客户端处于closed的状态,服务端处于listen状态。

1、第一次握手:客户端给服务端发送一个SYN报文,并指明客户端的初始化序列号ISN,此时客户端处于SYN_send状态。

2、第二次握手:服务端接口到客户端的SYN报文之后,会以自己的SYN报文作为应答,并且也指定了自己的初始化序列号ISN,同时会把客户端的ISN+1作为ACK的值,表示已经接收到了客户端的SYN,此时服务端处于SYN_RCVD的状态。

3、第三次握手:客户端收到服务端的SYN后,会发送一个ACK报文,当然也是把服务器的ISN+1作为ACK的值,表示已经收到了服务端的SYN报文,此时客户端处于established状态。

4、服务器收到ACK报文之后,也处于established状态,此时,双方建立起连接

三次握手作用

  • 确认双方的接收和发送功能正常
  • 指定初始化序列号,为后面的可靠性传输做准备

ISN固定吗?

ISN是动态生成的

固定容易暴露确认号,不安全,容易受到攻击

半连接队列?全连接队列?

半连接队列:服务器第一次收到客户端的SYN,处于SYN_RCVD状态,此时双方还没完全建立连接,服务器会把此种状态下的请求连接放在一个队列中,此队列称之为半连接队列

全连接队列:已经完成三次握手,建立起的连接就会放在全连接队列中。如果全连接队列满了,会存在丢包的状态

SYN+ACK重传:服务器发送SYN+ACK后,未收到客户端的确认包,会有等待重试机制,当重试超多规定次数,系统将该连接信息从半连接队列中删除

三次握手过程中可以携带数据吗?

第一次和第二次不可以,容易受到攻击,

第三次可以携带数据,从客户端的角度 双方的接收与发送工能正常,所以携带数据页应该没啥问题

3、四次挥手(释放TCP连接)

刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求,则:

1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。

2、第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。

3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

  • TIME_wait状态

    客户端发送ACK之后不直接关闭,而是要等一会关闭,一般等待时间至少是一个报文的来回时间

    等待原因:要确保服务器是否已经收到客户端的ACK报文,如果没有收到,服务端会重发FIN报文,客户端收到FIN报文之后知道之前ACK丢失,重发ACK

4、TCP和UDP区别,应用场景

区别:

TCP是可靠传输,UDP是不可靠传输

TCP面向连接 UDP无连接

TCP传输数据有序 UDP不保证数据的有序性

TCP传输速度相对UDP较慢

TCP有流量控制和拥塞控制 UDP没有

TCP重量级协议 UDP是轻量级协议

TCP不保存数据边界 UDP保存数据边界

TCP首部较长20字节 UDP首部较短8字节

TCP应用场景

效率要求相对低,但对准确性要求相对搞的场景。

e.g.文件传输、远程登录等

UDP应用场景

效率要求相对到,对准确性要求相对低的场景。

e.g.在线视频、网络语音通话、qq聊天等

TCP可靠性原理

  • 首先,采用三次握手建立TCP连接,四次挥手释放TCP连接,从而保证建立的传输通道是可靠的
  • 其次,TCP采用了连续ARQ协议(回退N,go-back-N;超时自动重传)来保证数据传输正确性,使用滑动窗口协议来保证接方能够及时处理所接受到的数据,进行流量控制。
  • 最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞

ARP协议工作原理

网络层的APR协议完成了IP地址与物理地址MAC地址的映射。

每天主机都会在自己ARP缓冲区建立一个ARP列表,表示IP地址和MAC地址的对应关系。当源主机将一个数据包发送给目的主机时,先检查自己的ARP列表是否存在这个IP,存在直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播,查询此目的主机的MAC地址。网络中所有的主机收到这个ARP请求后,会检查数据包中IP是否和自己IP地址一致,如果不想通就忽略此数据包,如果相同,先添加到自己的ARP列表中,若之前此IP存在则直接覆盖,然后给源主机发送一个ARP响应数据包。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

5、cookie和session区别?

  • cookie

1、cookie是浏览器访问服务器后,服务器传给浏览器的一段数据(key-value格式)。浏览器需要保存这段数据,不得轻易删除。此后每次浏览器访问该服务器,都必须带上这段数据。

2、cookie一般有两个作用:其一是识别用户身份;其二是记录历史。

3、cookie是客户端技术,通常保存在客户端,即本地,IE浏览器把cookie信息保存在类似于C:\windows\cookies的目录下。因为cookie在客户端所以可以编译伪造,不是十分安全。

【详细了解cookie】https://www.iamshuaidi.com/1998.html

  • session

1、session是服务器为了保存用户状态而创建的一个特殊的对象。

2、 当浏览器第一次访问服务器时,服务器创建一个session对象(该 对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId 以cookie的方式发送给浏览器。 当浏览器再次访问服务器时,会将sessionId发送过来,服务器依据 sessionId就可以找到对应的session对象。

3、session是服务器端技术,在服务端,利用这个技术,服务器在运行时可以为每个用户的浏览器创建一个独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户去访问服务器中的其他web资源时,其他web资源在从用户各自的session中取出数据为用户服务

【详细了解session】:https://blog.csdn.net/h19910518/article/details/79348051

posted @ 2022-01-06 01:05  学点东西真不容易  阅读(56)  评论(0编辑  收藏  举报