1 HTTP
1.1 简介
HTTP协议是基于TCP/IP协议之上的应用层协议,主要用于规定互使用联网中客户端和服务器之间的通信格式,不关心具体传输细节,默认80端口。对于Web开发,不管是前端还是后端开发,了解HTTP协议是必备的一些基本知识。
1.2 特点
- 基于TCP协议:HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。
- 无状态连接:HTTP协议本身不对请求和响应之间的通信状态进行保存。
- 多次请求:由于管道机制可实现一次TCP连接同时多个HTTP请求。客户端请求服务器时先响应HTML,再请求加载CSS,JS,图片等资源。
- 持久连接:当TCP连接建立后,只要任意一端没有明确提出断开连接,则保持TCP连接状态。减少TCP重复建立和断开的开销及服务器端的负载。
- 使用Cookie和Session机制管理状态:为了实现保存通信状态,引入了Cookie和Session技术。比如用户登录网站跳转到其他页面能够保存用户状态,而不需要重新登录。
- 全明文传输: 报文数据不加密(这一方面从某种意义上也方便了开发人员调试bug),敏感信息易泄露。可通过在代码上使用SSL/TLS协议改造系统,加密请求响应报文,需调试可将报文解密后保存到日志中进行问题排查。
- 内容编码: 由于某些报文的内容过大,因此在传输时,为了减少传输的时间,会采取一些压缩的措施。
- 范围请求: 当客户端请求的数据内容过大时,比如请求一张很大的图片,会发现有时候图片是一块一块加载的。这就是因为设置了http请求的长度,这样就可以分块的加载资源文件。在请求报文中使用Range属性,在响应报文中使用Content-Type属性都可以指定一定字节范围的http请求。
- 多部分对象集合: 报文传输的内容,不仅仅是一些字符串,还有可能是一些图片,字符,音乐二进制等混杂的内容。这就需要使用多部分对象集合,multipart。默认的情况下form使用的编码格式是:applicatin/x-www-form-urlencoded,这种编码格式会把所有的内容进行编码,不适合上传文件这种情况。multipart/form-data 会以控件为基准,编码form中的内容。application/x-www-form-urlencoded 会把form中的内容编码成键值对的形式。
1.3 加密
SSL/TLS
由于HTTP通信是全明文传输的,很多敏感信息容易被窃取。网景公司(Netspace),发明了SSL协议,用于对HTTP传输的内容进行安全加密。后来互联网标准化组织IETF将SSL推广并重新命名为TLS协议,所以SSL和TLS基本是一个东西。
HTTPS
HTTPS = HTTP + SSL/TLS
可进行加密传输、身份认证,默认443端口,需要使用CA证书,免费证书较少,需交费。HTTPS有以下几个特点: (1) 所有信息都是加密传播,黑客无法窃听。 (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。 (3) 配备身份证书,防止身份被冒充。
2 TCP & UDP
TCP:
位于传输层, 提供可靠的字节流服务
UDP:
无连接协议,也称透明协议,也位于传输层。
2.1 TCP与UDP区别
。 | TCP | UDP |
---|---|---|
是否连接 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠 | 不可靠 |
应用场合 | 少量数据 | 传输大量数据 |
速度 | 慢 | 快 |
2.2 TCP三次握手
TCP 三次握手好比在一个夜高风黑的夜晚,你一个人在小区里散步,不远处看见小区里的一位漂亮妹子迎面而来,但是因为路灯有点暗等原因不能100%确认,所以要通过招手的方式来确定对方是否认识自己。
你首先向妹子招手(syn),妹子看到你向自己招手后,向你点了点头挤出了一个微笑(ack)。你看到妹子微笑后确认了妹子成功辨认出了自己(进入estalished状态)。
但是妹子有点不好意思,向四周看了一看,有没有可能你是在看别人呢,她也需要确认一下。妹子也向你招了招手(syn),你看到妹子向自己招手后知道对方是在寻求自己的确认,于是也点了点头挤出了微笑(ack),妹子看到对方的微笑后确认了你就是在向自己打招呼(进入established状态)。
于是两人加快步伐,走到了一起,彼此之间相互拥抱。
我们来回顾一下,这个过程中总共有四个动作,
- 你招手
- 妹子点头微笑
- 妹子招手
- 你点头微笑
其中妹子连续进行了两个动作,先是点头微笑(回复对方),然后再次招手(寻求确认),实际上我们可以将这两个动作合成一个动作,招手的同时点头和微笑(syn+ack)。于是这四个动作就简化成了三个动作。
- 你招手
- 妹子点头微笑并招手
- 你点头微笑
这就是三次握手的本质,中间的一次动作是两个动作的合并。
两次握手会出现什么问题?
看到这里,你或许会问,那么为什么需要第三次握手呢?我们来看一下,假设一下如果没有第三次握手,而是两次握手后我们就认为连接成功了,那么会发生什么?第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。
譬如发起请求遇到类似这样的情况:客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到连接释放的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手。
2.3 TCP四次挥手
全称连接终止协议
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
3 IP
IP是设备在网络上的逻辑地址。
既然提到了逻辑地址,那也会有相应的物理地址。
. | IP地址 | 物理地址 |
---|---|---|
是否可以更改 | 可以 | 不可以 |
唯一性 | 没有 | 有 |
主要作用 | 在网络层将数据包在网络之间转发 | 在数据链路层将数据帧在相同链路的不同节点之间转发 |
长度 | 32位二进制;分为4段,每段8位,每段都用十进制表示 | 48位;分为两段,每段24位用16进制表示 |
寻址协议层 | 网络层 | 链路层 |
分配依据 | 网络拓扑 | 制造商 |
1、是否可以更改
IP地址是逻辑地址,是可以更改的,而物理地址是固定地址,出厂时就已经固定,不可以更改。
2、是否具有唯一性
IP地址,属于互联网协议地址,地址不具有唯一性;而物理地址,是每一台电脑的网卡上的固定地址,具有唯一性。
3、主要作用不同
IP地址专注于网络层,将数据包从一个网络转发到另外一个网络;而物理地址专注于数据链路层,将一个数据帧从一个节点传送到相同链路的另一个节点。
4、二者长度不同
IP地址为32位,分为4段,每段8位,用十进制数字表示;而物理地址为48位,由16进制的数字组成,分为前24位和后24位。
5、寻址协议层不同
IP地址应用于OSI第三层,即网络层;而物理地址应用在OSI第二层,即数据链路层。
6、分配依据不同
IP地址的分配是基于网络拓扑,而物理地址的分配是基于制造商。