网络协议方面
网络协议
协议是进程通信的一种规范。
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
网络协议的目的,是为了统一不同设备的通信接口。
网络协议是由三个要素组成:
- 语义 语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
- 语法 语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
- 时序 时序是对事件发生顺序的详细说明。(也可称为“同步”)。
人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
一、TCP/IP协议
TCP/IP不是一种协议,是一个协议族,有很多协议。
TCP/IP协议族常用的协议有:TCP , UDP , IP , ARP , ICMP , IGMP , RARP
TCP/IP 协议层次有:应用层,传输层,网络层,链路层。如果按照7层的标准,应用层可分为应用层、表示层、会话层,链路层可分为链路层、物理层。
1、TCP协议
TCP是面向连接的,可靠的通信协议。
服务端需要有一个socket来监听端口,用于接受新的连接,有新连接就创建一个socket对象。网络框架中为了优化大量的socket连接,一般采用连接池技术。每个TCP包发送成功之后,收到消息的一段会返回一个ack包告诉发送方,接收消息成功。
1.1 TCP的三次握手
- 客户端发送syn包给服务端(第一次握手);
- 服务端返回syn+1包和ack码(第二次握手);
- 如果客户端计算和syn+1与服务端返回的syn+1相等,那么说明服务端准备好了。客户端将收到的ack码+1并返回给服务端(第三次握手);
服务端判断自己计算的ack+1是否与接受的ack+1相等。如果相等,客户端和服务端连接成功。
如果tcp客户端掉线,那么服务端就会收到一个长度为0的数据包。
(syn:同步序列编号,同步作用;ack:确认字符,应答作用)
1.2 为什么需要三次握手
TCP握手的过程是它建立连接的过程,建立连接,需要确认客户端和服务端双方都能进行通信,所以需要三次
1.3 TCP的四次挥手
- 主动方发送一个FIN,关闭主动方到被动方的数据传输(第一次挥手);
- 被动方收到这个FIN,返回一个ACK给主动方(第二次挥手);
- 被动方关闭连接,发送一个FIN给主动方(第三次挥手);
- 主动方发回一个ACK给被动方确认。(第四次挥手)
1.4 为什么TCP挥手会比握手多一次
因为被动方发送ACK和FIN多数情况是分开发送的。被动方接受一个FIN仅仅只代表主动方没有任何数据发给你了,但不代表被动方没有数据要发过去,所以有可能被动方还有数据数据要发送,等被动方要发送的数据要发送完了再发送FIN包。
2、UDP协议
UDP 是面向无连接的,UDP只要知道ip和端口号就能发送,不需要建立连接,UDP是一个不可靠的协议。
优势:资源消耗小,处理速度快
缺点:网络不好的话,容易丢包,不提供数据包分组、组装、排序。
二 、HTTP协议和HTTPS协议
HTTP是一个基于请求和响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。
1、常见的HTTP方法
- GET:请求访问被URI识别的资源
- POST:传输信息给数据库
- PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
- HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
- DELELTE:删除文件,与PUT方法相反,删除对应URI位置的文件。
2、get和post方法的区别
- get请求的数据一般都拼接在URL的地址后面,是明文显示的,而且长度存在限制,其安全性步入post请求高,但执行速度会比post请求高,get请求一般用于查询的请求的方式中
- post请求的方式,它的请求数据一般是放在http的请求体中,也就是我们所说的body体中,它的数据长度是不受限制的,它可以明文显示,也可以是密文显示,所以post请求的数据安全性比较高,所以这种方式一般是用于提交数据或者是修改数据的场景中。
3、常见HTTP状态码
-
1xx:指示消息,请求已接受,继续处理;
-
2xx:成功,表示请求已被成功接收;
-
3xx:重定向,要完成请求必须进行进一步操作;
-
4xx:客户端错误,请求无法实现;
-
5xx:服务器端错误,服务器未能实现合法请求。
-
200:请求被正常处理
-
204:请求被受理,但无资源返回
-
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
-
301:永久性重定向
-
302:临时重定向
-
303:与302功能相似,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上。
-
304:发送附带条件的请求时,条件不满足时返回,与重定向无关。
-
307:临时重定向,与302类似,只是强制要求用POST方法。
-
400:请求报文语法有误,服务器无法识别。
-
401:请求需要认证。
-
403:请求的对应资源禁止被访问
-
404:服务器无法找到对应资源。
-
500:服务器内部错误。
-
503:服务器正忙。
4、HTTP协议和HTTPS协议的区别
HTTPS协议是通过SSL协议外壳来确保其安全性,主要表现在三个方面:
- 1、数据是加密的,SSL是通过非对称密钥分发的形式来完成必要的协商,然后通过对称密钥的加密方式对数据完成加密
- 2、HTTPS协议会验证双方的身份信息,客户端和服务端双方都需要向CA机构去申请证书的,在SSL握手阶段的时候,就会去验证双方证书的是否可信,从而去验证双方的身份,这样的话就可以防止第三方的冒充
- 3、保证数据的完整性:
每次数据都需要加上MAC的摘要并签名,接受的数据和发送的数据,这个摘要是要相同的,这样就表示数据没有被篡改过。