计算机网络
网络中的协议层次(从上到下,向上提供服务):
应用层:如Web世界中应用最广泛的HTTP(超文本【对传统文本语义的扩充】传输【Client端与Server端的应答过程】协议【共同遵守的规范和约束】)、SMTP(电子邮件传输协议)、FTP(端系统文件上传协议)。主要是端上的应用程序与另一个端的应用程序之间的通信过程。传输的单位是报文。
传输层:实现的是端与端之间的通信,主要包含两种协议:TCP(面向数据流的、确保报文段的送达、可以通过拥塞控制来抑制传输速率)和UDP(面向报文段的、不确保消息的送达、因此不会控制)。之所以TCP是面向数据流的,UDP是面向报文段的,可以这样理解,因为TCP会一次发送发送窗口中的内容,如果发送窗口足够大,那么对应用程序来说他只是完成了数据的写入工作,类似于直接将数据写入到即将发送的数据流当中去,而UDP是每次都是直接发送报文段的,在应用程序看来就是一个个报文段的发送。传输单位是报文段。
网络层:主要涉及的就是网段与网段之间的通信,主要协议为IP协议(主要就是子网网段的划分)、ICMP协议(能否通信成功)、OSPF协议(最短路径优先),传输的基本单位是数据包
数据链路层:完成对底层比特流的封装,并且在发送过程中确保帧的正确性,传输的基本单位是帧。
物理层:完成对底层硬件的屏蔽,实现比特流的透明传输。
HTTPS是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,HTTPS = HTTP + SSL(TLS)
浏览器输入URL访问的全过程:
hosts文件——DNS服务器找到IP地址
通过IP地址建立TCP连接,可能涉及到OSPF协议(不是一个网段的情况下)
Client端通过套接字向服务端发送HTTP请求报文
Server端通过套接字接收报文,并根据请求响应一个报文,通过套接字完成对客户端的响应工作
如果是HTTP1.0此时Server端立刻完成TCP的关闭,Client端TCP的关闭会延迟到取出报文段最后一个字节后也完成关闭
Client端页面渲染
HTTP的格式:起始行【GET URL HTTP Version】、请求头/响应头、body
由于HTTP是明文传输且不会伪装,发送方和接收方都很容易被伪造,数据也容易被中途篡改。HTTPS较之于HTTP的优化点有:
1、加密,防止数据窃听
对称加密【AES-256】、非对称加密【RSA】(是可以相互加解密的,只不过习惯将私钥置于独有的位置,所以使用公钥完成数据加密)、混合加密【RSA慢,AES快,为了解决这个冲突,Client端和Server端持有自己的公钥和私钥,使用非对称加密来完成对会话密钥的加密,然后Server端和Client端使用对称加密来完成对需要传输的内容的加密】
RSA:取出两个大的素数pq,越大加密等级越高,但是加解密消耗也越大
2、数据一致性(完整性):避免被中途篡改
摘要算法,常见的如MD5、SHA-256,将任意长的文件通过这种不可逆的算法得到一串固定长度的字符串,通过对字符串的校验来比较文件是否完整
3、身份认证:防止中间人攻击或者被模拟成发送端或者接收端
实现不需要引入其他的东西了,仅需通过私钥这种方式来完成,因为私钥是独有的,可以完成身份认证。通过将报文使用摘要算法生成一个密文,通过私钥加密将密文形成自己独有的数字签名即可,发送时候带上这个数字签名即可完成认证。
公私钥的来源是请求需要存储私钥的端要公钥
SSL/TLS
TLS是SSL的后续版本(2000年时候更名),思想就是非对称加密,创建密钥对,有公钥和私钥,私钥一般存储在服务器上,然后用户向服务器上发送数据的时候使用公钥来完成加密,最后服务端使用私钥来进行解密
TCP的粘包拆包
粘包:TCP发送时候将存储在发送窗口的多个数据包打包成一个TCP报文段发送出去,这样就导致了数据的粘包问题。
拆包:如果通信的一端一次发送的数据量超过了发送窗口的阈值,那么此时会拆分成多个TCP报文段来进行发送。
对于粘在一起的包需要拆开,对于拆开的包需要粘在一起来
在每个数据包的前面加上长度信息即可
TCP的特点(说说你对TCP的理解):
传输层的主要协议之一、另一个是UDP,对着UDP来说就行
1、面向连接的 2、可靠的(编号校验、单个报文段校验、流量控制、拥塞控制) 3、传输效率较低 4、多出的12位是为了计算TCP校验和的
拥塞避免几个算法:慢开始(拥塞窗口++)、拥塞避免(拥塞窗口++,慢开始门限++)、快重传和快恢复(连续接收到三个重复确认,如连续发送12345报文段,此时1发送成功,2发送失败,发送3时候成功,收到1确认,发送4成功,收到1的确认,发送5成功,收到1的确认,此时会立即完成对报文段2的重传,不需要等待报文段2的时间到了)。发生网络拥塞情况,拥塞窗口=1,慢开始门限/2
HTTP Version迭代的东西:
HTTP1.1较之于HTTP1.0
优点:引入了TCP持久化连接的特性,实现多个请求完成TCP的复用,并且姓曾请求方式PUT和UPDATE
HTTP2.0较之于HTTP1.1
优点:支持TCP的全双工,可以完成客户端与服务端的数据包并行发送,增加了带宽的利用率。使用二进制传输方式代替字符串传输,增加传输效率。HTTP请求头大量重复信息,在传递下一个的时候仅仅只会记录HTTP请求头的变更信息
缺点:建立连接时候时间长 TCP1.5个RTT,TLS也要消耗1~2个RTT
最后更新于