HTTP协议(超文本传输协议)和 UDP(用户数据包协议),TCP 协议(传输控制协议)css
TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议,arq协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。算法
UDP与TCP的区别与联系后端
一:UDP是面向无链接的协议,TCP 是面向链接的协议
UDP发出请求后,即发送数据以前不须要先链接,TCP 发送数据以前须要先链接
二:UDP 相对TCP来讲是不可靠的
由于 UDP 在发送数据之后,没有采用超时重发,中止等待机制,拥塞控制
三:TCP 面向流,UDP 面向报文缓存
优势:可靠,稳定安全
TCP的可靠体如今TCP在传递数据以前,会有三次握手来创建链接,并且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开链接用来节约系统资源。服务器
缺点:网络
TCP在传递数据以前,要先建链接,这会消耗时间,并且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,并且要在每台设备上维护全部的传输链接,事实上,每一个链接都会占用系统的CPU、内存等硬件资源。并发
优势:运维
缺点:ssh
### 三次握手与四次挥手
三次握手
第一次握手:第一次链接时,客户端向服务器端发送SYN(syn=j),等待服务器端的确认,此时客户端进入SYN_SEND状态,SYN:同步序列号
第二次握手:服务器端收到客户端发来的SYN,必须向客户端发送ACK包(ack=j+1=k),同时本身必须发送一个SYN包,即syn+ack,此时进入SYN_REC状态
第三次握手:客户端收到服务器端发来的syn+ack包,向服务器发送ack包(ack=k+1),发送完毕,此时进入ESTABLISH状态,链接成功,完成第三次链接。
发送 确认 第一次:SYN=1 SEQ=X ACK=0(客) 第二次:SYN=1 SEQ=Y ACK=X+1(服) 第三次: SEQ=X+1 ACK=Y+1(客)
4次挥手
A进入终止等待1(FIN-WAIT-1)状态
tcp处于半关闭状态(half-close)
a收到b端的确认后,就进入终止等待2状态
进入last-wait状态
进入时间等待状态(time-wait)
时间等待计数器设置的时间过了2msl之后,进入closed状态
三次握手的缘由
若是只有两次握手的话,好比说失效的报文段,忽然发送到服务端,服务端收到失效报文段的请求后,会发送确认报文,新的链接就创建起来了。但如今因为客户端并无发出请求,因此并不会理睬服务端的确认,也不会像服务端发送数据。而服务端觉得已经链接起来了,一直在等待,浪费资源。
四次挥手的缘由
TCP创建链接要进行3次握手,而断开链接要进行4次,这是因为TCP的半关闭形成的,由于TCP链接是全双工的(
即数据可在两个方向上同时传递)因此进行关闭时每一个方向上都要单独进行关闭,这个单方向的关闭就叫半关闭.
关闭的方法是一方完成它的数据传输后,就发送一个FIN来向另外一方通告将要终止这个方向的链接.当一端收到一个FIN,它必须
通知应用层TCP链接已终止了这个方向的数据传送,发送FIN一般是应用层进行关闭的结果.
ACK TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号以前的数据段
都收到了.好比,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
SYN 同步序列号,TCP创建链接时将这个位置1
FIN 发送端完成发送任务位,当TCP完成数据传输须要断开时,提出断开链接的一方将这位置1
Http 是在应用层上的传输协议,底层是 TCP 协议实现的,
它一种面向无状态的链接,短链接,
之因此说他无状态,是由于在每一次请求完成以后,都会把链接关了,不会记住是哪个客户端链接。
四种请求方式
get,post,pull,delete
请求信息有请求行,请求头,请求正文
请求行:请求方式,请求地址,请求协议
请求头:头名称,头值
请求正文:(只有post请求才会有)
响应信息有相应行,响应头,响应正文
响应行:响应协议,状态码,状态信息
响应 头:头名称和头值
响应正文
http 2.0采用二进制的格式传送数据,再也不使用文本格式传送数据
http2.0对消息头采用hpack压缩算法,http1.x的版本消息头带有大量的冗余消息
http2.0 采用多路复用,即用一个tcp链接处理全部的请求,真正意义上作到了并发请求,流还支持优先级和流量控制
http2.0支持server push,服务端能够主动把css,jsp文件主动推送到客户端,不须要客户端解析HTML,再发送请求,当客户端须要的时候,它已经在客户端了。
https至关于http加上安全套接字,采用ssl加密技术
主要的区别
上传视频的时候为何不用 Http 协议?
由于上传视频的时候文件通常比较长,若是咱们采用 post 请求的话,写到输出流中,它并不会直接写到服务器中,而是会缓存在内存中,会影响咱们的执行效率
中止等待机制:是指每发送完一个分组,就会中止发送,必须受到对这个分组的确认才会继续发送下一个分组
超时重传:是指每发送一个分组,就会为这个分组启动一个超时计数器,在规定的时间内没有受到确认,就会再次发送这个分组。
在连续ARQ协议中,为提升信道利用率,一般采起的作法是发送方维持一个发送窗口,凡是位于该窗口内的分组均可以发送出去,无需等待确认,在接收方是采用累积确认,即对按需到达的分组后一个分组发送确认,代表在这个分组之前的全部分组都已正确接收到
拥塞控制与流量控制
流量控制是一个端到端的过程,是值接收方限制发送方的速率不要太快,使接收方来得及接收;拥塞控制是一个全局的过程,是只不要向网络注入太多的数据,致使链路或者路由器损坏;
拥塞控制采用四种算法:慢开始和拥塞控制,快重传和快恢复
慢开始是cwnd(拥塞窗口)每次回从1开始,每通过一个往返时间,cwnd的值就会加倍;
拥塞避免是指每通过一个往返时间,cwnd的值会加一,是一个线性的过程。
慢开始和拥塞避免:会设置一个慢开始门限,当cwnd《sshreh的时候,会采用满开始算法,当超过这个值的时候,会采用拥塞避免的算法,当出现拥塞的时候,会把sshreh的值取为发送方窗口值当前的一半,再把cwnd取为1,从1开始使用满开始算法。
快重传和快恢复收到三个重复确认的时候,会把sshreh的值置为当前值的一半,与慢开始不一样的是,它会把拥塞窗口的值取为当前慢开始门限的一半,执行拥塞避免算法
快重传要求接收方没收到一段失序的报文段,就要向发送方发送一个确认
洪水攻击
向服务器端发送大量的伪TCP链接请求,这时候服务器端会进入syn_receive半链接状态,服务器端会尝试发送屡次包来确认,由于这些链接时假冒的,因此并不会完成第三次握手,致使服务器端保持大量的半链接状态,耗费资源,是TCP链接队列被塞满。
解决方法:
扫一扫,欢迎关注个人公众号 stormjun94。若是你有好的文章,也欢迎你的投稿。