目录
名词解释来源:http://t.csdn.cn/Znh1f
TCP/IP
TCP/IP 协议你一定听过,TCP/IP 我们一般称之为协议簇,什么意思呢?就是 TCP/IP 协议簇中不仅仅只有 TCP 协议和 IP 协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是 TCP / IP 协议,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。
TCP 协议的全称是 Transmission Control Protocol 的缩写,意思是传输控制协议,HTTP 使用 TCP 作为通信协议,这是因为 TCP 是一种可靠的协议,而可靠能保证数据不丢失。
IP 协议的全称是 Internet Protocol 的缩写,它主要解决的是通信双方寻址的问题。IP 协议使用 IP 地址 来标识互联网上的每一台计算机,可以把 IP 地址想象成为你手机的电话号码,你要与他人通话必须先要知道他人的手机号码,计算机网络中信息交换必须先要知道对方的 IP 地址。
URI / URL
我们可以通过输入 www.baidu.com 地址来访问百度的官网,那么这个地址有什么规定吗?我怎么输都可以?AAA.BBB.CCC 是不是也行?当然不是的,你输入的地址格式必须要满足 URI 的规范。
URI的全称是(Uniform Resource Identifier),中文名称是统一资源标识符,使用它就能够唯一地标记互联网上资源。
URL的全称是(Uniform Resource Locator),中文名称是统一资源定位符,也就是我们俗称的网址,它实际上是 URI 的一个子集。
URI 不仅包括 URL,还包括 URN(统一资源名称),它们之间的关系如下
HTTPS
HTTP 一般是明文传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS 应运而生。HTTPS 的全称为 (Hyper Text Transfer Protocol over SecureSocket Layer),全称有点长,HTTPS 和 HTTP 有很大的不同在于 HTTPS 是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说 HTTPS = HTTP + SSL。
总结时间:
TCP/IP协议簇
对TCP的理解
TCP(Transmission Control Protocol)是一种面向连接的传输协议,它提供可靠性、流量控制和拥塞控制等服务,确保数据传输的可靠性和有序性。TCP将数据分成数据段进行传输,每个数据段都有序号和确认号,以确保数据的可靠传输。TCP还通过滑动窗口机制来进行流量控制和拥塞控制,以避免网络拥塞和数据丢失。TCP适用于对可靠性要求较高的应用场景,例如文件传输、电子邮件等。但是,由于TCP需要维护连接状态和进行数据确认等操作,因此相对于UDP来说,TCP的开销更大,传输速度也会稍慢一些。
对UDP的理解
UDP(User Datagram Protocol)是一种无连接的传输协议,它不提供可靠性、流量控制和拥塞控制等服务,但它具有简单、快速、低开销、无状态等特点。UDP将数据分成数据包进行传输,每个数据包都是独立的,它们可以按照任意顺序到达目的地。UDP适用于一些对可靠性要求不高,但要求传输速度快的应用场景,例如视频、音频等实时传输数据。但是,由于UDP不提供可靠性保障,因此在传输过程中可能会出现数据包的丢失或重复等问题。
HTTP(超文本传输协议)是什么?
Http是超文本传输协议,它是应用层的面向对象的协议,它是基于TCP/IP的高级协议,默认端口号是80。它是基于请求响应模型的,即一次请求对应一次响应。它是无状态的,每次请求之间相互独立。HTTP协议请求消息的数据格式为请求行,请求头,请求空行和请求体。请求行中主要包括请求方式,请求url,请求协议和版本等。请求方式在HTTP协议中有7种,最常用的有2种,get和post。如果是get请求,则还会把请求参数拼接到url后;请求头是客户端浏览器想要告诉浏览器的一些信息,如user-Agent(浏览器信息),host(主机地址),reference(请求来源)等。请求空行是用来分割请求头和请求体的;请求体是post请求下封装请求参数的。
HTTPS(安全超文本传输协议)是什么?
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的HTTP通道,在HTTP的基础上通过身份认证和传输加密阶段保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入TLS(Transport Layer Security 安全传输层协议)/SSL(Secure Sockets Layer 安全套接层协议),HTTPS 的安全基础是 TLS/SSL,因此加密就需要TLS/ SSL。
SSL的全称为Secure Sockets Layer,安全套接层协议。是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL。
TLS的全称是Transport Layer Security,安全传输层协议。是SSL3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。
在HTTPS数据传输的过程中,需要用TLS/SSL对数据进行加密,然后通过HTTP对加密后的密文进行传输,可以看出HTTPS的通信是由HTTP和TLS/SSL配合完成的。
HTTPS的特点:
- 内容加密:混合加密方式,对称加密和非对称加密。
- 验证身份:通过证书认证客户端访问的是正确的服务器。
- 数据完整性:防止传输的数据被中间人篡改。
HTTPS协议对称加密的过程?
HTTPS数据加解密过程中数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。HTTPS协议加密的过程可以分为两个阶段,分别是:
- 证书的认证阶段:使用非对称加解密算法对数据传送阶段的对称加解密密钥进行加密和解密。
- 数据传送阶段:通过证书认证阶段获取到目标服务器的对称加解密密钥,对数据进行加密传送给服务器。
扩展:
HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输。总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。
在整个HTTPS数据传输的过程中一共会涉及到四个密钥:
- CA机构的公钥,用来验证数字证书是否可信任
- 服务器端的公钥
- 服务器端的私钥
- 客户端生成的随机密钥
一个HTTPS请求可以分为两个阶段,证书认证阶段和数据传送阶段。又可以细分为六个步骤:
- 客户端第一次向服务器发起HTTPS请求,连接到服务器的443(默认)端口。
- 服务器端有一个密钥对,公钥和私钥。用来进行非对称加密使用,服务器端保存私钥,不能泄露,公钥可以发送给任何人。服务器将自己的数字证书(包含公钥)发送给客户端。
- 客户端收到服务器端的数字证书之后,会对数字证书进行检查,验证合法性。如果发现数字证书有问题,那么HTTPS传输就中断。如果数字证书合格,那么客户端生成一个随机值,这个随机值是数据传输阶段时给数据对称加密的密钥,然后用数字证书中的公钥加密这个随机值密钥,这样就生成了加密数据使用的密钥的密文。到这时,HTTPS中的第一次HTTP请求就结束了。
- 客户端第二次向服务器发起HTTP请求,将对称加密密钥的密文发送给服务器。
- 服务器接收到客户端发来的密文之后,通过使用非对称加密中的私钥解密密文,得到数据传送阶段使用的对称加密密钥。然后对需要返回给客户端的数据通过这个对称加密密钥加密,生成数据密文,最后将这个密文发送给客户端。
- 客户端收到服务器端发送过来的密文,通过本地密钥对密文进行解密,得到数据明文。到这时,HTTPS中的第二次HTTP请求结束,整个HTTPS传输完成。
HTTP协议的缓存策略有哪些?
HTTP协议的缓存策略有两种,分别是强制缓存和协商缓存,强制缓存的优先级大于协商缓存。强制缓存是服务器告诉浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行协商缓存策略。协商缓存是让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率,将缓存信息中的Etag和Last-Modified字段通过请求发送给服务器,由服务器校验。如果文件没有改变,那么直接返回304状态,继续使用浏览器缓存。
HTTP协议的缓存策略是浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存,否则,则向服务器发起请求并携带缓存标识。HTTP协议的缓存策略分两种:强制缓存和协商缓存,而强制缓存优先级大于协商缓存。
- 强制缓存:服务器告诉浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
- 协商缓存:让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率,将缓存信息中的Etag和Last-Modified
通过请求发送给服务器,由服务器校验。如果文件没有改变,那么直接返回304状态,继续使用浏览器缓存。
HTTP缓存都是从第二次请求开始的:
- 第一次请求资源时,服务器返回资源,并在响应头首部中回传资源的缓存策略。
- 第二次请求时,浏览器判断这些请求参数,击中强缓存就直接返回状态码200,否则就把请求参数加到请求头首部中传给服务器,看是否击中协商缓存,击中则返回304,否则服务器会返回新的资源。
延伸阅读
强制缓存:
- 强缓存命中则直接读取浏览器本地的资源,在network中显示的是from memory或者from disk。
- 控制强制缓存的字段有:Cache-Control(http1.1)和Expires(http1.0)。
- Cache-control是一个相对时间,用以表达自上次请求正确的资源之后的多少秒的时间段内缓存有效。
- Expires是一个绝对时间。用以表达在这个时间点之前发起请求可以直接从浏览器中读取数据,而无需发起请求。
- Cache-Control的优先级比Expires的优先级高。前者的出现是为了解决Expires在浏览器时间被手动更改导致缓存判断错误的问题。如果同时存在则使用Cache-control。
协商缓存:
- 协商缓存的状态码由服务器决策返回200或者304
- 当浏览器的强缓存失效的时候或者请求头中设置了不走强缓存,并且在请求头中设置了If-Modified-Since或者 If-None-Match的时候,会将这两个属性值到服务端去验证是否命中协商缓存,如果命中了协商缓存,会返回 304 状态,加载浏览器缓存,并且响应头会设置 Last-Modified或者ETag属性。
- 对比缓存在请求数上和没有缓存是一致的,但如果是 304 的话,返回的仅仅是一个状态码而已,并没有实际的文件内容,因此在响应体体积上的节省是它的优化点。
- 协商缓存有2组字段(不是两个),控制协商缓存的字段有:Last-Modified/If-Modified-since(http1.0)和Etag/If-None-match(http1.1)。
- Last-Modified/If-Modified-since表示的是服务器的资源最后一次修改的时间。Etag/If-None-match表示的是服务器资源的唯一标识,只要资源变化,Etag就会重新生成。
- Etag/If-None-match的优先级比Last-Modified/If-Modified-since高。
哪些问题是HTTPS无法解决的?
1.Http是基于TCP协议的,在网络层的传输耗时比较长,https没有解决这个问题;
2.http头是不能压缩的,每次要传递很大的数据包,每个连接也只能支持一个请求。
3.同时https应用了很多加密算法,这些算法的执行也是会影响速度的。
如何让UDP协议变得可靠?
UDP协议是一种无连接的、不可靠的协议,因此它无法保证数据传输的可靠性。但是,可以通过以下方式来增加UDP协议的可靠性:
1. 应用层协议:在应用层实现一些机制,如数据包确认、重传等,来保证数据传输的可靠性。
2. FEC纠错:使用前向纠错(Forward Error Correction,FEC)技术,将冗余数据添加到数据包中,以便在数据包丢失时进行恢复。
3. NACK/ACK反馈:使用NACK/ACK反馈机制,当接收方收到数据包时,发送ACK确认包,如果发送方未收到ACK包,则发送NACK包,以便接收方重传丢失的数据包。
4. 超时重传:当发送方发送数据包后,等待一段时间后如果未收到ACK包,则认为数据包丢失,发送方将重新发送数据包。
5. 流量控制:通过限制发送方的数据传输速率,以避免网络拥塞和丢包。
需要注意的是,这些技术可以提高UDP协议的可靠性,但也会增加网络开销和延迟。在实际应用中,需要根据具体情况选择合适的技术来保证数据传输的可靠性和效率。
TCP/IP四层模型是什么?
分为四层:应用层、传输层、网络层、网络接口层
分为五层:应用层、传输层、网络层、数据链路层、物理层
OSI模型分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP四层模型是一个网络通信的参考模型,它由四层组成,分别是应用层、传输层、网络层和数据链路层。每一层都有自己的功能和协议,用于实现网络通信。
- 应用层:应用层是最靠近用户的一层,它提供了用户与网络之间的接口,包括各种应用程序,如电子邮件、Web浏览器、FTP等。常用的应用层协议有HTTP、SMTP、FTP、DNS等。
- 传输层:传输层主要负责数据的可靠传输,它提供了两种协议,即TCP和UDP。TCP协议提供了可靠的数据传输,保证数据不会丢失或损坏;UDP协议则提供了不可靠的数据传输。
- 网络层:网络层主要负责数据包的传输和路由选择,它通过IP协议实现了数据包的传输和路由选择。常用的网络层协议有IP、ICMP、ARP等。
- 数据链路层:数据链路层主要负责数据的传输和接收,它将网络层传来的数据包封装成帧,通过物理层进行传输。常用的数据链路层协议有以太网、PPP等。
UDP协议的特点有哪些?
UDP协议的特点包括:
- 面向无连接:UDP协议不需要建立连接,直接发送数据报。
- 不可靠性:UDP协议不保证数据传输的可靠性,数据报可能会丢失、重复或乱序。
- 高效性:UDP协议没有建立连接和维护连接的开销,传输数据的效率高。
- 支持广播和多播:UDP协议支持将数据报同时发送给多个主机,可以用于广播和多播。
- 没有拥塞控制:UDP协议没有拥塞控制机制,容易导致网络拥塞。
- 数据报大小限制:UDP协议发送的数据报大小有限制,最大为64K。
总之,UDP协议适用于对数据传输的实时性要求较高,而对数据可靠性要求不高的场景,如音视频传输、实时游戏等。
一、UDP是无连接的,即通信时不需要创建连接(发送数据结束时也没有连接可以释放)所以减小了开销和发送数据前的时延;
二、UDP采用最大努力交付,不保证可靠交付,因此主机不需要维护复杂的连接状态;
三、UDP是面向报文的,只在应用层交下来的报文前增加了首部后就向下交付IP层;
四、UDP是无阻塞控制的,即使网络中存在阻塞,也不会影响发送端的发送频率
五、UDP支持一对一、一对多、多对一、多对多的交互通信
六、DUP的首部开销小,只有8个字节,它比TCP的20个字节的首部要短。
1、 无连接性: UDP是一种无连接的协议,发送端在发送数据之前不需要与接收端建立连接。
2、 面向数据报:UDP将应用层交给它的数据进行分割,并在每个数据上加上源端口号和目标端口号的首部信息
3、 不可靠性:UDP协议不提供可靠交付机制,它不保证数据报的可靠性、顺序性、不重复性。
4、高效性: UDP没有建立连接和维护状态的开销,使用UDP具有较小的数据报头部,以及较低的通信延迟。
5、支持一对一、一对多、多对多的通信。
6、无阻塞控制: UDP协议没有内置的拥塞控制机制,因此发送端会一直以恒定的速率发送数据
TCP协议的首部结构
TCP尽管是面向字节流的,和UDP面向数据报不一样,但是TCP传送的每一个数据单元却是报文段。每一个TCP报文段分为首部和数据两部分,首部的各个字段都很好的体现了TCP的每个功能。TCP报文段首部的前20个字节是固定的,后面有4*n(整数)个字节是根据需要可选的,所以TCP首部的最小长度是20字节。首部字段分别是:源端口、目的端口、序号、确认号、数据偏移、保留、紧急URG、确认ACK、推送PSH、复位RST、同步SYN、终止FIN、窗口、检验和、紧急指针、选项。
加分回答
首部字段的意义分别是:
- 源端口:占2字节。
- 目的端口:占2字节。
- 序号:占4字节。序号范围是[0,2^23-1],共2^23(4 294 967 296)个序号。当序号达到2^23-1时候,下一个序号就回到0。TCP是面向字节流的,在一个TCP连接中传送的字节流的每一个字节都按顺序编号。整个TCP的起始序号必须在建立时确认,首部中的序号字段指的是这个报文段所发送的数据的第一个字节的序号。例如报文序号是101,携带的数据共100个字节,所以这个报文的第一个字节序号是101,最后一个字节的序号是200。下一个报文段就从201开始。
- 确认号:占4字节。是希望收对方下一个报文段的第一个数据字节的序号。例如序号中讲的,序号就是201。
- 数据偏移:占4位。指出TCP数据的起始位置和TCP报文段的起始处相差多少。也可以理解为数据偏移就是TCP首部字段的长度。
- 保留:占6位。保留为以后使用,当前置为0。
- 紧急URG:当URG=1时,说明紧急指针字段有效。告诉系统这个报文中有紧急的数据,应该尽快处理,优先级最高。
- 确认ACK:仅当ACK=1时,确认号字段才有效。当ACK=0时,确认号无效。TCP中有规定在TCP连接建立之后,所有传送的报文段ACK都必须为1。
- 推送PSH:发送方将PSH置为1后,表示当前命令之后希望收到对方的相应,推送很少用,不做深究。
- 复位RST:当RST=1时,表示TCP中出现严重的差错,必须释放连接然后再重新建立连接。RST=1还可以用来拒绝一个恶意的报文段。
- 同步SYN:在连接建立时用来同步序号。当SYN=1并且ACK=0时,表示这是一个连接请求报文段。若对方同意连接,就应该在响应报文中使SYN=1并且ACK=1。所以SYN=1表示这是一个连接请求或者连接接受报文。
- 终止FIN:用来释放一个TCP连接。当FIN=1时,表示报文段的发送方的数据已经发送完毕,要求释放连接。
- 窗口:占2字节。指的是发送这个报文段那方的接收窗口。窗口值告诉对方从确认号算起,接收方目前允许对方发送的数据量,因为接收方的数据缓存空间是有限的。
- 检验和:占2字节。检验和字段的检查范围包括首部和数据两个部分。和UDP一样需要在首部之前添加12字节的伪首部,算法这里不做深究。
- 紧急指针:占2字节。只有URG=1时才有用,表示这个报文段中紧急数据的字节数。
- 选项:长度可变,最长可达40字节,当没有选项时,TCP首部长度就是20字节。
HTTP协议的请求方式有哪些?
方法 描述 是否包含主体
GET 从服务器获取一份文档 否
HEAD 只从服务器获取文档的首部 否
POST 向服务器发送带要处理的数据 是
PUT 将请求的主体部分存储在服务器上 是
TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪 否
OPTIONS 决定可以在服务器上执行哪些方法 否
DELETE 从服务器上删除一份文档 否
HTTP协议的请求方式共有9种,分别为:
1. GET请求:用于请求获取Request-URI所标识的资源。
2. POST请求:在Request-URI所标识的资源后增加新的数据。
3. HEAD请求:请求获取由Request-URI所标识的资源的响应消息报头。
4. PUT请求:请求服务器存储或修改一个资源,并用Request-URI作为其标识。
5. DELETE请求:请求服务器删除Request-URI所标识的资源。
6. TRACE请求:请求服务器回送收到的请求信息,主要用于测试或诊断。
7. CONNECT请求:保留将来使用。
8. OPTIONS请求:请求查询服务器的性能,或者查询与资源相关的选项和需求。
9. PATCH请求:用来对已知资源进行局部更新。
其中,GET和POST请求是最常见的两种请求方式,常用于前端页面的数据请求和提交。HEAD请求通常用于获取资源的元信息,而不需要获取资源的实体内容。PUT和DELETE请求通常用于对服务器上的资源进行修改和删除操作。TRACE请求和CONNECT请求较少使用,OPTIONS请求则用于查询服务器支持的请求方法。
除了请求方式,HTTP协议还规定了状态码和加密机制。状态码用于表示服务器对请求的响应情况,共有5种类型,分别为指示信息、成功、重定向、客户端错误和服务器端错误。加密机制则通过与SSL或TLS的组合使用,加密HTTP通信内容,从而保证通信的安全性。HTTPS就是HTTP协议加上SSL或TLS后的结果,它使用公钥和私钥进行加密和解密,确保数据传输的安全性。