才子佳人博客

我的故事我讲述

TCP的封装和协议头的格式
###SmallArticleTitle###
来源:xjh;  编辑:xjh;  2017-10-08

一、TCP三个特性

TCP是一个面向连接的(connection-oriented)、可靠的(reliable)、字节流式(byte stream)传输协议,  TCP的这三个特性该怎么理解呢?

面向连接:在应用TCP协议进行通信之前双方通常需要通过三次握手来建立TCP连接,连接建立后才能进行正常的数据传输,因此广播和多播不会承载在TCP协议上。

可靠性:由于TCP处于IP层之上,而IP层并不提供可靠的传输,因此在TCP层需要解决可靠性问题。而传输错误包涵四种常见问题,分别是比特错误(packet bit errors)、包乱序(packet reordering)、包重复(packet duplication)、丢包(packet erasure或称为packet drops),TCP要提供可靠的传输,就需要有额外的机制处理这几种错误。

因此,可靠性体现在三个方面,首先TCP通过超时重传和确认机制来保证数据包的正确传输,也就是说接收端在没有收到数据包或者收到错误的数据包的时候会触发发送端的数据包重传(处理比特错误和丢包)。其次TCP接收端会缓存接收到的乱序到达数据,重排序后在向应用层提供有序的数据(处理包乱序)。最后TCP发送端会维持一个发送"窗口"动态的调整发送速率以适应接收端缓存限制和网络拥塞情况,避免了网络拥塞或者接收端缓存满而大量丢包。因此可靠性需要TCP协议具有确认、超时与重传、窗口管理、流量控制、拥塞控制等功能。

字节流式:应用层发送的数据会在TCP的发送端缓存起来,统一分片或者打包发送,到接收端的时候接收端也是直接按照字节流将数据传递给应用层。作为对比,同样是传输层的协议,UDP并不会对应用层的数据包进行打包和分片的操作,一般一个应用层的数据包就对应一个UDP包。

二、TCP的封装和协议头的格式

TCP封装在IP报文中的时候,如下图所示,TCP头紧接着IP头,不携带选项(option)的TCP头长为20bytes,携带选项的TCP头最长可到60bytes。


 

TCP头部结构

typedef struct _TCP_HEADER
{
short m_sSourPort;       // 源端口号16bit
short m_sDestPort;        // 目的端口号16bit
unsigned int m_uiSequNum;   // 序列号32bit
unsigned int m_uiAcknowledgeNum; // 确认号32bit
short m_sHeaderLenAndFlag;   // 前4位:TCP头长度;中6位:保留;后6位:标志位
short m_sWindowSize;      // 窗口大小16bit
short m_sCheckSum;       // 检验和16bit
short m_surgentPointer;      // 紧急数据偏移量16bit
}attribute((packed))TCP_HEADER, *PTCP_HEADER;

16位源端口:告知主机该报文段来自哪。

16位目标端口:传给哪个上层协议或者应用程序。

客户端通常使用系统自动选择的临时端口号,服务器使用知名的服务器端口号。

32位序号:由于TCP协议是面向字节流的,它所传送的报文段视为连续的字节流,为保证传输的可靠性,需要为发送的每个字节编好顺序号,故每一个包中都包含一个序号,其数值表示该报文段数据部分第一个字节的序号。

32位确认号:目的主机返回确认号,使源主机知道某个或几个报文段已被接收,由于TCP是全双工模式,故不必专门发送确认报文段,而采用传送数据时捎带确认的方法提高传输效率。

4位头部长度:指示TCP BODY 数据何处开始,TCP头部长度是以4B为一个单位计算,实际报头长度是20~60B,故有4位表示足以,15*4=60B。

16位窗口大小:长度为16位,指定了从最后被确认的字节算起可以发送多少个字节。

16位校验和:长度为16位,2个字节,由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。

16位紧急指针:长度为16位,2个字节,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。

来源参考:
http://blog.csdn.net/qq_34501940/article/details/51073691
http://www.cnblogs.com/lshs/p/6038458.html

分类:网络日志 | 评论数:0 | 浏览数:208
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: