龙空技术网

TCP报文段各字段作用详解(为讲述Linux防火墙iptables铺垫)

生郡先生 1533

前言:

此刻咱们对“tcp数据字段最大”大约比较看重,兄弟们都想要剖析一些“tcp数据字段最大”的相关知识。那么小编在网上搜集了一些关于“tcp数据字段最大””的相关文章,希望姐妹们能喜欢,我们快快来了解一下吧!

本文主要讨论TCP报文的格式以及字段解释,下图是本文的脉络架构,各位可以在读文章之前先读一下该大纲,可以大概了解本文的主旨,节省大家时间,方便大家回顾。

前两天和大家讨论centOS的一些基础知识,包括基于VMware workstation安装centOS虚拟机,然后还给大家讲述了一下如何SSH远程连接该centOS虚拟机。

不知道大家还记不记得在我们在开启了服务器上22端口的sshd服务之后,仍然还是连接不上,当时我们是关闭了centOS的防火墙(简单粗暴)才解决了这个问题的!还有映象吗?本来今天想给大家讲述一下netfilter/iptables的,后来想想,要深刻理解netfilter/iptables,还是要搞清楚TCP,IP以及链路层的数据包结构。所以我们进从TCP数据包开始,深刻理解TCP数据包,为后面讨论centOS的netfilter/iptables防火墙打好基础。

1. TCP报文格式

在前面的文章中其实也或多或少的涉及了,只不过没有深入讨论。今天我们来深入的讨论一下(挨个来讨论一下TCP报文的字段)。

a) 16位源端口号

这个就是数据发送端的端口号。32位(4个字节),不多解释了。

b) 16位目的端口号

目的端口号,也是32位(4个字节),不多解释了。

c) 32位序列号

占4个字节,是本报文段所发送的数据项目组第一个字节的序号。

d) 32位确认序列号

占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;

如果我只是像上面一样来用一种晦涩的语言说明《32位序列号》和《32位确认序列号》的话,那你就不了解我了。我这边用简单易懂的语言来说明一下32位序列号和32位确认序列号到底是什么意思~

大家都知道,TCP是面向字节流的,什么叫面向字节流呢?就是TCP在传输的时候会给传输的每个字节要编号。

举个栗子:

TCP要从A主机传送10KB的字节到B主机,那么10KB一共是(10*1024=10240)B。那么TCP会给他编号(第一个字节编号为0,第二个字节为1,第三个字节编号为2,……,一直到最后一个字节的编号为10239)。

好了,现在我们假设A主机传输B主机一次最多只能传送4KB数据(具体的一次能传输多少可以通过报文字段中的(16位窗口大小)来计算得到,具体详细原理,在此暂不表)。

那么按照定义:

32位序号(seq)占4个字节,是本报文段所发送的数据项目组第一个字节的序号。

32位确认序号(ack)占4个字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号

1. 第一次A发送TCP数据包给B的时候,他的第一个TCP包的seq就为0(第一个包大小为4K,一共4096个字节,所以该包的第一个字节编号为0,最后一个字节编号为4095)。

2. 当B收到该报文之后,会做校验和检查(后续主题),检查看TCP报文一致性(是否被修改),在该确认报文中,32位确认序号ack=4096(服务端希望下一次收到的包的seq=4096,因为第一个包的(0~4095)已经发送完毕,自然服务器希望下一个包的seq为4096)

3. 当A收到B的确认报文之后,A会继续发送第二个包,第二个包的seq=4096(即第二个4K数据的第一个自己开始编码)

因为序号字段(seq)有32比特长,可以对2的32次方=4GB的数据进行编号,如许就可包管当序号反复应用时,旧序号的数据早已在收集中消散了;

啰里啰嗦讲了一大堆,不知道你们有没有看明白。没有明白?那没关系,请继续关注该头条号,明天我将结合Wireshark截取的网络中真实的TCP报文来配合分析。

e) 4位首部长度

4位首部长度?啥东东? 这个其实就是指代的该TCP报文头总长度。书上是这么说的"指示数据开端的处离TCP报文段的开始处有多远",所以你可以理解为TCP报文头的偏移量(offset),这里注意一下:一个偏移量大小是4B(4个字节)。

举个栗子:

某一个TCP报文的"4位首部长度"为0111,所以该TCP报文头的长度为7*4=28B(即28个字节)。

所以变向的,你就知道:TCP报文头的长度是有限制的,他的最大长度只能是60B(即60个字节),根据上面的描述,你能知道这60个字节是怎么算出来的吗?欢迎在评论区留下你的演算。

由于篇幅有限,明日再介绍TCP报文中的其他字段(6位标志位(URG,SYN,FIN,等),16位窗口大小,校验和等等)

每日学习一点点,每天进步一点点,欢迎各位关注本头条号,一起徜徉在IT的技术海洋,为自己未来的生活打CALL。

标签: #tcp数据字段最大