阅读 3163

面试中必备的网络相关知识

废话不说,直接上干货。

1.协议的概念和作用

为了能让计算机之间能够通信,计算机需要定义通信规则,这些规则就是协议。规则有多种,协议也有多种。协议就是数据封装格式+传输。

2.OSI七层模型

应用层:提供网络服务和最终用户软件之间的接口服务。
表示层:数据的表示、安全、压缩。
会话层:建立、管理、中止会话。
传输层:定义传输数据的协议端口号,以及流控和差错校验。
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。
数据链路层:建立逻辑连接、进行硬件地址寻址、差错检验等功能。
物理层:网线、同轴电缆等。

3.TCP/IP参考模型

常用的协议:
TCP/IP协议被称为传输控制协议/互联网协议,又称网络通讯协议,是由网络层的IP协议和传输层的TCP协议组成的,是一个很大的协议集合。
物理层和数据链路层没有定义任何特定协议,支持所有的标准和专用的协议。
网络层定义了网络互连,也就是IP协议:
(1) 网际协议(IP):负责主机和网络之间寻址和路由数据包。
(2) 地址解析协议(ARP):获得同一物理网络中的硬件主机MAC地址。
(3) 网际控制消息协议(ICMP):发送消息,并报告有关数据包的传送错误。
(4) 互联网管理协议(IGMP):IP主机向本地多路广播路由器报告主机组成员。
传输层定义了TCP(传输控制协议)和UDP(用户数据报协议)。
应用层定义了HTTP(超文本传输协议)、FTP(文件传输协议)、DNS(域名系统)等协议。
下面详细说明一下,以上层的用途:
(1) 物理层和数据链路层,这两个层共同组成了网络接口层,它是TCP/IP的最底层,此层没有特定的协议,它负责接收上一层交来的数据报,并将数据报通过底层的物理网络发送出去。
(2) 网络层,位于传输层和数据链路层之间,用于把数据从源主机经过若干节点传送到目标主机,并向传输层提供最基本的数据传输服务,它要提供路由和选址的工作。网络层只管传递数据,成功与否并不关心。
在能够选择的多条道路之间,选择一条最短的路径就是路由的工作。在网络中,每台计算机都有一个唯一的地址,方便别人找到它,这个地址就是IP地址。
(3) 传输层,位于网络层和应用层之间,是面向连接的、可靠的进程到进程的通信协议,TCP提供全双工服务,即数据可在同一时间双向传播,TCP将若干个字节构成一个分组,此分组称为报文段。
TCP(传输控制协议),它是可靠的、面向连接的协议,但是传输效率低。
UDP(用户数据报协议),它是不可靠的、无连接的服务,但是传输效率高。
TCP的功能是将数据进行分段打包传输,对每个数据包编号控制顺序,运输中丢失、重发和丢弃处理,流量控制避免拥塞。
TCP数据包封装,示意图:

        源端口号和目标端口号,计算机通过端口号识别访问哪个服务,比如http服务或ftp服务,发送方端口号是进行随机端口,目标端口决定了接收方哪个程序来接收。
        32位序列号,TCP用序列号对数据包进行标记,以便在到达目的地之后重新组装,假设当前的序列号为s,发送数据长度是l,那么下次发送数据时的序列号是s+l。在建立连接时,通常由计算机生成一个随机数作为序列号的初始值。
        确认应答,它等于下一次应该接收到的数据的序列号。假设发送端的序列号是s,发送数据的长度是l,那么接收端返回的确认应答号也是s+l。发送端接收到这个确认应答后,可以认为这个位置以前所有的数据都已被正常接收。
        首部长度,TCP首部长度,单位是4个字节。
        控制位,对TCP的连接、传输和断开进行指挥:
            PSH 缓存区将满,立刻传输速度
            RST 连接断了,重新连接
            URG 紧急信号
            ACK 为1表示确认号
            SYN TCP建立连接时,要将这个值设为1
            FIN 发送端完成位,提出断开连接的一方把FIN置为1,表示要断开连接
        紧急指针,仅在URG控制位为1时有效。表示紧急数据的末尾在TCP数据部分中的位置。通常在暂时中断通信时使用(例如:ctrl + c)
        窗口值,说明本地可接收数据段的数目,这个值是可变的。当网络通常时,将这个窗口值变大加快传输速度;当网络不稳定时,减少这个值可以保证网络数据的可靠传输。它是在TCP传输中进行流量控制的。
        窗口大小,用于表示从应答开始能够接收多少个8位字节。如果窗口大小为0,可以发送窗口探测。
        校验和,TCP校验和的计算包括TCP首部、数据和其它填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时,又计算一次检验和。如果两次的校验和一致,说明数据是正确的,否则将认为数据被破坏,接收端将丢弃该数据。

3.地球人都知道的TCP三次握手

TCP是面向连接的协议,它在源点和终点之间建立虚拟连接,而不是物理连接。在数据通信之前,发送端与接收端要先建立连接,等数据发送结束后,双方再断开连接。TCP连接的每一方都是由一个IP地址和一个端口组成。

为了方便,我们将主动发起请求的172.16.50.72:65076主机称为客户端,将返回数据的主机172.16.17.94:8080称为服务端。
第一次握手:建立连接。客户端发送连接请求,发送SYN报文,将seq设置为0,然后,客户端进入SYN_SEND状态,等待服务器的确认。
第二次握手:服务器接收到客户端的SYN报文段。需要对这个SYN报文段进行确认,发送ACK报文,将ack设置为1。同时,自己还要发送SYN请求信息,将seq设置为0。服务器端将上述所有信息一并发送给客户端,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的ACK和SYN报文后,进行确认,然后,将ack=1,seq设置为1,向服务器发送ACK报文段,这个报文段发送完毕之后,客户端和服务器都进入了ESTABLISHED状态,完成了TCP的三次握手。

4.地球人都不知道的TCP四次挥手

第一次挥手:客户端向服务器发送一个FIN报文段,将seq设置为160,ack设置为112;此时,客户端进入FIN_WAIT_1状态,这表示客户端没有数据要发送服务器了,请求关闭连接。
第二次挥手:服务器收到了客户端发送的FIN报文后,会向客户端返回一个ACK报文段,ack设置为1,seq设置为112;服务器进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态。
第三次挥手:服务器会观察自己是否还有数据要发送给客户端,如果有,先把数据发送给客户端,再发送FIN报文;如果没有,那么服务器直接发送FIN报文给客户端。请求关闭连接,同时服务器进入LAST_ACK状态。
第四次挥手:客户端收到服务器发送的FIN报文段,向服务器发送ACK报文段,将seq设置为161,ack设置为113,然后客户端进入TIME_WAIT状态;服务器收到客户端的ACK报文段以后,就关闭连接,此时,客户端等待2MSL后,依然没有收到回复,则证明服务器已正常关闭,客户端也可以关闭连接了。

(1)为什么需要三次握手?

为了确保双发收发都是正常的。

(2)为什么需要四次挥手?

双方数据发送完毕,都认为可以断开。

(3)为什么需要等待?

A向B发的FIN可能丢失。

(4)为什么握手是3次,而挥手是4次呐?

当服务器端收到FIN报文时,很可能并不会立即关闭SOCKET。

5.从输入网址到网页显示内容,整个过程经历了什么?

    (1) 在客户端浏览器输入网址URL;
    (2) 发送到DNS(域名服务器)获得域名对应的web服务器的IP地址;
    (3) 客户端浏览器与web服务器建立TCP(传输控制协议)连接;
    (4) 客户端浏览器向对应的IP地址的web服务器发送相应的HTTP或HTTPS请求;
    (5) web服务器响应请求,返回指定的URL数据或错误信息,如果设置重定向,则重定向到新的URL地址;
    (6) 客户端浏览器下载数据,解析HTML源文件,解析过程中实现对页面的排版,解析完成后,在浏览器中显示基础的页面。