如何保证TCP的可靠性?
1、校验和
TCP校验和的计算在计算时要加上12byte的伪首部,检验范围包括首部及数据部分。计算方法为:发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在校验和字段中,接收方用相同的方法进行计算,如最终结果检验字段所有位全是1,则正确,否则错误。
2、序列号
序列号是指TCP对每个字节的数据都进行的编号。当接收到的数据总少了某个序号的数据时,可以马上知道。
3、ACK(确认应答机制)
在TCP的首部中有一个标志位ACK,用来表示确认号是否有效。接收方对于按序到达的数据会进行确认,当ACK=1时,确认首部的确认字段有效,这表示这个值之前的数据都已经按序到达了。发送方如果收到了已发送的数据的确认报文,则继续传输下一部分数据。如果等待了一定时间没有收到,就会启动重传机制。
4、握手与挥手
TCP建立连接时的三次握手和断开连接时的四次挥手。该连接管理机制也保证了TCP的可靠性。(具体流程请移步笔者另一篇博客)
5、拥塞控制
如慢启动、拥塞避免、快重传、快恢复等。
TCP和UDP的区别?
1)
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,面向字节流。
而UDP是一种无连接的、不可靠的传输层协议,面向报文。
2)
TCP需要三次握手、重新确认等连接过程,实时性差,同时过程复杂,易于遭受攻击。TCP开销也较大。
相比之下,UDP没有建立连接的过程,实时性较强,也更安全,开销较小。
3)
TCP连接只能是点到点的;
而UDP支持一对一、一对多、多对一、多对多的交互通信。
4)
需要传输大量数据,对可靠性要求高的情况下用TCP。
实时性要求高,可靠性要求低,效率要求高时,用UDP。
几种常见method的区别?
GET方法
GET方法获取被请求URI指定的信息,该信息以实体的型式呈现。如果请求URI指向的是一个数据生成过程,那么这个生成的数据应该作为一个实体在响应中返回。GET请求的响应是可缓存的。
HEAD方法
HEAD方法和GET方法一致,区别在于HEAD方法不需要服务器在响应里返回消息主体。HEAD请求响应里HTTP头里的元信息应该和GET请求响应里的元信息一致。此方法被用来获取请求实体的元信息,而不需要传输实体主体。此方法经常被用来测试超文本链接的有效性,可访问性,和最近的改变。HEAD请求的响应是可缓存的。
POST方法
POST方法:给源服务器一个请求,源服务器接受这个请求中的实体,然后可以将其作为资源的一部分。POST方法的实际功能是由服务器决定的,并且经常依赖于请求URI。POST方法的响应是可缓存的。
PUT方法
PUT方法请求服务器把请求里包含的实体存储在请求URI标识下。如果请求URI指定的的资源已经在源服务器上存在,那么此请求里的实体应该被当作是源服务器在此URI所指定资源实体的修改版本。如果指定的资源不存在,并且此URI被用户代理定义为一个新资源,那么源服务器就应该根据请求里的实体创建一个此URI所标识下的资源。PUT方法的响应不应该被缓存。
DELETE方法
DELETE方法请求源服务器删除请求URI指定的资源。客户端不能保证此操作能被执行,即使源服务器返回成功状态码。服务器打算删除资源或把此资源移到一个不可访问的位置时返回成功。如果响应里包含描述成功的实体,响应应该是200(Ok);如果DELETE动作没有通过,应该以202(已接受)响应;如果DELETE方法请求已经通过了,但响应不包含实体,那么应该以204(无内容)响应。DELETE方法的响应不能被缓存。
TRACE方法
TRACE方法被用于激发一个远程的应用层的请求消息回路。最后的接收者或者是接收请求里Max-Forwards头域值为0源服务器或者是代理服务器或者是网关。TRACE请求不能包含一个实体。TRACE方法允许客户端知道请求链的另一端接收什么,并且利用那些数据去测试或诊断。TRACE方法的响应不能不缓存。