| IP首部 | ||||||||||||
| 0 | 15 | 16 | 31 | |||||||||
| 4位版本 | 4位首部长度 | 8位服务类型(TOS) | 16位总长度(字节) | 20字节 | ||||||||
| 16位标志 | 3位标志 | 13位片偏移 | ||||||||||
| 8位生存时间(TTL) | 8位协议 | 16位首部检验和 | ||||||||||
| 32位源IP地址 | ||||||||||||
| 32位目的IP地址 | ||||||||||||
| 32位选项(若有) | ||||||||||||
| 数据 | ||||||||||||
| UDP首部 | |||||||||||
| 0 | 15 | 16 | 31 | ||||||||
| 16位源端口号 | 16目的端口号 | ||||||||||
| 16位UDP长度 | 16位UDP校验和 | ||||||||||
| 数据(若有) | |||||||||||
| TCP首部 | |||||||||||
| 0 | 15 | 16 | 31 | ||||||||
| 16位源端口号 | 16目的端口号 | ||||||||||
| 32位序列号 | |||||||||||
| 32位确认号 | |||||||||||
| 4位首部长度 | 保留(6位) | URG | ACK | PSH | RST | SYN | FIN | 16位窗口大小 | |||
| 16位TCP校验和 | 16位紧急指针 | ||||||||||
| 32位选项(若有) | |||||||||||
| 数据(若有) | |||||||||||
ACK - 应答编号
SYN - 同步包
FIN - 结束包
连接建立:三次握手
用来建立连接
1. (B) --> [SYN] --> (A)
假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize)
标记的包,告诉A请求建立连接.
注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识
到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,
如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建
立连接。
2. (B) <-- [SYN/ACK] <--(A)
接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确
认,并继续握手操作.
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.
3. (B) --> [ACK] --> (A)
B收到SYN/ACK 包,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,
一个TCP连接完成
注意: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建
立以后,TCP连接的每个包都会设置ACK位
连接关闭:四次挥手Four-way Handshake
用来关闭已建立的TCP连接
1. (B) --> ACK/FIN --> (A)
2. (B) <-- ACK <-- (A)
3. (B) <-- ACK/FIN <-- (A)
4. (B) --> ACK --> (A)