【总结】TCP/IP抓包详解-----含2进制知识巩固

背景:

1 Byte = 8 Bits

1 KB = 1024 Bytes

1 MB = 1024 KB

1 GB = 1024 MB

在16位的系统中(比如8086微机) 1字 (word)= 2字节(byte)= 16(bit)

       在32位的系统中(比如win32) 1字(word)= 4字节(byte)=32(bit)

       在64位的系统中(比如win64)1字(word)= 8字节(byte)=64(bit)

bps 是 bits per second 的简称。一般数据机及网络通讯的传输速率都是以「bps」为单位。如56Kbps、100.0Mbps 等等。

Bps即是Byte per second 的简称。而电脑一般都以Bps 显示速度,如1Mbps 大约等同 128 KBps。

bit 电脑记忆体中最小的单位,在二进位电脑系统中,每一bit 可以代表0 或 1 的数位讯号。

Byte一个Byte由8 bits 所组成,可代表一个字元(A~Z)、数字(0~9)、或符号(,.?!%&+-*/),是记忆体储存资料的基本单位至於每个中文字则须要两Bytes。当记忆体容量过大时,位元组这个单位就不够用,因此就有千位元组的单位KB出现,以下乃个记忆体计算单位之间的相关性:

【总结】TCP/IP抓包详解-----含2进制知识巩固

如上16进制表示:数字符号“1”的ASCII码的十进制表示为“49” (一个字节8个bits,16进制表示的话为2位(因为16进制以2进制4位表示))

https://blog.csdn.net/leifukes/article/details/71480775

https://blog.csdn.net/xiongping_/article/details/47746953

IP属于网络层协议,TCP属于传输层协议,TCP数据包是包含在IP数据包中的。

IP协议

【总结】TCP/IP抓包详解-----含2进制知识巩固

【总结】TCP/IP抓包详解-----含2进制知识巩固来一个实际的tcpdump抓包,把十六进制打印出来

tcpdump -i bond0 port 2021 -X -s0


tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:46:47.765728 IP 192.168.72.215.51992 > jelly02.servexec: Flags [S], seq 2859784034, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 1135145917 ecr 0,sackOK,eol], length 0
0x0000:  4500 0040 0ab0 4000 3c06 5874 c0a8 48d7  [email protected]@.<.Xt..H.
0x0010:  0a0a c80a cb18 07e5 aa74 d762 0000 0000  .........t.b....
0x0020:  b002 ffff cf2d 0000 0204 05b4 0103 0305  .....-..........
0x0030:  0101 080a 43a8 f3bd 0000 0000 0402 0000  ....C...........

第一行:0x0000:4500 0040 0ab0 4000 3c06 5874 c0a8 48d7 
第一个字节分为两段,0-3 4个bit 代表ip协议(version),比如第一个字节的十六进制是45,4就代表ipv4,5就代表IP头部的(Source Address)了,也就是我的IP地址。长度,IHL一共有4bit,最大就是1111,那么IP头部的最大长度就是60字节。5代表的是20个字节。
第二个字节是服务类型(type of service),一般是0,表示一般服务,详细的暂不介绍。
第三个是2个字节的代表IP数据报文总长度, 0040 转换成10进制就是64个字节。每行16个字节一共4行 16*4 就是64个字节。
第四个是2个字节0ab0让目的主机判断属于那个分组。(先记住这么回事,如果用到再具体分析)
第五个是2个字节4000,转换为二进制就是“0100 0000”,其中第一位是IP协议目前没有用上的,为0。接着的是两个标志DF和MF。DF为1表示不要分段,MF为1
第六个是2个字节3c06,3c代表Ip数据流的生命周期,06代表的是传输协议(Protocol),在RFC790中标示TCP协议。
第七个是2个字节5874,代表16bit的头校验和(Header Checksum)
第八个是4个字节 c0a8 48d7  代表原地址(Source Address)。

第二行:0x0010: 0a0a c80a cb18 07e5 aa74 d762 0000 0000
第一个是4个字节 0a0a c80a 代表目的地址

到此为止IP协议的20个字节已经结束。

tcp协议

【总结】TCP/IP抓包详解-----含2进制知识巩固

【总结】TCP/IP抓包详解-----含2进制知识巩固
继续刚才第二行:0x0010: 0a0a c80a cb18 07e5 aa74 d762 0000 0000
第一个是2个字节 cb18 代表源地址的端口号,转换成十进制正好是51992,同理后面的07e5代表目的地址的端口号,转换成十进制就是2021
第二个是4个字节 aa74 d762 代表的是顺序号码(sequence Number)简写SEQ。
第三个是4个字节 0000 0000代表的是确认号码ACK。

第三行:0x0020:  b002 ffff cf2d 0000 0204 05b4 0103 0305 
第一个是2个字节b002 ,总共16bit,转换为二进制是"1011000000000010",含义很多,第一个4bit“1011”代表TCP的头长,十进制是11,代表44个字节。接着的6bit没有用到,后面6bit是标志位,代表ACK,SYN等。