系列文章
TCP详解(三):TCP流量控制——Flow Control
TCP详解(四):TCP拥堵控制——Congestion Control
本篇目录
什么是TCP
两台电脑进行数据交换需要遵循协议,就像两个人之间对话一样,只有遵循同一协议的双方才能正常交流,一方说德语,而一方说意大利语,是无法顺利沟通的。
数据在互联网中的流动需要多种协议携手完成,就像编程语言与计算机之间的“沟通协议”一样,程序员不会直接通过机器语言与计算机交流,而是通过:高级编程语言→汇编语言→机器语言。因为高级编程语言更接近自然语言,能降低编程的复杂度,提高生产效率。
互联网数据交换也是通过层层协议累加处理,以http/https应用程序为例,协议分层如下:
其中传输层的作用是:
- 将数据分割成块(称为segment)以及在到达目的地后重组数据。
- 数据流量大小控制及错误控制
TCP协议属于传输层(Transport Layer)协议的一种,全称Transmission Control Protocol。
TCP数据包
TCP数据包称为segment,由header和data组成,data部分是真正传输的数据,header部分存储控制信息。
- source port : 发送方的端口号(标识发送方程序),代表数据从某终端的哪个端口发出的。
- destination port : 接收方端口号(标识接收方程序),代表数据将到达某终端的哪个端口。
- seq(sequence number): 数据编号,TCP为待传输数据的每一个字节编号,起始编号为一个随机数,后续编号依次加1,一个TCP数据包包含多个字节的数据,那么这个数据包的编号就是最后一个字节的编号,假设上一个数据包的编号是100,下一个数据包的大小是50字节,那么下一个数据包的编号(sequence number)是100 + 50 = 150。
- ack(acknowledge number): 确认号,当收到对方的数据包时,发一个特殊的确认数据包,确认编号为已收到的收据包的序号加1。比如在收到了一个seq = 150 的数据包后,回复对方一个确认包,ack = 150 + 1 = 151。含义是,我已经成功收到了编号为150及其以前的数据,请发我seq = 151及以后的数据。
- window size : 数据窗口大小,用来控制数据流量,在接收方回发的ack确认包中会制定该字段,表示目前接收方能够连续接受的数据量的最大值。
- check sum : 校验和,数据指纹,用来标志数据包,用来确保数据的完整性和正确性。
- flags
- SYN : synchronization,TCP连接控制标志位,当为1时,表示该数据包用来向对方表达连接请求的特殊包。
- ACK :acknowledge,确认标志位,当为1时,表示该数据包用来确认对方已发来的数据包,既可以是连接请求的确认答复,也可以是普通数据的确认答复。
- FIN :finish,TCP连接控制标志位,当为1时,表示该数据包用来向对方表达断开连接请求的特殊包。