TCP/IP数据包首部解析

TCP/IP数据包首部解析

从头开始学计网,记录一下笔记
** 参考:《图解TCP/IP》**
TCP/IP数据包首部解析_第1张图片
TCP数据包结构:
TCP/IP数据包首部解析_第2张图片
1-1.源始端口,16位,范围当然是0-65535啦。
1-2.目的端口,同上。
2-1.序列号:字段长32位,指发送数据的位置,TCP为发送的每个字节都编一个号码,这里存储当前数据包数据第一个字节的序号。每发送一次数据,就累加一次该数据字节数的大小。
序列号不会从0或1开始,会从随机数开始循环增加。(建立和断开连接的SYN与FIN包不携带数据,但也会作为字节增加序列号)
3-1.确认应答号:TCP告诉接受者希望他下次接到数据包的第一个字节的序号,可以认为在这个序号前的数据已正常接收。
4-1.数据偏移:4位,该字段表示TCP数据部分从包的那个部分开始(TCP包首部的长度)。字段长度单位为32位(4字节),最多表示16*32位。
比如TCP首部20字节,5个32位,偏移为5,0101
4-2.保留:一般为0,常被无视。
4-3.控制位:8位
1)CWR、ECE,与IP首部的ECN字段对应,ECE标志为1,则通知对方网络拥塞,已将拥塞窗口缩小。
2)URG:urgent flag,置1是表示数据需要紧急处置
3)ACK:acknowledgement flag,置1时,确认应答字段有效,除了建立连接的SYN包之外均应置1
4)PSH:push flag,置1时,应立刻传给上层应用协议,PSH置0时,并不需要立刻传而是先缓存
5)RST:reset flag,置1时表示TCP连接出现异常必须紧急断开连接。
6)SYN:synchronize flag,用于建立连接,并在其序列号字段进行序列号初始值设置
7)FIN:finish flag,置1时希望断开连接。
4-4.窗口字段:16位,窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
5-1.校验和:16位,包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
TCP/IP数据包首部解析_第3张图片
5-2.紧急指针:16位,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
6-1.可选选项:24位,类似IP,是可选选项。
6-2.填充:8位,使选项凑足32位。
7-1.用户数据

可以看出,每个IP包至少要20字节的头部长度,这些与下载内容无关,加上目前多数传输,包括http协议(就是IE直接下载),都是基于TCP协议的,所以IP包裹还要从用户数据中扣除20字节的TCP包头,这里已经是40字节了。

你可能感兴趣的:(TCP/IP数据包首部解析)