目录
一、何为TCP协议
TCP协议,大名叫:传输控制协议。看名字就知道,它是负责对数据报文的传输进行一定控制作用的。简单看看它工作的地方:
由图可知,它和它的好哥们UDP工作在运输层(也称传输层)。这一层当然是至关重要的,所谓运输层,它主要是提供端到端的接口,为它上面的应用层提供通信服务,属于是面向通信的最高部分。当我们网络中两台边缘主机要进行通信时,必须就要用到TCP/IP协议栈的运输层。关于传输层的知识其它文章会详细讲解,这里就不再过多的赘述了。
二、对于TCP协议来说,UDP它与UDP协议不同之处在于:
1、TCP提供的是面向连接的服务。
何为面向连接的服务?面向连接的服务与无连接的服务区别就在于进行通信前是否需要提前建立好连接。对于TCP协议来说,既然它属于是面向连接的服务,所以使用TCP协议进行通信前,就必须要事先建立好连接,在传输完成之后,还要释放所建立的连接。这就好比应用进程之间的通信好像是在“打电话”,通话之前需要先拨号,建立通话连接;通话结束后,挂断电话,所连接的通信链路就被断开。
2、提供的是全双工通信。
全双工通信,就是指通信的任意一端既可以接收数据,也可以发送数据,且允许同时进行。这一点是十分重要的,就好比我们打电话,要是只允许电话两头的人都只能听完再说,或者说完再听,这岂不是很难受……所以TCP协议就很好的满足了这一点,它在建立连接的两端都设置有发送缓存和接收缓存,作用就是临时存放双向通信的数据。接收端所受到的数据都要先放在接收缓存,所以上层应用进程也是对缓存中的数据进行读取。但是设置缓存的好处并不止这一点,可以思考还有什么作用?
3、面向字节流。
“字节”都能理解,“流”是啥子?所谓“流”,就是指流入到进程或进程流出的字节序列。对于我们的TCP协议来说,应用进程给到它的数据是一块一块的,但是我TCP只负责百分百将所有数据完好的送到对面进程,并不会管数据到底有几块,而是把所有数据看成一连串的无结构的字节流,然后给每个字节打上序列号,再送走。
4、提供可靠的交付。
可靠的交付,是TCP相对于UDP协议来说,最大的一个优势。所谓可靠的交付,就是通过TCP协议控制的数据报文传输,整个过程是无差错、不丢失、不重复的、并且按序到达的。
TCP与UDP的其它不同之处见下图:
既然我们看到TCP相对于UDP的优点这么多,那么都是怎样实现的呢?实际上,TCP协议的全部功能,都体现在它的首部各个字段的作用上,所以接下来就来研究TCP报文的首部字段是怎么回事。
注意看这是UDP的首部报文格式:
再对比TCP的首部报文格式:
可以明显看出,TCP协议的首部报文明显比UDP协议字段格式要复杂得多,这也正是为什么TCP协议能够做到UDP协议做不到的很多功能。
三、TCP首部各个字段的作用分别是什么
1、源端口和目的端口:这两个字段分别占了2个字节。顾名思义,就是标记了报文发送方以及接收方的这条TCP通信端口。
2、序号:序号字段占4个字节。因为TCP是面向字节流的,所以在一个TCP连接中传送的字节流中的每一个字节都要按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置。且首部中的序号字段值是指的是本报文段所发送的数据的第一个字节的序号,比如说一段序列号为100的报文,它一次传输200字节的数据,则它的下一次报文的序号就应该等于400。
3、确认号:同样也是占了4个字节。确认号顾名思义也就是对收到的报文进确认,它主要是让通信对方知道自己对哪一个报文进行的确认,所以通过序号来区别。但是它的数值并不是确认的那段报文的序列号,而是返回的是期望下一次