TCP/IP四层模型
层 | 作用 |
---|
4.应用层 | 直接为应用进程提供服务,加密、解密、格式化数据、HTTP、FTP、SMTP |
3.运输层 | TCP、UDP、端口 |
2.网络层 | 进行连接的建立和终止、IP地址的寻找。IP协议、ARP协议、路由协议 |
1.网络接口层 | 传输数据的物理媒介 |
三次握手
三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| client --- --- --- --- --- -> server CLOSED LISTEN 1. | --- --- -SYN(seq=j) --- -> | SYN_SENT 2. | <--ACK(j+1) SYN(seq=k)-- | SYN_RECV 3. | --- --- -ACK(k+1) --- --- -> | ESTABLISHED ESTABLISHED
|
- 未连接队列:
SYN_RECV
条目 - Backlog参数:内核为相应套接字排队的最大连接个数,server端的
SYN_RECV
后重传,超过一定次数则删除该条目 - 半连接存活时间:服务端的Timeout时间,
SYN_RECV
存活时间 - 第三次可以发送数据
四次挥手
由于 TCP 的半关闭(half-close)特性,TCP 提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力,所以需要主动关闭连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| client --- --- --- --- --- -> server ESTABLISHED ESTABLISHED 1. | --- --- -FIN(1),seq=u--- -> | FIN-WAIT-1 2. | <--- --ACK(u+1),seq=v--- - | FIN-WAIT-2 CLOSE_WAIT 3. | <--FIN=1,seq=w,ACK(u+1)- | LAST_ACK 4. | --- -ACK(w+1),seq=u+1--- > | TIME_WAIT(2MSL) CLOSED CLOSED
|
Q: 等待2MSL(Maximum Segment Lifttime)原因
- 保证最后一个ACK到达服务端,保证服务端正常关闭
- 如果不等待立即关闭,ACK丢失,服务端重发FIN,客户端会返回
RST
标志(Reset,重置连接),服务端异常关闭
- 防止关闭后的延迟报文出现在后续连接里
Q: 为什么是2MSL?
- ACK丢失和服务端重发FIN,是2MSL
- 如果大于3MSL,意味着允许再次发送的报文丢失,连续报文丢失,说明网络环境比较差,更应优先解决网络环境
参考