tcp协议是tcp/ip协议族的重要成员,相比于ip协议;TCP协议更靠近应用层;可操作性根强,一些重要的socket都和tcp协议有关;

本文将从以下四个方面去介绍tcp协议:

【1】tcp头部信息:tcp头部信息出现在每一个tcp报文段中,用于确定通信的源端口号,目的端口号,管理tcp链接,控制两个方向的数据流;

【2】tcp状态转移过程:tcp连接的任意一端都是状态机。在tcp连接从建立连接到断开连接的整个过程中,连接两端的状态机将经历不同的状态变迁;理解tcp状态转移对于调试网络应用程序将有很大的帮助;

【3】tcp数据流:通过分析数据流,我们就可以从网络应用程序外部来了解应用层协议和通信双方交换的应用数据。这一部分将讨论两种类型的tcp数据流:交互数据流和成块数据流。tcp数据流中有一种特殊的数据,称为紧急数据。我们也将简单讨论之;

【4】tcp数据流的控制:为了保证可靠传输和提高网络通信质量,内核需要对tcp数据流进行控制。这一部分讨论tcp数据流控制的两个方面:超时重传和拥塞控制。

  不过详细介绍tcp协议之前,我们先了解一下tcp服务的特点,以及他和udp服务的区别;

         tcp服务的特点

  传输层协议主要有两个:tcp协议和udp协议tcp相对于udp的特点是:面向连接的,字节流的,可靠传输;

  使用tcp协议通信的双方必须建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上的数据传输。tcp连接是全双工的,即双方的数据读写可以通过一个连接进行;完成通讯后,通信双方必须要断开连接以释放资源;

  tcp协议这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用tcp服务;而无需连接的udp协议这非常适用于广播和多播。

  

注:数据字节流和数据报流的区别:

  字节流:应用程序对数据的发送和接收没有边界限制;

  数据报:发送一次必须要接收一次,否者就会丢包,若接收缓存区的大小不够数据报的大小,则会数据报截断,未接收的数据报丢失;

  tcp协议可靠传输的原因:

  首先tcp采用发送应答机制,发送端发送的每一个报文段都必须得到接收方的回答,才认为这个tcp报文段传输成功;其次tcp协议采用超时重传机制,发送端,发送端在发送一个tcp报文段之后会启东定时器,如果在规定时间内未收到应答,他将重发该报文段;最后,因为tcp报文段最终是以ip数据报发送的,而ip数据报到待接收端可能乱序,重复,所以tcp协议还会对接收到的tcp报文段重排,整理,在交付给应用层;

  udp协议则和ip协议一样,提供不可靠服务,他们都需要上层协议来处理数据确认和超时重传;