【计算机网络】知识积累

运输层

TCP协议、IP协议、HTTP协议分别在哪一层?

  • TCP:运输层
  • IP:网络层
  • HTTP:应用层

网络七层模型和网络五层模型
对比
TCP协议的三次握手:

  • 建立连接时,客户端发送SYN包(syn=x)到服务器,进入SYN_SEND状态,等待服务器确认
  • 服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送了一个SYN包(syn=y,即SYN+ACK包),进入SYN_RCVD状态
  • 服务端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),包发送完毕,客户端和服务器进入ESTABLISHED状态(TCP连接成功),完成三次握手。

TCP协议的四次握手:

  • 由于TCP协议是全双工的,因此每个方向都必须单独进行关闭。
    • 全双工(Full Duplex)通信允许数据在两个方向上同时传输。能力上相当于两个单工通信的结合。
    • 半双工(Hals Duplex)数据传输指可以在一个信号载体的两个方向上传输,但是不能同时传输。[同一时间仅允许一个方向,实际上是一种切换方向的单工通信;同一时间只有一方接受或发送信息,如对讲机]
  • 单独关闭的原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
  • TCP的连接的拆除需要发送四个包,因此称为四次握手(four-way handshake)。服务端或刘拉你端均可主动发起挥手动作,在sokert编程中,任何一方执行close()操作即可产生挥手操作。
  • 四次握手过程:
  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送
  2. 服务器B收到这个FIN,它发送一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A
  4. 客户端A发送ACK报文确认,并将确认序号设置为收到序号加1。
  • 四次握手详细描述:
  • 客户端无数据发送时,请求关闭连接:我想关闭连接,我的序号是u(FIN=1,seq=u)【u就是之前传送过所有数据中最后一个字节的序号】,客户端状态FIN-WAIT-1状态
  • 服务器收到客服端的消息,告诉客户端:好的,我知道了,我的序号是v(ACK=1,seq=u+1,seq=v)【v是服务器发送消息的序号】,服务器状态变成了CLOSE-WAIT状态,此时客户端通往服务器的路就断开了,客户端不能像服务器发送数据,但是服务器仍旧可以向客户端发送数据,现在是半关闭状态。
  • 客户端收到来自服务器的确认后,进入FIN-WAIT-2状态,等待服务器那边说:断开连接。客户端继续等待中。
  • 服务器所有数据发送完毕,服务器主动告知客户端断开连接(FIN=1,seq=w)【w,是因为这之间服务器可能又继续发送了一些数据,可能,v+1可能更多,因此序列号变化】,因此在此发送消息时发送(ACK=1,ack=u+1,FIN=1,seq=q)。进入LAST_ACK状态,最后确认状态。
  • 客户端收到服务器的断开连接请求后,也需要给出响应(ACK=1,ack=w+1,seq=u+1),然后进入TIME-WAIT状态。
  • 等待两个MSL后,进入关闭状态。
  • MSL是Maximum Segment Lifetime英文的缩写“报文最大生存时间”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
  • 服务器最终受到来自客户端的确认信息后,关闭,进入CLOSED状态。
    在这里插入图片描述

在这里插入图片描述

TCP状态
SYN建立连接
FIN关闭连接
ACK响应
PSH有DATA数据传输
RST连接重置
  • ACK可能是与SYN,FIN等同时使用的,如SYN和ACK,可能同时为1,他表示的就是建立之后的响应
  • 如果只是单个SYN,表示的只是建立连接。

为什么连接时候三次握手,关闭的时候四次握手?

  • 连接时,当Server端收到Client端的SYN请求后报文后,可以直接发送SYN+ACK报文。ACK报文是用来应答的,SYN报文是用来同步的。
  • 关闭时,当Server端收到FIN报文时,很可能不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端。当Server端所有的报文都发送完后,才能发送FIN报文,因此不能一起发送,所以需要四次握手。

为什么TCP要建立连接?

  • 保证可靠传输

TCP为什么可靠一些?

  • 三次握手、超时重传、滑动窗口、拥塞控制

哪种应用场景会使用TCP协议,使用它的意义?

  • 当对网络通信质量有要求时:整个数据都要准确无误的传输给对方,这往往用于一些可靠的应用。如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTO等邮件传输的协议

TCP连接和释放过程,描述:

  • 三次握手:

    • 主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)
    • 主机B收到请求后,会发回连接确认数据包。(其中确认报文段中,表示位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始序列号seq(B)=y,以及主机B对主机A初始序列号的确认号ack(b)=seq(a)+1=x+1)
    • 第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个序列号seq(A)=x+1;确认号为ack(A)=y+1的报文;
      在这里插入图片描述
  • 四次握手:假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下:

    • 关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u;
    • 服务器收到这个FIN,它发送回一个ACK,确认号ack为收到的序号加1.(此时服务器还未关闭,当所有服务器端所有报文都发送完毕后再回进入下一步)
    • 关闭服务器到客户端的连接:也是发送一个FIN给客户端
    • 客户端收到FIN后,会发回一个ACK报文确认,并将确认序号seq设置为收到序号加1。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
      在这里插入图片描述

解释,http请求中304状态码的含义

  • 304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
  • 如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为if-Modified-Since HTTP标头)。服务器可以告诉Googlebot自从上次抓取网页没有变更,进而节省带宽和开销。

请你说明一下,SSL四次握手的过程

  1. 客户端发送请求
  • 首先,客户端(通常是浏览器)先向服务器发送加密通信的请求,这叫做ClientHello请求
  1. 服务器回应
  • 服务器收到客户端请求后,向客户端发出回应,这叫做ServerHello
  1. 客户端回应
  • 客户端收到服务器回应以后,首先验证服务器证书,如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
  1. 服务器的最后回应
  • 服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所有的“会话秘钥”。然后,向客户端最后发送下面信息。
    1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和秘钥发送。
    2. 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用“会话秘钥”加密内容。

seq和ack的理解

  • seq:序号。对于发送的数据的第一个序号而言是通过一个算法计算得到一个初始序号(ISN)加1
  • ack:收到对数据包的确认,值是等待接收的数据包的序列号。
  • 在一次消息发送中,A随机选取一个序号x作为自己的初始序号发送给B;
  • 第二次消息B使用ack对A的数据包进行确认,因为已经收到了序号为x的数据包,准备接受序号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,seq=x;
  • 第三条消息A告诉B收到了B的确认消息并准备连接,A自己此条消息的序列是x+1,所以seq=x+1,而ack=y+1,表示A正准备接受B序列号为y+1的数据包。
  • seq是数据包本身的序列号;ack是期望对方继续发送的那个数据包的序列号
    三次握手

请你讲讲http1.1和1.0的区别

  • 缓存处理:
    • 在HTTP1.0中主要是用header里的if-Modified-Since,Expires作为缓存判断的标准。
    • HTTP1.1则引入了更更多缓存控制策略例如Entity tag,If-Unmodified-Sine,If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
  • 带宽优化及网络连接的使用:
    • HTTP1.0中,存在一些浪费带宽的现象,如客户端需要对象一部分,而服务器将整个对象送过来,并且不支持端点续传功能。
    • HTTP1.1在请求头中引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),方便开发者自由选择以便于充分利用带宽和连接。
  • 错误的通知管理:
    • 在HTTP1.1中新增了24个错误状态响应吗,409(Confilict)表示请求的资源与资源发生冲突,410(Gone)表示服务器上的某个资源被永久性删除。
  • HOST头处理:
    • 在HTTP1.0中认为每台服务器都绑定唯一一个的IP地址,因此,请求信息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
    • HTTP1.1的请求信息和响应信息都应支持Host头域,且请求信息中如果没有Host头域会报告一个错误(400 Bad Request)
  • 长连接:
    • HTTP1.1支持长链接(PersistentConnection)和请求的流水线(Pipelining)处理,再上一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection:keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

请谈一下,你知道http请求,并说明应答码502和504的区别:

  • Options:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送‘*’的请求来测试服务器的功能性。
  • HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的信息。
  • PUT:向指定资源位置上传其最新内容
  • DELETE:请求服务器删除Requet-URI所标识的资源
  • TRACE:回显服务器收到的请求,主要用于测试或诊断
  • CONNRCT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • 虽然HTTP的请求方式有8种,但是我们在实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间的来实现
  • 502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
  • 504:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

请说明一下http和https的区别

  1. https协议要申请证书到ca,需要一定经济成本;
  2. http是明文传输,https是加密的安全传输;
  3. 连接的端口不一样,http是80,https是443;
  4. http连接很简单,没有状态;https是SSL加密的传输,身份认证的网络协议,相对于http传输比较安全

请讲一下浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程

  1. DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文—双方没有请求或响应传递时,任意一方都可以发送关闭请求。
  5. 浏览器解析渲染页面
  • DNS:域名系统(Domain Name System)的缩写。组织成域层结构的计算机和网络服务命名系统,用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
  • HTTP请求:请求行、请求包头、请求正文
  • HTTP响应:状态码、响应包头、响应报文
  • 状态码:
    • 1XX:指示信息,表示请求已接受,继续处理。
    • 2XX:成功,表示请求已被成功接收、理解、接受。
    • 3XX:重定向,要完成请求必须进行更进一步的操作。
    • 4XX:客户端错误,请求有语法错误或无法实现。
    • 5XX:服务器端错误,服务器未能实现合法的请求。

网络层

arp协议和arp攻击

  • ARP协议是地址解析协议。
  • ARP攻击的第一步就是ARP欺骗。由上述“ARP协议的工作过程”我们知道,ARP协议基本没有对网络的安全性做任何思考,当时人们考虑的重点是如何保证网络通信能够正确和快速的完成–ARP协议工作的前提是默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。
  • 不过后来,人们发现ARP应答中的IP地址和MAC地址中的信息是可以伪造的,并不一定是自己的真实IP地址和MAC地址,由此,APR欺骗就产生了。
    什么是icmp协议,它的作用是什么?
  • 它是TCP/IP协议族的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要作用
    请你讲一下路由器和交换机的区别?
  • 工作层次不同:交换机比路由器更简单,路由器比交换机能获取更多信息
    • 交换机工作在数据链路层
    • 路由器工作在网络层
  • 数据转发所依赖的对象不同
    • 交换机的转发依据是利用物理地址或者说MAC地址确定转发数据的目的地址
    • 路由器根据ip地址进行工作
  • 传统的交换价只能分割冲突域,不能分割广播域;路由器可以分割广播域
  • 转发的数据对象不同,交换机转发的是数据帧、路由器转发的是分组报文

应用层

请你谈谈DNS寻址过程

  • 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  • 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  • 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫他DNS服务器,此服务器收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  • 如果要查询的域名不由本地DNS服务器区域解析,但是该服务器已经缓存了此网址的映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  • 如果本地DNS服务器的本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,
    • 如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP,本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com
    • 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。不管是本地DNS服务器用是转发,还是根提示,最后都是把结果返回给本地DNS服务器,再由此DNS服务器再返回给客户机。
  • 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询是迭代查询。

请你简单讲解一下,负载均衡 反向代理模式的优点、缺点

  • 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
  • 反向代理负载均衡技术,是把来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
  • 反向代理负载均衡能以软件方式来实现,如apache mod_proxy、netscape proxy等,也可以在告诉缓冲器、负载均衡器等硬件设备上实现。反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升静态网页的访问速度,提供有益的性能;由于网络外部用户不能直接访问真实的服务器,具备额外的安全性(同理,NAT负载均衡技术也由此优点)
  • 【代理服务器接受internet上的连接,转发给内部服务器,得到返回结果后, 返回给internet的客户端】
  • 【通过反向代理动态转发给内部网络多台服务器】
  • 【反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升静态网页的访问速度,提供有益的性能;由于网络外部用户不能直接访问真实的服务器,具备额外的安全性】
  • 缺点:
    • 反向代理是处于OSI参考模型第七层的应用层的,所以就必须为每一种应用服务专门开发一个反向代理服务器,这样就限制了反向代理负载均技术的广泛应用,一般都应用于web服务器的负载均衡
    • 针对每一次代理,代理服务器必须打开两个连接,一个对外,一个对内,因此在并发连接请求数量非常大的时候,代理服务器的负载也就非常大了,最后代理服务器本身会成为服务的瓶颈【可以用它来对连接数量不是特别大,但是没连接都需要消耗大量处理资源的站点进行负载均衡】
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值