[TCP/IP]TCP连接的建立和终止
2017-09-05 21:57
609 查看
TCP 是支持全双工通信的传输层协议,为了开发出更好的网络通信应用,清楚了解其中的交互过程是非常必要的。
下面用比较直白的话来描述&理解一下这个过程:
TCP 连接建立:三次握手
服务器依次调用 socket,bind,linsten 绑定到指定本机地址,accept 阻塞等待连接。
1. 客户端调用 socket 指定本地/网络地址,connect 主动建立连接,向服务器发送 SYN 同步请求,并标记该连接通道传送数据的初始序号为 J 。
2. 服务器收到 SYN 请求后,响应 ACK(acknowledgement)确认收到,并标记序号为 J + 1 ;
同时服务器也向客户端发送一个 SYN 同步请求,并标记该连接通道传送数据的初始序号为 K 。
3. 客户端收到 SYN 请求后,对服务器响应 ACK 确认收到,并标记序号为 K + 1 。
在完成上面三步之后,TCP连接完成,客户与服务器之间可以互发数据了。
TCP 连接终止:四次挥手
客户或服务器都可以主动发起 close 动作。
1. 客户调用 close 主动关闭连接,此时向服务器发送 FIN(finish)请求,标记连接的数据序号为 M 。
2. 服务器收到客户结束请求后,响应 ACK 确认,并标记连接数据序号为 M + 1 。
3. 服务器被动关闭,向客户发送 FIN 请求,标记连接的数据序号为 N 。
4. 客户收到服务器的 FIN 请求后,响应 ACK 确认,并标记连接的数据序号为 N + 1 。
完成上面四步,TCP连接终止。
TCP连接的分组交换
TCP 的 SO_KEEPALIVE 套接字选项
这是一个检测连接存活的选项,设置了 keep-alive 选项后,如果 2小时内在该套接字的任一方向上都没有数据交换,
TCP 就自动给对端发送一个保持存活探测分节(keep-alive probe),这是一个对端必须响应的 TCP 分节。
如果没有对 TCP 探测分节的响应,套接字待处理错误被置为 TIMEOUT,套接字关闭。
HTTP 的 keep-alive 属性
HTTP 是基于 TCP 之上的无状态的请求-响应式短连接,每一个请求就是一个 TCP 连接,频繁的三次握手和四次挥手会浪费传输之外的大量时间。
为了提高连接和应用效率,服务端设置 keep-alive 后客户端在发起一次请求后,服务器端不会马上关闭这个 TCP 连接,而是在一段时间内等待,有数据传输就复用这个连接。
@todo 用 tcpdump 分析连接的过程。
参考文献:
Unix网络编程1 > 传输层:TCP、UDP、SCTP > TCP连接的建立和终止
Unix网络编程1 > 套接字选项 > 通用套接字选项
Link:http://www.cnblogs.com/farwish/p/7482038.html
@farwish <www.farwish.com>
下面用比较直白的话来描述&理解一下这个过程:
TCP 连接建立:三次握手
服务器依次调用 socket,bind,linsten 绑定到指定本机地址,accept 阻塞等待连接。
1. 客户端调用 socket 指定本地/网络地址,connect 主动建立连接,向服务器发送 SYN 同步请求,并标记该连接通道传送数据的初始序号为 J 。
2. 服务器收到 SYN 请求后,响应 ACK(acknowledgement)确认收到,并标记序号为 J + 1 ;
同时服务器也向客户端发送一个 SYN 同步请求,并标记该连接通道传送数据的初始序号为 K 。
3. 客户端收到 SYN 请求后,对服务器响应 ACK 确认收到,并标记序号为 K + 1 。
在完成上面三步之后,TCP连接完成,客户与服务器之间可以互发数据了。
TCP 连接终止:四次挥手
客户或服务器都可以主动发起 close 动作。
1. 客户调用 close 主动关闭连接,此时向服务器发送 FIN(finish)请求,标记连接的数据序号为 M 。
2. 服务器收到客户结束请求后,响应 ACK 确认,并标记连接数据序号为 M + 1 。
3. 服务器被动关闭,向客户发送 FIN 请求,标记连接的数据序号为 N 。
4. 客户收到服务器的 FIN 请求后,响应 ACK 确认,并标记连接的数据序号为 N + 1 。
完成上面四步,TCP连接终止。
TCP连接的分组交换
TCP 的 SO_KEEPALIVE 套接字选项
这是一个检测连接存活的选项,设置了 keep-alive 选项后,如果 2小时内在该套接字的任一方向上都没有数据交换,
TCP 就自动给对端发送一个保持存活探测分节(keep-alive probe),这是一个对端必须响应的 TCP 分节。
如果没有对 TCP 探测分节的响应,套接字待处理错误被置为 TIMEOUT,套接字关闭。
HTTP 的 keep-alive 属性
HTTP 是基于 TCP 之上的无状态的请求-响应式短连接,每一个请求就是一个 TCP 连接,频繁的三次握手和四次挥手会浪费传输之外的大量时间。
为了提高连接和应用效率,服务端设置 keep-alive 后客户端在发起一次请求后,服务器端不会马上关闭这个 TCP 连接,而是在一段时间内等待,有数据传输就复用这个连接。
@todo 用 tcpdump 分析连接的过程。
参考文献:
Unix网络编程1 > 传输层:TCP、UDP、SCTP > TCP连接的建立和终止
Unix网络编程1 > 套接字选项 > 通用套接字选项
Link:http://www.cnblogs.com/farwish/p/7482038.html
@farwish <www.farwish.com>
相关文章推荐
- TCP/IP 第18章 tcp连接建立和终止
- TCP/IP 详解卷一学习笔记(四):TCP 连接建立与终止
- TCP-IP详解卷1-18:TCP连接的建立与终止
- TCP/IP之十:TCP连接的建立与终止
- TCP/IP建立连接与终止连接
- TCP/IP学习(三)TCP连接的建立与终止
- TCP/IP之十:TCP连接的建立与终止
- TCP/IP (一) accept建立连接
- C#建立TCP/IP连接
- TCP/IP 建立连接、断开连接的过程
- TCP连接的建立与终止
- TCP连接的 建立和终止 (TCP MM 和 GG的 初识的三 和 分手的四)
- UNIX网络编程——TCP的连接建立与终止、基本TCP客户/服务器套接字函数
- Tcp连接的建立与终止及其拥塞控制
- Tcp连接的建立与终止及其拥塞控制
- 读书笔记--TCP连接建立与终止
- 《TCP/IP详解 卷1》 笔记: TCP连接的建立与终止
- TCP连接的建立与终止过程详解
- 手机连接设备的蓝牙向其发送子服务器局域网IP信息,从而esp8266与该服务器建立tcp连接
- TCP/IP详解学习笔记(13)-- TCP连接的建立与终止