简单了解TCP
众所周知的是,TCP运行于OSI模型中的传输层,是一种面向连接的,可靠的,基于字节流的单播协议。
发送数据之前,通信双方需要先建立连接。所谓"连接",就是指C/S双方将IP地址、端口号等信息,保存在内存中。
为什么说TCP是一种可靠的传输协议呢?
-
将数据切割为合理的长度。
TCP将上三层的数据分割称最适合发送的数据段。这个和UDP完全不同,UDP将整个数据报发送。 -
确认应答。
序列号:TCP为每个字节都进行了编号。 确认号:每一个ACK都带有对应的确认序列号,告诉对端收到哪些数据。
-
超时重传。
主机A向主机B发送数据,主机B可能由于网络拥堵的原因无法向主机A发送确认信息。
这样主机A在一个时间间隔内没有收到确认应答,就会重发数据。
最后,主机B会收到很多重复的数据,TCP协议有去重的功能,将重复的数据丢弃。"去重",通过使用序列号来达到去重的效果。
-
对首部和数据进行校验。
TCP采用CRC(循环冗余校验),对数据报首部和数据进行校验。如果接收端检验和有差错,TCP将丢弃该报文并不确认改报文段。 -
对错序的数据段重新排序交由应用层。
由于超时重传或者网络波动可能会造成数据报到达失序。TCP可以对收到的数据进行重新排序,再交由给应用层。 -
滑动窗口。
流量控制,提高传输效率。发送方根据缓冲区的大小决定窗口的大小,当收到接收方的对数据段的确认应答时候,窗口就会往后移动。
TCP报文
-
源端口:2个字节,存储发送的端口号。
-
目的端口:2个字节,记录接受发的端口号
-
序列号:4个字节,TCP为每个字节的数据进行了编号。
-
确认号:4个字节,每个ACK都有对应的确认序列号。用来告诉发送方收到信息。
-
数据偏移:4bits,属于可选项。4位首部长度表示最大为1111,转为10进制为15,包头的最大长度为60字节。
-
保留位:为将来定义新的用途保留,现在一般置0。 控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。
1.URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。 2.ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。 3.PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。 4.RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。 5.SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。 6.FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
-
窗口:来表明华东窗口的大小,告知发送端接收端的缓冲区大小。
-
校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。