聊聊TCP协议-------协议头详解

最近工作不是特别忙,又开始学习一些东西,之前因为对netstat命令显示的tcp状态不是很了解,加上之前看了一下tcp/ip那本黑色的书,准备整理一下tcp的相关内容。


聊聊TCP协议-------协议头详解_第1张图片

首先看一下tcp header 的内容,大概有这么几个字段

source port: 2字节,也就是16位,表明发送端的端口号

destination port:2字节,16位,标示接收端的端口号

tcp作为一个端到端的协议,只需要关注端口号,是不需要关注具体ip的,IP地址封装在ip层,这点也是我觉得tcp/ip协议栈的美妙之处,一层包含着一层,将整个网络抽象的非常好,以致应用层不需要太关心底层协议。

sequence no:表示tcp数据中第一个数据字节的编号

acknowledgment no: 表示对上次收到包的确认,和下次期待收到的包。

offset: 4bit,tcp头的的大小,单位是4字节。这个最小为5 ,就是不包含任何数据和tcp option的大小。

reserve:6 bit 保留字段,现在没用

tcp flags: tcp 控制位 6 bit,从左到右分别是:

    URG:  紧急标示位,同urgent pointer一块使用,标示从sequence no 指示的位置偏移urgent pointer 位 为紧急内容,之后是正常内容
    ACK:  表示是确认包
    PSH:  表明不是用tcp缓存,尽快把包给应用层

    RST:  tcp 复位标识,用于异常终止连接,或者检测半打开

    SYN:  Synchronize sequence numbers 同步序号,用于tcp建立

    FIN:  No more data from sender 表示没有数据需要发送


window: 2字节 发送者期望接收的字节流的大小,用于滑动窗口协议

checksum: 2字节 tcp头和tcp数据段的校验和

urgent pointer: 2字节 和control flag的urg 一块使用,表示紧急数据的偏移量,计算方式是sequence no + urgent pointer

tcp options: 多个字节,不太常用,要结合具体指令来看

Padding:填充,主要用来保证tcp头部是4字节的整数倍 ,对应offset


你可能感兴趣的:(linux)