上次给大家介绍了IP协议,以及IP协议的两个特点:无连接和不可靠,之前既然介绍了TCP/IP协议,那今天咱们就讲一下TCP是什么他和IP有什么关系,TCP实际上是建立在IP协议不可靠无连接的基础上的一个可靠的协议。现在主流服务器都是采用的TCP协议。

  首先,TCP是如何利用IP来创建自己可靠的链接呢,第一,TCP先将要传输的应用数据分割成合适的数据块,每当TCP传输数据的时候他都会建立一个计时器,然后开始不断的计算时间,当一个TCP收到数据之后他会计算我收到信息的时间,TCP还会计算数据的首部和尾部的校验和,这样就能检验我传来的数据是不是出现了问题,甚至TCP还在传输过程中进行了流量控制,他的意思就是说我现在A计算机要和B计算机进行信息传输,在传输前两个计算机会提前开辟一定的空间来存放这些数据,那这样做有什么好处呢?这样就防止我A计算机发送了很多数据,但是B不能及时接受,这样就防止A计算机不断的传输数据是B计算机的内存被占用过多而不能提供服务。但是这是建立在一个君子协议之上的,传输时B会提供A一个他自己的大小,A就会根据B所提供的大小来传输数据,但是当出现恶意程序的时候怎么办?有人故意使你的服务器出现问题。这时候我们刚刚所介绍的计时器就起到了用场,如果A传输给B数据之后B计算机长时间没有进行确认,那A就会认为B刚刚没有收到,会再次发送数据,这样会反复几次,如果B还没有收到,这样就会给程序返回一个问题,就好像我们在玩游戏的时候出现卡顿的情况,软件就会返回错误信息,比如和服务器断开连接等等,这时候就是我们的定时器起到了作用。

  TCP也有他的特点TCP在传输数据的时候会对数据进行封装,发送到另一个应用程序他不知道你所传输的数据是什么,只认为你传输的数据就是字节流,不会对这些字节进行修饰和更改。例如你先发送十个字节,又发送了二十个字节,然后又发送了三十个字节,但是接受的时候他并不知道你怎么发送的,很有可能你分批次的发送的数据对方可能一次就收到了。IP这层协议是无连接不可靠的,他很有可能在传输过程中会出现重复了,或者顺序乱了,这种情况下TCP会在它这一层进行处理。所以一旦数据传输给应用程序的时候那他的信息一定是正确的,但是这些是有代价的,一般情况下TCP的程序相对其他来说会相对慢那么一点点,不过除非是实时性非常高的程序才会有影响其他情况下情况很少。相比来说TCP还是非常好的一个选择。

上次我们简单的介绍了一下IP层的头部,今天给大家再简单介绍一下TCP部分的头部是如何组成的

C++ 服务器 四 TCP详解一

TCP一般来说和IP的大小是一样的也是20个字节。之前就介绍了在网络上传输都是以大端来传输的,这里也是。Source port是我们发送数据的端口号,后边的destination是我们目的地的端口号,接下来的四个字节是Sequence number TCP在发送的时候会将数据拆分为数据块,就是通过这个位置来对数据进行区分和标记。再往下是acknowledgement number是用来进行消息确认过程中使用的,之后会进行详细的讲解。Checksum就是我们上边所说到的校验和,用来对数据进行检查,之后的几个这里就不进行特别详细的讲解了,之后会单独讲解。我们从第十二个字节开始 data offst就是说我们的数据长度reserved是为了以后的扩展所使用的,目前还没有任何作用。从CWR这三个开始连续的几个都是一些标志位,每个标志位都代表着不同的属性,之后会有详细的介绍。后边的windows size就是我们上边说到的A.B的君子协议,来确定每次发送数据的大小的。

相关文章: