计算机网络

计算机网络相关题目

1.网络七层协议

在这里插入图片描述

在这里插入图片描述

2.TCP三次握手四次挥手过程

首先先了解序列号,确认好和标志位

序列号seq

占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生,给字节编上序号后,就给每一个报文段指派一个序号,序列号seq就是这个报文段中的第一个字节的数据编号。

确认号ack

占4个字节,期待收到对方下一个报文段的第一个数据字节的序号,序列号表示报文段携带数据的第一个字节的编号,而确认号指的是期望接受到下一个字节的编号,因此挡墙报文段最后一个字节的编号+1即是确认号。
##3. 确认ACK
占1个比特位,仅当ACK=1,确认号字段才有效。ACK=0,确认号无效。

同步SYN

连接建立时用于同步序号。当SYN=1,ACK=0表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使用SYN=1,ACK=1.因此,SYN=1表示这是一个连接请求,或连接接收报文,SYN这个标志位只有在TCP建立连接
才会被置为1,握手完成后SYN标志位被置为0.

终止FIN

表示关闭连接请求,为1时有效

三次握手

在这里插入图片描述

  • 第一次握手:
    建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序列号seq=x,并进入SYN_SENT状态,等待服务器确认。(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)
  • 第二次握手
    服务器端接受请求后,必须确认客户端发来的数据包,同时将SYN和ACK包发送出去,此时服务器进入SYN_RCVD状态(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1)
  • 第三次握手
    客户端收到服务器端发来的SYN和ACK包,然后向服务器端发送一个序列号seq=x+1、确认号为ack=y+1的包,此包发送完毕,服务器和客户端都进入ESTAB-LISHED

面试题:1.为什么需要三次握手,两次不可以吗?或者四次、五次可以吗?

​ 我们来分析一种特殊情况,如果是两次握手,假设客户端请求建立连接,发给服务器SYN包等待服务器确认,服务器接收到SYN包后,(假设两次握手)会给客户端发送SYN包和ACK包确认连接请求,这是服务器认为连接已经建立,但是无法确认客户端是否收到请求,如果发送的数据在发送过程中丢失,客户端会认为连接没有建立,会进行重传。假设每次发送的数据一直在丢失,客户端一直SYN,服务器就会产生多个无效连接,占用资源,这时候服务器就会挂掉,这种现实就是“SYN的洪水攻击”;而对于四次、五次握手而言,三次握手已经足够,多余的握手次数会降低连接的效率和速度。

​ 总结:第三次握手是为了防止:如果客户端迟迟没有收到服务器返回确认报文,这时会放弃连接,重新启动一条连接请求,但问题是:服务器不知道客户端没有收到,所以他会收到两个连接,浪费连接开销。如果每次都是这样,就会浪费多个连接开销。

四次挥手(关闭客户端到服务器的连接)

在这里插入图片描述

  • 第一次挥手
    首先,客户端会发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器确认,客户端进入终止等待状态。其中终止标志位FIN=1,序列号seq=u
  • 第二次挥手
    服务器端接受到FIN后,会向客户端发送一个确认请求的ACK,然后服务器就进入CLOSE_WAIT状态。其中ACK=1,服务器端序列号seq=v,确认ack为收到的序号加一
  • 第三次挥手
    关闭服务器到客户端的连接,发送一个FIN给客户端。其中FIN=1,ACK=1,seq=w,ack为收到的序号加一
  • 第四次挥手
    客户端收到FIN,会给服务器端发送一个确认报文ACK,并将当前序列号seq和确认序号ack(ack为收到的序列号+1)发送给服务器。首先关闭的一方进行主动关闭,而另一方执行被动关闭

​ 客户端发送FIN后,进入终止等待状态,服务器收到客户端连接释放报文段后,就立即给客户端发送确认,服务器就进入CLOSE_WAIT状态,此时TCP服务器进程就通知高层应用进程因而从客户端到服务器的连接就释放了。此时是“半关闭状态”,即客户端不可以发送给服务器,服务器可以发送给客户端。
​ 此时,如果服务器没有数据报发送给客户端,其应用程序就通知TCP释放连接,然后服务器端发送给客户端连接释放数据报文,并等待确认。客户端发送确认后,进入TIME_WAIT状态,但是此时TCP连接还没有释放,然后经过等待计时器设置的2MSL后,才进入到CLOSED状态

为什么需要2MSL的时间

​ 首先,MSL即Maximum Segment Lifetime,就是最大报文生存时间,是任何报文在网络上的存在的最长时间,超过这个时间报文将被丢弃。《TCP/IP详解》中是这样描述的:MSL是任何报文段被丢弃前在网络内的最长时间。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒、1分钟、2分钟等。

​ TCP的TIME_WAIT需要等待2MSL,当TCP的一端发起主动关闭,三次挥手完成后发送第四次挥手的ACK包后就进入这个状态,等待2MSL时间主要目的是:防止最后一个ACK包对方没有收到,那么对方在超时后将重发第三次挥手的FIN包,主动关闭端接收到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可以继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。

为什么时三次握手而不是四次、五次或者六次

如果是三次挥手,那么只能将第二次挥手和第三次挥手合并,但这样合并是有问题。第二次服务器端发送确认报文只是确认客户端发来的端来连接请求,但不代表自身的数据传送完毕。一个方向发来端来连接请求,说明发送方的数据已经发送完毕,但被动关闭放的数据可能还没有全部发送完毕,所以应该等待被动关闭方将数据全部传送完毕再关闭连接,即发送第三次挥手

3.http的状态码

在这里插入图片描述

4.https和http的区别

HTTP与HTTPS介绍

​ 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

​ 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

​ HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

​ HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

HTTPS和HTTP的主要区别

  • 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
  • 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
  • 开销:Https通信需要证书,而证书一般需要向认证机构购买;

HTTPS的加密机制是一种共享密钥加密和公开密钥加密的混合加密机制。

5.TCP协议如何来保证传输的可靠性

TCP提供一种面向连接的、可靠的的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。

对于可靠性,TCP通过以下方式来保证:

  • 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据

  • 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层

  • 丢弃重复数据:对于重复数据,能够丢弃重复数据;

  • 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

  • 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

  • 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

6.TCP与UDP的区别

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

  • TCP是面向连接的,UDP是无连接的;
  • TCP是可靠的,UDP是不可靠的;
  • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  • TCP是面向字节流的,UDP是面向报文的;
  • TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;
  • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;

7.从输入网址到获得页面的过程

(1). 浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析;如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;

(2). 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;

(3). TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;

(4). 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

(5). 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;

(6). 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

8.常见状态码及原因短语

HTTP请求结构: 请求方式 + 请求URI + 协议及其版本
  HTTP响应结构: 状态码 + 原因短语 + 协议及其版本


  • 1×× : 请求处理中,请求已被接受,正在处理

  • 2×× : 请求成功,请求被成功处理
    200 OK

  • 3×× : 重定向,要完成请求必须进行进一步处理
    301 : 永久性转移
    302 :暂时性转移
    304 : 已缓存

  • 4×× : 客户端错误,请求不合法
    400:Bad Request,请求有语法问题
    403:拒绝请求
    404:客户端所访问的页面不存在

  • 5×× : 服务器端错误,服务器不能处理合法请求
    500 :服务器内部错误
    503 : 服务不可用,稍等
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值