TCP报文理解(方便以后查阅)

TCP协议规定了在不同主机间进行可靠数据流传输的通用方法,如 连接建立与释放、报文编号、收到数据报后的确认、流量控制、发送超时等等。靠死记硬背来学习这些东西,没过几天就又忘记了。我发现根据TCP报文格式来了解掌握这些知识,效果还是不错的。看到下面这张图(此图来源于网络),就能回忆起关于TCP协议的大部分东西:

tcp

(该图来源于网络)

Source Port,Destination Port:源端口号,目标端口号。IP实现了点到点的数据通信,而TCP实现的是端到端的通信。通信端用一个IP与端口号来唯一标识。(其实端口号就是用来标识同一主机中的不同进程。)IP协议负责将数据传输到目标主机,而TCP可以根据数据报中的端口号,将数据交给相应的程序进行处理。

Sequence Number:发送序列号。IP实现点到点的通信,这种通信是不可靠的。IP数据报可能会丢失或乱序到达目标主机,而TCP提供一种可靠的通信方式。它通过对发送的数据报进行编号(准确的说应该是对数据流进行编号)来实现可靠通信。如:应用程序发送2048个字节数据到目标主机,TCP协议首先将这些数据报打包成一个一个的数据报,然后对其进行编号。假设每个数据报携带的数据的长度是100个字节,第一个数据报的编号是1, 那么第二个数据报的编号就是101,第三个的编号是201,以此类推。

Acknowledgment Number: 确认序号。对于发送端来讲,这个序号表示下一个tcp报文的起始序号,对于接收端来讲,表示下一个希望接收到报文的序号。

Data Offset:该字段占用4个字节,用来表示报文首部的长度,单位是4byte。例如:0x05 表示 报文的首部长度是 5 * 4 = 20个字节。

Reserved:该字段占用6个字节,作为保留字段,暂时没有什么用处。

后面是六个标识位(uaprsf,记得每个单词的首字母):

  1. URG(ent): 如果该位置为1,表示该报文比较紧急,要赶紧传输。
  2. ACK:确认序号。跟上面的Acknowledgment Number有点关系。只有该位置为1时,Acknowledgment Number才有效。
  3. PSH:push,推。表示接收到接到报文后,要赶紧传递给应用层。
  4. RST: reset,重置连接。
  5. SYN: 同步。在创建连接的时候,用到该标识位。
  6. FIN:终止。在释放连接的时候,用到该标识位。

Window:滑动窗口的大小。用于通信双方的流量控制。为了保证通信的可靠性,TCP对报文进行编号,然后发送。接收到接到报文后,要向发送方进行确认。一般情况下,发送方不是在收到确认消息之后才发下一个报文,这些网络的利用率太低,而是在没有收到确认消息时,可以发送的数据是有个最大上限。

Checksum:对报文进行校验。如果校验失败,就丢弃该报文。

Urgent Pointer:智能针针。具体我还不清楚,网上一些资料的解释是:指向后面是优先数据的字节。

Options:选项。当前tcp只定义了一个选项:最大报文段长度。它用于告诉通信的另一方,当前协议框缓冲区所能接收到报文段的最大长度。

Padding:填充段。确保报文头的长度能为32整除。

此文章转自点击打开链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值