姊妹篇:netstat

1.IP报头


  ipv4包头部:每行占用4字节(Option行及以下除外)。

  wKiom1iIjtODxXOSAACBeypnroI765.jpg


说明上面的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行及以下除外)。

  wKioL1iIm_mTh6mhAAAYAJCxEPU262.png


说明上面的tcp报文头部信息:

编号
占用空间(bit)
说明
1
16
源端口
2
16
目标端口
3
32
序列号(syn)
4
32

确认好(ack)
”接受到的序列号+1“

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_ackfin

Server发送fin,在接收到对端ack前,进入lask_ack状态。

Client收到fin后,进入close_wait。

4
closedack
closed

Server接收到ack后,进入closed。


Client发送ack后,等待两个传输时间片,进入closed。




wKioL1hwxGfStiPzAABm6i-XhL0678.jpg