上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;