Abel'Blog

我干了什么?究竟拿了时间换了什么?

0%

TCP

概述

记录TCP相关的知识。包含三次握手,四次挥手。使用tcpdump来观察这些流程的细节。

network layer

概念

在理论设计的时候是按照层来设计的。每层都接受它的下层提供的特定服务,并且负责为自己上层提供特定服务。上下层之间的交互叫做“接口”,同一层之间交互遵循的是“协议”。

TCP

TCP报文数据结构
1
2
3
4
5
6
7
8
9
10
11
12
0                            15                              31
-----------------------------------------------------------------
| source port | destination port |
-----------------------------------------------------------------
| sequence number |
-----------------------------------------------------------------
| acknowledgment number |
-----------------------------------------------------------------
| HL | rsvd |C|E|U|A|P|R|S|F| window size |
-----------------------------------------------------------------
| TCP checksum | urgent pointer |
-----------------------------------------------------------------

其中有一部分是协议Flags位。

1
2
3
4
5
6
7
|                 |
| --------------- |
| C | E | U | A | P | R | S | F |
| --------------- |
| 7 5 3 0 |

CWR | ECE | URG | ACK | PSH | RST | SYN | FIN

CWR: Congestin Window Reduced

ECE: 显示拥塞提醒回应 ECN-Echo

CWR和ECE用于传输过程中拥塞控制,与TCP的窗口协同工作

URG: 紧急

ACK: 反馈

PSH: 推送数据包

RST: 重置

SYN: 同步

FIN: 结束

三次握手

3-shake

四次挥手

4-wave

函数调用过程

function

下面是使用tcpdump观察到的信息:

1
2
3
4
5
6
7
$ tcpdump -vv -n -K -i eth0 tcp port 10011
14:53:43.401807 IP (tos 0x14, ttl 54, id 23240, offset 0, flags [DF], proto TCP (6), length 52)
内网ip.xxx.xxx.xxx.31631 > 外网IP.xxx.xxx.xx.10011: Flags [S], seq 899257915, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
14:53:43.401817 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
外网IP.xxx.xxx.xx.10011 > 内网ip.xxx.xxx.xxx.31631: Flags [S.], seq 2904016695, ack 899257916, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:53:43.406776 IP (tos 0x14, ttl 54, id 23241, offset 0, flags [DF], proto TCP (6), length 40)
内网ip.xxx.xxx.xxx.31631 > 外网IP.xxx.xxx.xx.10011: Flags [.], seq 1, ack 1, win 1026, length 0
TCP状态转换图

ip-address

TIME_WAIT

IP地址类型

值域 类型 应用
0.0.0.0-127.255.255.255 A类 一般用于大型网络。
128.0.0.0-191.255.255.255 B类 中等规模网络。
192.0.0.0-223.255.255.255 C类 用于小型网络。
224.0.0.0-239.255.255.255 D类 多路广播用户
240.0.0.0-247.255.255.255 E类 多路广播用户

IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。

ip-address

DDoS攻击

分布式拒绝服务工具。利用的正是TCP里面的三次握手、四次挥手的规则。从根本上是很难防御。有些公司是购买一些硬件防火墙来构建防御。