计算机网络

本文详细介绍了计算机网络中的HTTP响应码、Forward与Redirect的区别、网络层的IP协议及其分片重组、TCP的可靠性机制、TCP的三次握手与四次挥手过程、UDP的特点与对比、HTTPS的原理以及WebSocket和MQTT协议的应用。内容涵盖了网络通信的多个重要方面,旨在帮助读者全面理解网络通信的基础与细节。
修改记录
20210423添加目录

1. HTTP响应码12345开头分别代表什么?

首先状态码的开头不同代表不同的类型:
1xx:代表指示信息,表示请求已接收,继续处理
2xx:代表成功,表示请求已被成功接收,理解,接受
3xx:重定向,表示完成请求必须进行进一步的操作
4xx:客户端错误,请求有语法错误或请求无法实现
5xx:服务器端错误,服务器未能实现合法的请求

2. Forward和redirect的区别

Forward转发:服务器请求资源,服务器直接访问目标地址的URl,把该URL的响应内容读取过来。
浏览器根本不知道服务器从那里获取的内容,因为这个跳转在服务器实现,它的地址栏还是原来的地址。
redirect 重定向:服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求某个地址,它的地址栏显示新的URL(两次request)。
转发是服务器行为,重定向是客户端行为。

区别:

  • 地址栏显示来说
  • 数据共享:forward转发页面和转发到的页面共享request里面的数据
    redirect:不能共享数据
  • 运用场景:forward一般用于用户登录时候,根据角色转发到相应的模块
    redirect:一般用于用户注销登录时,返回主页面和跳转到其他网站
  • 效率:forward 高; redirect 低。
3.计算机网络体系结构

OSI 七层协议

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
每一层作用如下:
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCPUDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTPWWW、NFS

4.网络层 IP(Internet Protocol Address)网际协议地址

分配给用户上网使用的网际协议的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类。
扩展:IP数据报的格式
在这里插入图片描述

1). 版本 : 有 4(IPv4)和 6(IPv6)两个值;
2).首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
3).区分服务 : 用来获得更好的服务,一般情况下不使用。
4).总长度 : 包括首部长度和数据部分长度。
5).生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
6).协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
7).首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
8).标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
9).片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节

扩展:MTU 最大传输单元(Maximum Transmission Unit)
不同的网络由于链路层和介质的物理特性不同,因此在进行数据传输时,对数据帧的最大长度都有一个限制。
当两台主机之间的通信要通过多个具有不同MTU值的网络时,MTU的瓶颈是通信路径上最小的MTU值,它被称为路径MTU

扩展:分片 和 重组

把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机.
当分了片的IP数据报到达最终目标主机时,目标主机对各分片进行组装,恢复成源主机发送时的IP数据报,这个过程叫做IP数据报的重组。

扩展:IP地址分类

由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
IP 地址 ::= {< 网络号 >, < 主机号 >}
IP地址分为五大类:A类、B类、C类、D类和E类,如下图所示:
在这里插入图片描述

扩展:网络层 ARP(地址解析协议):ARP 实现由 IP 地址得到 MAC 地址。

  1. 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系
  2. 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址
  3. 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
  4. 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
5. 运输层 TCP (传输控制协议):

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

(1)TCP协议如何来保证传输的可靠性

  • 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
  • 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
  • 丢弃重复数据:对于重复数据,能够丢弃重复数据;
  • 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
  • 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
  • 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

(2)TCP滑动窗口 大小由什么决定
在这里插入图片描述

滑动窗口左边的是已发送并且被确认的分组,滑动窗口右边是还没有轮到的分组。滑动窗口里面也分为两块,一块是已经发送但是未被确认的分组,另一块是窗口内等待发送的分组。随着已发送的分组不断被确认,窗口内等待发送的分组也会不断被发送。整个窗口就会往右移动,让还没轮到的分组进入窗口内。
滑动窗口起到了一个限流的作用,也就是说当前滑动窗口的大小决定了当前 TCP 发送包的速率,而滑动窗口的大小取决于拥塞控制窗口和流量控制窗口的两者间的最小值

扩展:拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。拥塞控制就是 防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。
如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
在这里插入图片描述

拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。拥塞控制的方法主要有以下四种: A、慢启动 B、拥塞避免 C、快重传 D、快恢复

发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。
A、接收方有足够大的接收缓存,因此不会发生流量控制;
B、虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。

(1)慢启动与拥塞避免

慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。
拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。
原理详解:
在这里插入图片描述

发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 …

注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。
如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。

(2)快重传与快恢复

快重传:快重传要求接收方在收到一个 失序的报文段 后就立即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

原理详解:

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。
在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。
在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = 1 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。

慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。
在这里插入图片描述

扩展:socket套接字
	多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
	要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:

1)服务器监听,客户端请求,连接确认。 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客 户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

生成套接字,主要有3个参数:通信的目的IP地址、使用的传输 层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输 层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
**原理详解:**Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。

扩展:DDos攻击原理

DDos全称Distributed Denial of Service,分布式拒绝服务攻击。最基本的DOS攻击过程如下:
客户端向服务端发送请求链接数据包
服务端向客户端发送确认数据包
客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

扩展:TCP粘包是怎么产生的

接收方:一次接一次发送数据不存在粘包,TCP是长链接,当发送数据包过小时,协议会在缓冲区,将他们合并发送。

接收方:TCP将收到数据包保存在缓存,然后应用程序主动从缓存读取,如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。

UDP则是面向消息传输的,是有保护消息边界的,接收方一次只接受一条独立的信息,所以不存在粘包问题。

如何解决:发送方换算法。接收方没办法处理。应用层可同时解决:1. 格式化数据,有头有尾;2. 将数据长度包含在消息内。

6. TCP三次握手与四次挥手

三次握手:

SYN:同步SYN(SYNchronization),在连接建立使用来同步序号。SYN置1表示这是一个连接请求或连接接受请求
ACK:确认ACK(ACKnowledgment),仅当ACK=1时确认号字段才有效。TCP规定,在连接建立后所有的报文段都必须把ACK置1。
seq: 序号。
ack: 确认号。
过程:

  • 最初两端的TCP进程都处于CLOSE(关闭)状态。
    上图中A主动打开连接,B被动打开连接。
  • B打开连接后处于LISTEN(监听状态),等待客户的连接请求。
  • A向B发送请求报文,SYN=1,ACK=0,选择一个初始序号seq=x
  • B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为ack= x+1,同时也选择一个初始的序号 seq=y。
  • A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为ack= y+1,序号为 seq=x+1。
  • B 收到 A 的确认后,连接建立。

四次挥手:

此处为A的应用进程先向其TCP发出连接释放报文段,但是A结束TCP连接的时间要比B晚一些。
FIN: 终止FINs,用来释放一个连接。当FIN等于1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
ACK: 确认ACK(ACKnowledgment),仅当ACK=1时确认号字段才有效。TCP规定,在连接建立后所有的报文段都必须把ACK置1。
seq: 序号。
ack: 确认号。

过程
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。

  • A 发送连接释放报文,FIN=1。
  • B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
  • 当 B 不再需要连接时,发送连接释放报文,FIN=1。
  • A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。
  • B 收到 A 的确认后释放连接。
扩展:TCP四次挥手的原因

CLOSE-WAIT
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
TIME-WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。

扩展:为什么A在TIME-WAIT状态必须等待2MSL的时间呢?
  1. 为了保证A发送的最后一个ACK报文段能够到达B。
    A发送的这个ACK报文段有可能丢失,如果 B 没收到 A 发送来的确认报文,那么A就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
  2. 防止“已经失效的连接请求报文段”出现在本链接中。
    A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接的时间内所产生的所有报文段都从网络中消失。这样下一个新的连接中就不会出现这种旧的连接请求报文段。
扩展:为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。
关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了。

7. UDP(User Datagram Protoco) 用户数据包协议

是一个简单的面向数据报的传输层协议。在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)

UDP的首部格式:

在这里插入图片描述

扩展:TCP和UDP分别对应的常见的端口以及应用层协议
在这里插入图片描述

扩展:TCP和UDP的区别与联系
  • TCP面向连接,传输数据之前要需要建立会话。UDP是无连接的。
  • TCP提供可靠传输,保证数据不丢包、不重复且按顺序到达;UDP只尽努力交付,不保证可靠交付
  • TCP提供了拥塞控制;UDP不提供
  • TCP是面向字节流的;UDP面向报文。
  • TCP只支持点到点通信;UDP支持一对一、一对多、多对多的交互通信。
  • TCP首部开销大20字节,UDP首部开销小8字节。
8.HTTP(HyperText Transfer Protocol)超文本传输协议与HTTPS

HTTP协议定义了浏览器(即互联网客户进程)怎样向万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的应用层协议,它是万维网能够可靠的交付文件的重要基础。

  1. HTTP构建于TCP/IP协议之上,默认端口号是80
  2. 2.HTTP是无连接无状态的。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。

HTTP协议的缺点:
1)通信使用明文,内容可能被窃听(重要密码泄露)
2)不验证通信方身份,有可能遭遇伪装(跨站点请求伪造)
3)无法证明报文的完整性,有可能已遭篡改(运营商劫持)

https在http协议基础上加入加密处理、认证机制、完整性保护,即http+加密+认证+完整性保护=https
https并非应用层的一种新协议,只是http通信接口部分用ssl/tls协议代替而已。通常http直接和tcp通信,当使用ssl时则演变成先和ssl通信,再由ssl和tcp通信。

HTTPS工作原理:
1、客户端发起HTTPS请求
2、服务端的配置:采用HTTPS协议的服务器必须要有一套数字证书
3、传送证书:就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等
4、客户端解析证书:客户端的TLS来完成,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
5、传送加密信息:传送用证书加密后的随机值(私钥)
6、服务端解密信息:服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密
7、传输加密后的信息:私钥加密后的信息,可以在客户端被还原
8、客户端解密信息:客户端用之前生成的私钥解密服务端传过来的信息

总结HTTP和HTTPS区别如下:
1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2.http信息是明文传输,https则是具有安全性的ssl加密传输协议。
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源

扩展:SSL/TLS是什么?

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

扩展:SSL/TLS协议基本原理

SSL/TLS协议的基本思路是采用公钥加密法。客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
两个问题:
1)如何保证公钥不被篡改:将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。
2)公钥加密计算量太大,如何减少耗用的时间?每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。

扩展:对称秘钥加密和非对称秘钥加密

对称密钥加密,又称私钥加密,即信息的发送方和接收方用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。一对一
非对称密钥加密,又称公钥加密,它需要使用一对密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。慢。多对一

扩展:数字签名

功能点:
1、报文鉴别。即接受者能够核实发送者对报文的签名。
2、报文的完整性。即接受者确信所收到的数据和发送者发送的完全一样而没有被篡改过。
3、不可否认。发送者事后不能抵赖对报文的签名。
在这里插入图片描述
在这里插入图片描述

扩展:HTTP长连接、短链接

实质上是TCP协议的长连接和短连接。

HTTP/1.0中默认使用短连接。客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
优点:管理简单,存在的都是有用链接,不需要额外的控制手段。

HTTP/1.1起,默认使用长连接,会在响应头加入这行代码:Connection:keep-alive。当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,当客户端再次访问这个服务器时,会继续使用这条已经建立的链接(多个HTTP请求共用同一个TCP连接)。
优点:适合频繁请求资源的客户,节省建立关闭时间、资源。

保活功能:主要为服务器应用提供,主要检测客户端消失的半开放连接。
问题:
探测周期长,可能会有过载的连接。解决一 关闭一些长时间没有读写动作的连接。解决二 如果可以客户端为粒度,限制每个客户端连接数。

9.cookie和session区别?

Cookie:浏览器的一种缓存机制,服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。Cookie的主要内容包括:名字,值,过期时间,路径和域。

Session:

session 是一种维持服务端与客户端之间会话的机制,它可以有不同的实现,包括Cookie。

两者区别:Session的区别在于,会话状态完全保存在服务器。客户端请求服务器,如果服务器记录该用户状态,就获取Session来保存状态,这时,如果服务器已经为此客户端创建过session就按照sessionid把这个session检索出来使用。服务器Session常常依赖于Cookie机制检索ID,但Cookie被禁用时也有其他方法比如URL重写机制。

10.浏览器一次请求过程中,整个链路发生了什么

客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。

在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。

客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

扩展:了解交换机、路由器、网关的概念,并知道各自的用途

物理层使用的中间设备叫做转发器。
数据链路层使用的中间设备叫做网桥或桥接器。
网络层使用的中间设备叫做路由器。
在网络层以上使用的中间设备叫做网关

11.Websocket协议

诞生的原因:
HTTP 协议有一个缺陷:通信只能由客户端发起。如果服务器有连续的状态变化,客户端获知只能使用轮询,非常浪费资源。

最大特点:持久化协议(相对于HTTP协议来说),服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
其他特点:
1)与 HTTP 协议有着良好的兼容性。默认端口也是80和443(加密),并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
2)建立在 TCP/IP 协议之上,服务器端的实现比较容易。
3)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
4)数据格式比较轻量,性能开销小,通信高效
5)可以发送文本,也可以发送二进制数据。
6)没有同源限制,客户端可以与任意服务器通信。

12.MQTT协议

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。

MQTT协议运行在TCP/IP或其他网络协议,提供有序、无损、双向连接。其特点包括:
1)使用的发布/订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦。
2)对传输消息有三种服务质量(QoS)(可以设置)
*最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络
*至少一次,这一级别会确保消息到达,但消息可能会重复。
*只有一次,确保消息只有一次到达
3)对负载内容屏蔽的消息传输机制
4)数据传输和协议交换的最小化(协议头部只有2字节),以减少网络流量
5)通知机制,异常中断时通知传输双方

协议原理:
1)客户端和服务器端
2)三种身份:发布者、代理、订阅者
3)传输消息分为两部分:topic主题、payload负载

扩展:MQTT一般不提供持久化功能?

MQTT协议运行在TCP/IP或其他网络协议,提供有序、无损、双向连接。其特点包括:
1)使用的发布/订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦。
2)对传输消息有三种服务质量(QoS)(可以设置)
*最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络
*至少一次,这一级别会确保消息到达,但消息可能会重复。
*只有一次,确保消息只有一次到达
3)对负载内容屏蔽的消息传输机制
4)数据传输和协议交换的最小化(协议头部只有2字节),以减少网络流量
5)通知机制,异常中断时通知传输双方

协议原理:

1)客户端和服务器端
2)三种身份:发布者、代理、订阅者
3)传输消息分为两部分:topic主题、payload负载

扩展:MQTT一般不提供持久化功能?

协议按照设备一直在线设计,数据都是保存在内存中,因此内存占用较多。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值