三次握手
TCP是因特网中的传输层协议,使用建立连接,完成三次握手,与服务器开始传送
第一次握手
建立连接时,发送包(syn=j)到服务器,并进入等待状态,等待服务器确认SYN;同步序列编号
第二次握手:服务器
第二次握手:收到SYN包,必须确认客户的SYN(syn=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入等待状态
第三次握手:
客户端收到服务器的SYN+ACK包,想服务器发送确认包,ACK(ack=K+1),此包发送完毕,客户端和服务器进入(TCP连接成功),状态,完成三次握手
TCP协议优点
TCP发送的包有序号,对方收到包后要给一个反馈,如果超过一定时间还没有收到反馈就自动执行超时重发,因此TCP最大的优点是可靠
TCP协议缺点:
很简单,就是麻烦,如果数据量小的话建立连接的过程反而占了大头,不断的重发也会造成网络延迟,因此比如视频聊天通常使用UDP,因为丢失一些包也没有关系,速度流程才是重要的
为什么会有三次握手 四次挥手
三次握手为了防止已失效的连接请求报文突然就送到了服务器,因而产生错误,假设两次握手时,客户发出的第一个请求连接报文段在某一个网络节点长时间滞留,以致延误连接释放后才到达服务器,服务器收到失效的连接请求报文段后,认为是客户又发出一次新的连接请求,于是向客户发送确认报文段,同意建立连接,此时在假定两次握手的前提下,连接建立成功,这样会导致服务器的资源白白浪费
四次挥手,TCP协议是全双工通信,这意味着客户端和服务器端都有可以向彼此发送数据,所以关闭连接是需要确认的共同行为,假设是三次挥手时,首先释放客户到服务器方向的连接,此时TCP连接处于半关闭的状态,这是客户不能向服务器发送数据,而服务器还是可以向客户发送数据,如果此时客户收到了服务器的确认报文段后,就立即发送一个确认报文段,这会导致服务器向客户还在发送数据时连接就被关闭,这样会导致客户没有完整收到服务器发送的报文段
GET和POST的区别
两者基于http协议发送请求时其实没有太大的区别
1 get方式传参直接在url地址后面进行拼接,post方式 请求参数在请求体中
2 安全性,因为get请求参数在url地址中所以可以通过浏览器历史找到参数,但是post是在请求体中所以相对安全
3 get 只允许 ASCII 字符; post ⽆限制
4 GET ⽆害 刷新、后退等浏览器操作是⽆害的; post 可能会引起重复提交表单
5 get是安全且幂等(这⾥的安全是指只读特性,就是使⽤这个⽅法不会引起服务器状态变化。 幂等的概念是指同⼀个请求⽅法执⾏多次和仅执⾏⼀次的效果完全相同) post是⾮安全(会引起服务器端的变化)、⾮幂等