针对萌新的计算机网络面试基础

    技术2025-10-15  2

    服务器代码先是输入流,则客户端代码先是输出流

    网络分层模型, OSI标准七层模型如下:

    7、应用层: 各种应用程序协议,如HTTP、FTP、SMTP、POP3。

            OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。 我们熟悉的HTTP FTP Email这类服务都是在应用层

    6、表示层:信息的语法语义以及它们的关联,如加密解密、转换翻译、压缩解压缩。

            OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。其主要功能是“处理用户信息的表示问题,如编码、数据格式转换和加密解密”等。

    5、会话层:不同机器上的用户之间建立及管理会话。如SSL、TLS、RPC。

            用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。

    4、传输层:接受上一层的数据,在必要的时候把数据进行分割,并将这些数据交给网络层,且保证这些数据段有效到达对端。

            向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。传输层的作用是向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。该层常见的协议:TCP/IP中的TCP协议,还有UDP

            网关工作在第四层传输层及其以上

    3、网络层(也是通信子网的最高层):控制子网的运行,如逻辑编址、分组传输、路由选择。

            它是OSI参考模型中最复杂的一层,也是通信子网的最高一层。

            其转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。主要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。具体地说,数据链路层的数据在这一层被

             寻址:数据链路层中使用的物理地址(如MAC地址)仅解决网络内部的寻址问题。在不同子网之间通信时,为了识别和找到网络中的设备,每一子网中的设备都会被分配一个唯一的地址。由于各子网使用的物理技术可能不同,因此这个地址应当是逻辑地址(如IP地址)。          交换:规定不同的信息交换方式。常见的交换技术有:线路交换技术和存储转发技术,后者又包括报文交换技术和分组交换技术。          路由算法:当源节点和目的节点之间存在多条路径时,本层可以根据路由算法,通过网络为数据分组选择最佳路径,并将信息从最合适的路径由发送端传送到接收端。          连接服务:与数据链路层流量控制不同的是,前者控制的是网络相邻节点间的流量,后者控制的是从源节点到目的节点间的流量。其目的在于防止阻塞,并进行差错检测。

            网络层设备:路由器

    2、数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路。

            数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。该层的主要功能是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。

            数据链路层:网桥,交换机

    1、物理层:机械、电子、定时接口通信信道上的原始比特流传输。

            物理层主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。         物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。

            物理层设备:网卡,网线,集线器,中继器,调制解调器

    TCI/IP 和 OSI参考模型的对应关系

    这个图也是常考的。OSI与TCPIP的对应关系。

    传输层与网络层的对应关系是最明确的

     

    TCP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。   TCP/IP分层模型的四个协议层分别完成以下的功能:   第一层:网络接口层   包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。   第二层:网络层   对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。   第三层:传输层   对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。   第四层:应用层   对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。

     

    TCP三次握手:

            第一次握手:主机 A 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器,主机 B 由 SYN=1 知道,A 要求建立联机;         第二次握手:主机 B 收到请求后要确认联机信息,向 A 发送 ack number=(主机 A 的

    seq+1),syn=1,ack=1,随机产生 seq=7654321 的包         第三次握手:主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码  ack 是否为 1,若正确,主机 A 会再发送 ack number=(主机 B 的 seq+1),ack=1,主机 B 收到后确认

    Q:为什么要进行第三次握手?

            为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

            由于网络传输是有延时的(要通过网络光纤和各种中间代理服务器),在传输的过程中,比如客户端发起了SYN=1创建连接的请求(第一次握手)。

            如果服务器端就直接创建了这个连接并返回包含SYN、ACK和Seq等内容的数据包给客户端,这个数据包因为网络传输的原因丢失了,丢失之后客户端就一直没有接收到服务器返回的数据包。

            客户端可能设置了一个超时时间,时间到了就关闭了连接创建的请求。再重新发出创建连接的请求,而服务器端是不知道的,如果没有第三次握手告诉服务器端客户端收的到服务器端传输的数据的话,服务器端是不知道客户端有没有接收到服务器端返回的信息的。即确认一下。

    Q:第三次握手的包丢了怎么办?

    Server 端

        第三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。

        而Server重发SYN+ACK包的次数,可以通过设置/proc/sys/net/ipv4/tcp_synack_retries修改,默认值为5.

        如果重发指定次数之后,仍然未收到 client 的ACK应答,那么一段时间后,Server自动关闭这个连接。

    Client 端

        在linux c 中,client 一般是通过 connect() 函数来连接服务器的,而connect()是在 TCP的三次握手的第二次握手完成后就成功返回值。也就是说 client 在接收到 SYN+ACK包,它的TCP连接状态就为 established (已连接),表示该连接已经建立。那么如果 第三次握手中的ACK包丢失的情况下,Client 向 server端发送数据,Server端将以 RST包响应,方能感知到Server的错误。

    这个是更详细的三次握手的全面解释,如果复习到这里,一定要点过去看

    Q:第一次握手如果拥堵了,服务端一次性收到好几个第一次握手的包怎么处理?

            首先,我们可以确定,客户端重复发的包的seq是不一样的,所以也就是说,服务端如果没有策略设定的话,那么会全部回应,然后客户端这边收到syn/ack后,把失效的排除掉,只回一个ack给服务端。

    从而会引发以下问题:

    tcp三次握手中, 如果客户端不断的发送请求连接会怎样?

            如果服务端没有做策略处理的话,服务器会为每个请求连接都分配资源,并且发送一个确认创建连接的控制包,然后等待客户端发送第三次握手数据包。DDos就是利用这种方式进行攻击的。

    DDos(Distributed Denial of Service)攻击

           客户端向服务器发送大量请求连接,服务器因此分配连接资源,并向客户端发送第二次握手数据包,但是此时客户端却不向服务器发送第三次握手数据包,导致服务器有大量资源等待着第三次握手数据包,每个资源须等待30s到2min才会关闭。这会占用大量的服务器资源,使服务器性能降低。

    DDos预防(没有根治的办法,除非不用TCP/IP连接)

    正确设置防火墙。限制特定IP短地址的访问。启用防火墙的防DDos的属性。限制同时打开SYN的半连接数目。关闭不必要的服务。严格限制对外开放的服务器的向外访问。缩短SYN半连接的time out时间。确保服务器的系统文件是最新版本,并及时更新系统补丁。

    TCP四次挥手:

     

            TCP 建立连接要进行三次握手,而断开连接要进行四次。这是由于 TCP 的半关闭造成的。因为 TCP 连 接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个 FIN 来向另一方通告将要终止这个方向的连接。

            1) 关闭客户端到服务器的连接:首先客户端 A 发送一个 FIN,用来关闭客户到服务器的数据传送, 然后等待服务器的确认。其中终止标志位 FIN=1,序列号 seq=u

            2) 服务器收到这个 FIN,它发回一个 ACK,确认号 ack 为收到的序号加 1。         3) 关闭服务器到客户端的连接:也是发送一个 FIN 给客户端。         4) 客户段收到 FIN 后,并发回一个 ACK 报文确认,并将确认序号 seq 设置为收到序号加 1。

            首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

     

    Q:为什么客户端在TIME-WAIT阶段要等2MSL?

            为的是确认服务器端是否收到客户端发出的ACK确认报文

            当客户端发出最后的ACK确认报文时,并不能确定服务器端能够收到该段报文。所以客户端在发送完ACK确认报文之后,会设置一个时长为2MSL的计时器。MSL指的是Maximum Segment Lifetime:一段TCP报文在传输过程中的最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长。

            服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文。

    TCP和UDP的区别:

    TCP协议:面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。

    UDP协议:是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。

    HTTP概述:

            HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接(目前Http 2.0 出来后 能够支持持久连接)

            这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息。

            HTTP 遵循请求(Request)/应答(Response)模型。客户机(浏览器)向 服务器发送请求,服务器处理请求并返回适当的应答。所有 HTTP 连接都被构造成一套请求和应答。

    Http传输流程:

    1、协议解析:

            如用客户端请求这个页面:http://localhost.com:8080/index.html 从中分解出协议名、主机名、端口、对象路径等部分。

    2、封装HTTP请求数据包

            把以上部分结合本机自己的信息,封装成一个HTPP 请求数据包。

    3、封装成 TCP 包并建立连接

            封装成 TCP 包,建立 TCP 连接(TCP 的三次握手)。

    4、客户机发送请求命令

            建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可选内容

    5、服务器响应

            服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

    6、服务器关闭TCP连接

            一般情况下,一旦 Web 服务器向浏览器发送了请求数据,他就要关闭 TCP 连接,然后如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive , TCP 连接在发送后仍然将保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

    HTTP是无状态的,如何识别用户的登录状态?

            身份验证机制 Cookie , Session 与 Token 。 Cookie 在客户端存储, Session 在服务器存储, Token 本质上是放在 Cookie 里面的一段密文,服务器接收后临时计算登录信息有效性

    Processed: 0.019, SQL: 10