Skip to content

Latest commit

 

History

History
42 lines (32 loc) · 3.57 KB

File metadata and controls

42 lines (32 loc) · 3.57 KB

对 HTTP 的理解

HTTP是基于TCP/IP协议的【应用层】协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式,是互联网信息交互中最常用的协议,用GET/POST/DELETE/PUT/PATCH来实现RESTFUL。

特点

  1. 简单快速。只需要传【请求方法】与【资源路径】就能确定资源
  2. 灵活,传输【任意类型】的数据
  3. 无连接,一般一次连接只处理一个请求,结束后主动释放连接,但可以使用keep-alive来复用相同的TCP连接发送多个请求
  4. 无状态,客户端向服务器发送HTTP请求之后,服务器会给我们发送数据过来,但不会记录任何信息。所以Cookie、Session产生了。

与WebSocket的区别

  1. 支持长连接。把WebSocket一个新协议,可以看成是在HTTP协议上打上一个【支持长连接】的补丁
  2. 支持服务器推送。HTTP协议是一个request只能有一个response。而且这个response也是被动的,不能主动发起。WebSocket可以让服务器主动推送
  3. 基于HTTP。WebSocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手

对 TCP 的理解

TCP是一种面向连接的、可靠的、基于字节流的【传输层】通信协议

面试题:三次握手、四次挥手

https://blog.csdn.net/qq_18425655/article/details/52163228

滑动窗口协议

滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。

ACK包含两个非常重要的信息:一是期望接收到的下一字节的序号n,该n代表接收方已经接收到了前n-1字节数据。二是当前的窗口大小m,如此发送方在接收到ACK包含的这两个数据后就可以计算出还可以发送多少字节的数据给对方,这就是滑动窗口控制流量的基本原理

TCP的滑动窗口是动态的,应用程序在需要(如内存不足)时,通过API通知TCP协议栈缩小TCP的接收窗口。然后TCP协议栈在下个段发送时包含新的窗口大小通知给对端,对端按通知的窗口来改变发送窗口,以此达到减缓发送速率的目的。

与UDP区别

  • TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输,如QQ
  • TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般
  • TCP对应的协议(FTP/SMTP/HTTP),UDP(DNS)

与其他层级协议关系

TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议

最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。
IP 协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。
IP 协议只是一个地址协议,并不保证数据包的完整。如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包。这就要依靠 TCP 协议。简单说,TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。

参考

http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html
https://www.zhihu.com/question/20215561
https://www.zhihu.com/question/32255109