HTTP状态码
- 1开头的说明消息已经接收,待处理。
- 2开头的:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
- 3开头的是用户需要重定向,如资源移动到了新的位置(301),需要重新请求另一个地址
- 4开头是客户端错,如错误请求(400),Forbidden (403) , Not found (404)
- 5开头的是服务端错误,Service Unvailable(503),服务器维护或过载。Internal Server error(500),通常是服务端代码错误。
Tcp三次握手与四次挥手
先看这篇博文:https://blog.csdn.net/qzcsu/article/details/72861891
SYN:同步序列包
ACK:应答包
FIN:释放连接包
三次握手的过程
四次挥手的过程
三次握手为什么TCP客户端最后还要发送一次确认呢?
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
TCP连接断开为什么要四次挥手?
TCP是全双工通信的,两个方向都有数据传输,所以两个方向上的数据传输都需要见单独的关闭。在一端的发送任务完成的时候,就会发起FIN请求报文,收到FIN报文的一端会通知应用层:另一端不会有数据再发送过来了。四次挥手的目的就是为了保证连接的两端都能完整的发送数据和接受数据。在握手的时候,服务端收到SYN请求包后,可以把SYN和ACK放在一个报文里面发送给客户端。而在挥手的时候,服务端收到客户端发来的FIN报文后,仅仅表示客户端已经没有数据要发送了,客户端还能够接收数据,并且服务端也还需要发送数据,所以只回了一个带有ACK的报文,待服务端的发送任务完成,再发送FIN请求报文,所以需要四次挥手。
TCP四次挥手后客户端为是什么还要等待2*MSL?
MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。
因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SENT状态到ESTABLISH状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。
Http与Https区别
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,HTTP协议不适合传输一些敏感信息。HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
https协议在应用层的http协议和传输层的TCP协议层之间加了一层SSL/TSL层。
https协议的主要作用:
1、一种是建立一个信息安全通道,来保证数据传输的安全。
2、另一种就是确认网站的真实性。
http与https区别:
1、http协议是明文传输的,https是SSL加密的传输协议,https要安全
2、https需要数字证书,一般需要花钱购买。
3、http使用80端口、https使用443端口
HTTPS优点:
1、具有身份认证的功能,确保数据发送到正确的客户机和服务器
2、https使用了SSL加密,防止数据在传输过程中被窃取
3、https虽然不是绝对安全,但增加了人身攻击的成本
HTTPS缺点:
1、要钱,好的数字证书费用更高、小网站消费不起。
2、HTTPS握手阶段更加费时间(多次握手),从http变为https方式,多数网站采用302跳转,页面加载时间会变长。
3、https需要用到安全加解密算法,增加了服务器CPU的压力(https慢一点的一个原因)。
OSI参考模型和TCP/IP模型
TCP:TCP主要的优点就是可靠。它在建立连接前需要三次握手,连接建立后进行数据传输时为了实现是靠传输使用了超时重传,丢弃重复数据,检验数据,流量控制,为避免网络拥塞还使用了拥塞控制。这些保证可靠传输的措施会使TCP传输效率降低,服务器和客户端需要为了维护TCP连接需要占用一定的CPU和内存资源。
UDP:UDP尽最大努力进行交付的无状态协议。UDP协议不需要保证可靠交付,自然传输的效率就比TCP高。它适用于对实时性要求较高的应用,如视频、音频的传输。
TCP应用的:HTTP、HTTPS(浏览器)、SMTP(邮件传输)、FTP(putty)
UDP应用:RIP(路由选择协议)、DNS(域名解析协议)、SNMP(简单网络管理协议)
TCP与UDP区别:
1、连接方式:TCP面向连接,UDP不是面向连接的,发送数据前不需要事前建立连接。
2、是否可靠:TCP提供可靠的服务,通过校验和、序号标识,重传,滑动窗口、确认应答等实现可靠传输、UDP是不可靠的,只保证尽最大努力进行交付。
3、实时性:UDP实时性更好,TCP需要事先连接。
4、协议首部开销:UDP首部开销小(首部8字节),TCP报文格式复杂些,首部开销大(20字节)。
5、报文:TCP是面向字节流的,传输的是无结构的字节流,UDP是面向报文的
6、双工性:TCP连接时点对点的通信、UDP可以是1对1、1对多、多对1、多对多的通信。
7、拥塞控制:TCP有拥塞控制、UDP没有。
网络各层的协议
浏览器输入URL地址到返回页面的过程
先看博文:
https://blog.csdn.net/yumanman666/article/details/58161540
https://blog.csdn.net/mevicky/article/details/46789381
https://blog.csdn.net/samjustin1/article/details/52650520
https://blog.csdn.net/ty987654/article/details/78007319
1、浏览器缓存查询是否缓存了对应域名的IP地址
2、本地操作系统hosts文件是否有,有就返回
3、向路由器缓存中查询是否有域名的IP地址,有就返回。
4、若没有就向DNS服务器发起查询,这里有递归查询(本地DNS服务器代理查询)和迭代查询(DNS客户机自己去查询)。
5、发起HTTP请求(不是第一次带上cookie),应用层的HTTP协议在传输层被封装成TCP报文。TCP在网络层次又被封装成ip数据包,ARP协议会将IP地址解析为MAC地址,如果在同一网段,ARP广播给同一网段的所有主机,每个主机查询自己的MAC地址,如果不在同一网段,通过ARP协议就会知道下一个路由的MAC地址,把数据包发过去。
6、如果访问不出问题,服务器收到客户端发来的请求,若服务器同意请求,则建立TCP连接,TCP连接会有一个三次握手的过程。
7、握手完成后,服务器向客户端向客户端发送请求的数据。客户端就可以开始解析页面。下载js和请求响应的css,下载页面所需的图片并进行渲染,最终用户就能看到一个页面了。
8、待双方数据传输完成后,就可以进行TCP的连接释放的四次挥手过程。客户端和服务器端也可以释放TCP连接所占用的CPU和内存资源。
http1.0、http1.1、http2
博文地址:
https://blog.csdn.net/m_xiaoer/article/details/72903355
https://www.jianshu.com/p/75563ce21021
http1.1相比与1.0:
(1)、http1.1默认长连接 , http1.0默认是短连接
(2)、http1.1可以节约带宽,支持发送只带header消息,若客户端没权限请求服务器,返回401,若服务器接受请求返回100,然后客户端才开始发送请求的body信息发送到服务器。
(3)、HOST域,web server上的多个虚拟站点可以共享同一个ip和端口。HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
http2.0相比与1.1:
1、多路复用:http2.0使用了多路复用技术,做到同一个连接并发处理多个请求,并且并发请求的数量也比http1.1高几个数量级。在HTTP/1.1协议中,浏览器客户端在同一时间针对同一域名的请求有一定数据限制,超过限制数目的请求会被阻塞。虽然可以通过多建立几个TCP连接来提高并发性,但是TCP连接是需要开销的,而单连接多资源的方式更节省内存,减少服务器压力,提高吞吐量。TCP连接的减少可以改善网络拥塞情况,慢启动的时间减少了,拥塞和丢包恢复也会更快。HTTP2.0 通过让所有数据流共用同一个连接,可以更有效地使用TCP连接,让高带宽也能真正的服务于 HTTP 的性能提升。
2、二进制分帧: 在 应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 ,其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。
3、数据压缩:http2.0可以对header数据进行压缩,数据体积小了,在网络上的传输速度也就变快了。
4、服务器推送(Server Push):服务端能够更快的把资源推送给客户端,比如客户端请求了一个页面,服务器可以主动把相应的js和css推送过去,不用客户端再去请求了。
拥塞控制
博文地址:
https://www.cnblogs.com/a294098789/p/5658593.html
https://blog.csdn.net/u010796790/article/details/52853539
ARP是地址解析协议,简单语言解释一下工作原理。
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查询失败。
广播发送ARP请求,单播发送ARP响应。
ICMP协议与Ping原理
博文地址:https://www.cnblogs.com/a294098789/p/5645055.html
ICMP是网络层协议,ICMP报文分为两类:查询报文、差错报文。它用于在主机、路由器之间传递控制信息,用来探测主机、路由器是否可达。ICMP封装在IP数据包中,用来保证IP数据包的可靠性。当传送IP数据包发生错误时,ICMP协议会把错误信息封装成包回送给目的主机。
ping和icmp
Ping命令就是使用ICMP协议的一个例子:源主机向一个目的主机发送类型为8的回送请求icmp报文给目的主机,若源主机在一定时间内收到类型为0的icmp回送应答报文说明目的主机可达,否则不可达。
IP地址及其分类
A类地址:0开头的地址,网络地址(1字节)+主机地址(3字节)
B类地址:10开头的地址,网络地址(2字节)+主机地址(2字节)
C类地址:110开头的地址,网络地址(3字节)+主机地址(1字节)
D类地址:1110开头的地址,用于广播。
E类地址:保留未使用。
TTL
TTL(Time To Live)是指生存时间,简单来说,它表示了数据包在网络中的时间,经过一个路由器后TTL就减一,这样TTL最终会减为0,当TTL为0时,则将数据包丢弃,这样也就是因为两个路由器之间可能形成环,如果没有TTL的限制,则数据包将会在这个环上一直死转,由于有了TTL,最终TTL为0后,则将数据包丢弃。Ping命令中使用到了TTL,traceroute也使用了TTL。
运输层协议与网络层协议的区别?
1、网络层协议负责的是提供主机间的逻辑通信
2、运输层协议负责的是提供进程间的逻辑通信
IP协议及相关
https://blog.csdn.net/super_yc/article/details/72290931
https://www.cnblogs.com/red-code/p/7132023.html#_label0
IP数据报格式、TCP报文格式、UDP协议格式、MAC帧格式。
以太网帧格式:
不同报文的字段含义需要去看书,内容太多了就不贴了。
交换机与路由器区别
1、交换机工作在数据链路层,路由器工作在网络层。
2、交换机使用MAC地址转发(简单),路由器使用IP地址进的网络号行转发(复杂)。
3、传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域
4、路由器提供了防火墙的服务,而交换机则没有。路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。
什么叫冲突域?
在以太网中,如果某个CSMA/CD网络上的两台计算机在同时通信时会发生冲突,那么这个CSMA/CD网络就是一个冲突域(collision domain)。
加密算法
1、对称加密
有流式、分组两种,加密和解密都是使用的同一个密钥。
例如:DES、AES-GCM、ChaCha20-Poly1305等。
2、非对称加密
加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
例如:RSA、DSA、ECDSA、 DH、ECDHE
3、哈希算法
将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
例如:MD5、SHA-1、SHA-2、SHA-256 等
数字签名
签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。
后续收集再补充。。。
参考资料
https://blog.csdn.net/u013408431/article/details/62442670?locationNum=10&fps=1
https://www.nowcoder.com/discuss/1937
《计算机网络》第六版 谢希仁