姊妹篇:netstat
1.IP报头
ipv4包头部:每行占用4字节(Option行及以下除外)。
说明上面的ipv4报文头部信息:
编号 | 占用空间(bit) | 说明 |
---|---|---|
1 | 4 | ip报文版本号(ipv4、ipv6) |
2 | 4 | 该包头部长度,多少个4字节(N*4) |
3 | 8 | TOS,服务类型 |
4 | 16 | 0~65535,ip包总长度 |
5 | 16 | 分段标记(传输层拆分后统一的标记) |
6 | 3 | R - DF - 不允许分片(don't fragment) MF - 允许分片(more fragment) |
7 | 13 | 分段偏移量(传输层拆分后的排序) |
8 | 8 | TTL,0~255,生存周期(规避环路) |
9 | 8 | 内层报文协议 |
10 | 16 | 头部校验位 |
11 | 32 | 源ip |
12 | 32 | 目标ip |
13 | 变长 (≤40字节) | 填充位 |
14 | 传输层封包 | 内层报文 |
2.TCP报头
tcp包头部:每行占用4字节(Option行及以下除外)。
说明上面的tcp报文头部信息:
编号 | 占用空间(bit) | 说明 |
---|---|---|
1 | 16 | 源端口 |
2 | 16 | 目标端口 |
3 | 32 | 序列号(syn) |
4 | 32 | 确认好(ack) |
5 | 4 | 头部长度 |
6 | 6 | TCP包标志位: URG - 紧急指针 1表示,有效;0,无效 ACK - 确认号是否有效 PSH - 推送 内核优先处理 RST - 重置(reset) SYN - 同步请求 FIN - 断开连接标志 |
7 | 16 | 窗口大小 |
8 | 16 | tcp包校验和 |
3.TCP连接的三次握手
次数 | 进入状态 | 发送报文 | 进入状态 | 发送报文 | 说明 |
---|---|---|---|---|---|
Client | Server | Server端先开始监听 | |||
closed | closed | Server端被动打开端口监听 | |||
1 | syn_sent | syn=1 ack=0 | listen | 响应请求不会关闭监听,会重新打开一个进程响应客户请求(ack)。 | |
2 | syn_scvd | syn=1 ack=1 | 接收到Client请求后进入“syn_scvd”,服务端发送响应报文(ack+syn)。 Server's ack is Client's syn. | ||
3 | established | syn=2 ack=1 | established | Client收到Server's ack就进入established状态。 Server收到确认报文(ack)进入established状态。 Client's syn is its' syn add 1. |
4.TCP断开的四次握手
次数 | 进入状态 | 发送报文 | 进入状态 | 发送报文 | 说明 |
---|---|---|---|---|---|
Client | Server | ||||
1 | time_wait1 | fin | Client发送fin后进入fin_wait1状态。 | ||
2 | time_wait2 | close_wait | ack | Server发送ack确认后,进入close_wait状态。 Client接收到ack后,进入time_wait2。 | |
3 | close_wait | lask_ack | fin | Server发送fin,在接收到对端ack前,进入lask_ack状态。 Client收到fin后,进入close_wait。 | |
4 | closed | ack | closed | Server接收到ack后,进入closed。
|