TCP 3次握手建立连接
2014-02-21 16:46
225 查看
TCP 3次握手建立连接
1. (Client) –> [SYN] –> (Server)假如Client和Server通讯. 当Client要和Server通信时,Client首先向Server发一个SYN (Synchronize) 标记的包,告诉Server请求建立连接.
注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当Server收到Client发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不 能让外部任何主机主动建立连接。
2. (Client) <– [SYN/ACK] <–(Server)
接着,Server收到来自Client发来的SYN包后,会发一个对SYN包的确认包(SYN/ACK)给Client,表示对第一个SYN包的确认,并继续握手操作.
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.
3. (Client) –> [ACK] –> (Server)
Client收到来自Server的SYN/ACK 包,Client会再向Server发一个确认包(ACK),通知Server连接已建立。至此,三次握手完成,一个TCP连接完成。
Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。
这就是为何连接跟踪很重要的原因了. 没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个 好主意). 而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包。
四次握手Four-way Handshake
四次握手用来关闭已建立的TCP连接1. (Client) –> ACK/FIN –> (Server)
2. (Client) <– ACK <– (Server)
3. (Client) <– ACK/FIN <– (Server)
4. (Client) –> ACK –> (Server)
注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包.然而, 由于连接还没有关闭, FIN包总是打上ACK标记. 没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。
相关文章推荐
- win8 SqlServer2005连接,提示到主机的 TCP/IP 连接失败解决方案
- Windows网络编程资料
- HTTP 1.1与HTTP 1.0的比较及状态代码含义
- 用PHP发送HTTP POST 请求,获得返回结果。(转)
- 网络质量
- 网络安全与主机基本防护-linux鸟哥的私房菜服务器篇07(阅读笔记)
- http://bbs.9ria.com/thread-193299-1-1.html Android 官方文档之Activity和Task
- Linux网络侦错-linux鸟哥的私房菜服务器篇06(阅读笔记)
- Linux常用的网络指令-linux鸟哥的私房菜服务器篇05(阅读笔记)
- packet captuer tool: tcpdump
- 网络基础-linux鸟哥的私房菜服务器篇02(阅读笔记)
- 2013年国内网络运维管理市场调研报告
- 使用HttpURLConnection下载文件
- ubuntu网络配置
- HttpServlet获取Spring中托管的bean
- 开源倾情奉献:基于.NET打造IP智能网络视频监控系统
- 小树技术博客 http://www.qiushurong.cn
- 基于CentOS的Linux基本网络配置,包括网卡eth0、DNS、Host等
- TCP和UDP套接字编程基本流程
- HttpClient4.3使用总结