Visual C++ 2017网络编程实战
上QQ阅读APP看书,第一时间看更新

1.4 传输层

传输层为应用层提供会话和数据报通信服务。传输层最重要的两个协议是TCP和UDP。TCP协议提供一对一、面向连接的可靠通信服务,它能建立连接,对发送的数据包进行排序和确认,并恢复在传输过程中丢失的数据包。与TCP不同,UDP协议提供一对一或一对多、无连接的不可靠通信服务。

1.4.1 TCP协议

TCP(Transmission Control Protocol,传输控制协议)是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)的传输层协议。TCP协议会给应用层数据加上一个TCP头,组成TCP报文。TCP报文首部(TCP头)的格式如图1-6所示。

图1-6

如果用C语言来定义,可以这样写:

    typedef struct _TCP_HEADER        //TCP头定义,共 20个字节
    {
     short  sSourPort;                // 源端口号 16bit
     short  sDestPort;                // 目的端口号 16bit
     unsigned int  uiSequNum;         // 序列号 32bit
     unsigned int  uiAcknowledgeNum;  // 确认号 32bit
     short  sHeaderLenAndFlag;        // 前 4位:TCP头长度;中 6位:保留;后 6位:标志位
     short  sWindowSize;              // 窗口大小 16bit
     short  sCheckSum;                // 检验和 16bit
     short  surgentPointer;           // 紧急数据偏移量 16bit
    }TCP_HEADER, *PTCP_HEADER;

1.4.2 UDP协议

UDP(User Datagram Protocol,用户数据报协议)是无连接、不保证可靠的传输层协议。它的协议头相对比较简单,如图1-7所示。

图1-7

如果用C语言来定义,可以这样写:

    typedef struct _UDP_HEADER           // UDP头定义,共8个字节
    {
     unsigned short m_usSourPort;        // 源端口号16bit
     unsigned short m_usDestPort;        // 目的端口号16bit
     unsigned short m_usLength;          // 数据包长度16bit
     unsigned short m_usCheckSum;        // 校验和16bit
    }UDP_HEADER, *PUDP_HEADER;