互联网由一整套协议构成。

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

  • 最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部(同一个局域网内)的点对点通信。

  • IP协议解决了多个局域网之间是如何互通的;IP协议是一个地址协议,并不保证数据包的完整性。

  • TCP协议的作用是保证数据通信的完整性和可靠性,防止丢包。

  • HTTP协议主要规定客户端与服务器端数据通信格式。

TCP数据包的大小

以太网数据包的大小是个固定的,最初是1518字节(差不多是1.5kb),后来增加到1522字节,其中1500字节是负载(payload),22字节是头信息(head)。

而TCP数据包的最大负载是1480 - 20 = 1460字节,由于IP和TCP协议往往有额外的头信息,所以TCP负载实际为1400字节左右

http/2协议对此作了很大的改进,就是压缩http协议的头信息,使得一个http请求可以放在一个TCP数据包里面,而不是多个,这样就提高了速度

TCP数据包的编号

编号是为了方便接收方按顺序还原,以及丢包时能及时知道丢的是哪一个包。

每个包都应该有两个编号,一个是自身的编号,一个是它的下一个包的编号。

TCP数据包的组装

收到TCP数据包以后,组装还原是操作系统完成的,应用程序不会直接处理TCP数据包。

操作系统处理TCP数据包

TCP协议没有提供任何机制标识原始文件的大小,这由应用层的协议来规定,http协议就有个头信息(content-length),表示信息体的大小

慢启动和ACK

传输数据当然是越快越好,但是发送方并不知道接收方的接收速度,一开始就快速发送就可能会导致大量丢包,所以TCP协议就设计了一个慢启动的传输方式。

慢启动

ACK——acknowledgment;确认

默认情况下,接收方每收到两个TCP数据包,就要发送一个确认消息(ACK);

ACK携带两个信息:

  1. 期待要收到的下一个数据包的编号;
  2. 接收方的接收窗口的剩余容量。

每个数据包都有下一个数据包的编号,如果下一个数据包没有收到,接收方会一直记录着该编号,并期待该包重新发送,当接收方记录了3次,并通知了发送方时,就会确认丢包,从而再次发送这个包。


TCP协议

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

koa-compose源码解析笔记 上一篇
前端安全--如何防止XSS攻击 下一篇