GET POST的区别 http tcp 关系 socket长连接的心跳的作用

参考来源:https://www.cnblogs.com/songanwei/p/9387815.html
GET POST的区别

  1. GET请求在URL中传送的参数是有长度限制的,而POST没有。
  2. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  3. GET参数通过URL传递,POST放在Request body中。
  4. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  5. GET请求只能进行url编码,而POST支持多种编码方式。
  6. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  7. GET产生的URL地址可以被Bookmark,而POST不可以。
  8. GET在浏览器回退时是无害的,而POST会再次提交请求。

http tcp 关系
HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。
HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

TCP的面向连接是基于网络底层的数据传输。
HTTP的无连接是基于应用层面的沟通交互。

socket长连接的心跳的作用
通过socket连接的双方为了保证在一段时间未发消息不被防火墙断开连接或者使对方及时知道自己是否已经断线而定期给对方发送的某些特殊标识字符,这个字符可以根据双方自定义,没有实际的通讯意义。

OSI网络模型以及每层的数据格式
参考来源:https://blog.csdn.net/aqudgv83/article/details/82842083
在这里插入图片描述

一、TCP建立连接三次握手

TCP三次握手其实就是TCP连接建立的过程,三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。下面是TCP三次握手的流程图:
在这里插入图片描述

整个流程为:

客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态
服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态
客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态
为什么在第3步中客户端还要再进行一次确认呢?

这主要是为了防止已经失效的连接请求报文段突然又传回到服务端而产生错误的场景:

所谓"已失效的连接请求报文段"是这样产生的。正常来说,客户端发出连接请求,但因为连接请求报文丢失而未收到确认。于是客户端再次发出一次连接请求,后来收到了确认,建立了连接。数据传输完毕后,释放了连接,客户端一共发送了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,没有"已失效的连接请求报文段"。

现在假定一种异常情况,即客户端发出的第一个连接请求报文段并没有丢失,只是在某些网络节点长时间滞留了,以至于延误到连接释放以后的某个时间点才到达服务端。本来这个连接请求已经失效了,但是服务端收到此失效的连接请求报文段后,就误认为这是客户端又发出了一次新的连接请求。于是服务端又向客户端发出请求报文段,同意建立连接。假定不采用三次握手,那么只要服务端发出确认,连接就建立了

由于现在客户端并没有发出连接建立的请求,因此不会理会服务端的确认,也不会向服务端发送数据,但是服务端却以为新的传输连接已经建立了,并一直等待客户端发来数据,这样服务端的许多资源就这样白白浪费了。
采用三次握手的办法可以防止上述现象的发生。比如在上述的场景下,客户端不向服务端的发出确认请求,服务端由于收不到确认,就知道客户端并没有要求建立连接。

二、TCP释放连接四次握手
TCP三次握手是TCP连接建立的过程,TCP四次握手则是TCP连接释放的过程。下面是TCP四次握手的流程图:

在这里插入图片描述

(1)四次握手过程

假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下:
1) 关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u
  2) 服务器收到这个FIN,它发回一个ACK,确认号ack为收到的序号加1。
 3) 关闭服务器到客户端的连接:也是发送一个FIN给客户端。
  4) 客户段收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号1。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

主机A发送FIN后,进入终止等待状态, 服务器B收到主机A连接释放报文段后,就立即给主机A发送确认,然后服务器B就进入close-wait状态,此时TCP服务器进程就通知高层应用进程,因而从A到B的连接就释放了。此时是“半关闭”状态。即A不可以发送给B,但是B可以发送给A。

此时,若B没有数据报要发送给A了,其应用进程就通知TCP释放连接,然后发送给A连接释放报文段,并等待确认。A发送确认后,进入time-wait,注意,此时TCP连接还没有释放掉,然后经过时间等待计时器设置的2MSL(最大报文生存时间)后,A才进入到close状态。

参考来源:
https://blog.csdn.net/laomumu1992/article/details/83011898

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值