TCP握手和挥手
TCP握手和挥手_骐骥一跃,不能十步;驽马十驾,功在不舍。-优快云博客
TCP粘包
什么是TCP粘包?怎么解决这个问题_渔溪大王的博客-优快云博客_tcp粘包
TCP长连接短连接
TCP短连接
我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在client/server间传递一次读写操作
短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段
TCP长连接
接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
首先说一下TCP/IP详解上讲到的TCP保活功能,
TCP保活的缘起
双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动释放连接,而有些不会,那么在长时间无数据交互的时间段内,交互双方都有可能出现掉电、死机、异常重启等各种意外,当这些意外发生之后,这些TCP连接并未来得及正常释放,那么,连接的另一方并不知道对端的情况,它会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费,为了解决这个问题,在传输层可以利用TCP的保活报文来实现。
TCP保活的作用
1, 探测连接的对端是否存活
在应用交互的过程中,可能存在以下几种情况:
(1)客户端或服务器端意外断电、死机、崩溃、重启
(2)中间网络已经中断,而客户端与服务器端并不知道
利用保活探测功能,可以探知这种对端的意外情况,从而保证在意外发生时,可以释放半打开的TCP连接。
2, 防止中间设备因超时删除连接相关的连接表
中间设备如防火墙等,会为经过它的数据报文建立相关的连接信息表,并为其设置一个超时时间的定时器,如果超出预定时间,某连接无任何报文交互的话,中间设备会将该连接信息从表中删除,在删除后,再有应用报文过来时,中间设备将丢弃该报文,从而导致应用出现异常,这个交互的过程大致如下图所示:
这种情况在有防火墙的应用环境下非常常见,这会给某些长时间无数据交互但是又要长时间维持连接的应用(如数据库)带来很大的影响,为了解决这个问题,应用本身或TCP可以通过保活报文来维持中间设备中该连接的信息
工作原理
如果一个给定的连接在2小时内没有任何动作,那么服务器就向客户发送一个探查报文段。客户主机必须处于以下4个状态之一:
(1)客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方的正常工作的,服务器在2小时内将保活定时器复位。
(2)客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应,服务器将不能收到对探查的响应,并在75秒后超时,总共发送10个探查,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
(3)客户主机崩溃并已经重新启动。这是服务器将收到一个对其保活探查的响应,但这个响应是一个RST复位,使得服务器终止这个连接。
(4)客户主机正常运行,但是从服务器不可达。这与状态2相同,因为TCP不能够区分状态4与2之间的区别,它所能发现的就是没有收到探查的响应。
服务器不用关注客户主机被关闭或者重新启动的情况。当客户机被关闭之后,所有的应用进程也被终止,这会使客户的TCP在连接上发出一个FIN。接收到FIN会使服务器的TCP向服务器进程报告文件结束,从而服务器检测到了这种情况。
cookie session 区别
session失效与过期【Web】关于Session过期/失效的理解_日薪灬越亿的博客-优快云博客
Post Get区别
一般来说GET是获取数据,POST是提交数据的。
GET传输数据的时候是在URL地址中的、对所有人都是是可见的、是不安全的、是有浏览器缓存记录的。GET只能传输ASCLL字符,不能进行编码。POST传输的时候是放在HTTP的请求体之中的,并且是经过urlencode编码的所以是相对安全的。POST是没有对数据类型的限制的,二进制数据也是可以的。
GET请求的过程:先进行3次握手,然后服务器返回成功响应。POST请求的过程:先进行3次握手,然后服务器返回100continue响应,浏览器再次发送数据,服务器返回200成功响应。也就是说POST是要比GET多进行一次数据传输的,所以GET请求就比POST请求更快。
因为GET是获取数据,所以GET请求是安全且幂等的,是无害的。这个安全指得是对数据不会造成影响。幂等简单的来说就是无论获取多少次数据得到的资源都是一样的。POST是向服务器传输数据,数据会被重新提交,所以就会有对原有的数据造成伤害