首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
【转】高性能网络编程4--TCP连接的关闭
】的更多相关文章
五十五、linux 编程——TCP 连接和关闭过程及服务器的并发处理
55.1 TCP 连接和关闭过程 55.1.1 介绍 建立连接的过程就是三次握手的过程:客户端发送 SYN 报文给服务器,服务器回复 SYN+ACK 报文,客户机再发送 ACK 报文. 关闭连接的过程:客户机先发送 FIN 报文,服务器回复 ACK 报文,服务器再发送 FIN 报文,客户机再发送响应报文 ACK. 55.1.2 自定义协议编程例子 msg.h #ifndef __MSG_H__ #define __MSG_H__ #include <sys/types.h> typedef…
TCP连接的关闭
原文地址:http://lib.csdn.net/article/computernetworks/17264 TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么. 为方便阅读,我们可以带着以下5个问题来阅读本文: 1.当socket被多进程或者多线程共享时,关闭连接时有何区别? 2.关连接时,若连接上有来自对端的还未处理的消息,会怎么处理? 3.关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理? 4.so_linger这个…
【转】高性能网络编程1----accept建立连接
最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它. 编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点.希望应用代码完全不关心通讯细节.他们更喜欢在OO世界里,去实现某个接口.实现这个组件预定义的各种模式.设置组件参数来达到目的.学习复杂的通讯框架.底层细节,在习惯于使用OO语言的程序员眼里是绝对事倍功半的.以上做法无可厚非,…
TCP连接与关闭
1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志.因此它表示对刚才客户端SYN报文的回应:同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯. (3) 客户必须再次回应服务段一个ACK报文,这是报文段3. 2.连接终止协议(四次挥手) 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这原则是当一方完成它的数据发送任务…
TCP/IP编程——基于TCP的半关闭
在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我们调用close()函数时,系统会同时把双方的输入流和输出流全部关闭,但是有时候我们仍需要在一方断开连接之后只进行接受数据或者传输数据其中一项操作.这时就需要我们只断开输入或者输出,保留另一个流的正常运转,也就引入了TCP的半关闭状态. 基本操作: 之前我们传输完数据之后便直接调用了close()函…
高性能网络编程1----accept建立连接
转 http://taohui.org.cn/tcpperf1.html 陶辉 taohui.org.cn 回到应用层,往往只需要调用类似于accept的API就可以建立TCP连接.建立连接的流程大家都了解--三次握手,它如何与accept交互呢?下面以一个不太精确却通俗易懂的图来说明之: 研究过backlog含义的朋友都很容易理解上图.这两个队列是内核实现的,当服务器绑定.监听了某个端口后,这个端口的SYN队列和ACCEPT队列就建立好了.客户端使用connect向服务器发起TCP连接,当图…
如何在socket编程的Tcp连接中实现心跳协议
from http://blog.csdn.net/nyist327/article/details/39586203 心跳包的发送,通常有两种技术方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一个低级别的线程,在该线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,即认为客户端已经掉线:同样,如果客户端在一定时间内没 有收到服务器的心跳包,则认为连接不可用.…
【转】高性能网络编程4--TCP连接的关闭
TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么. 为方便阅读,我们可以带着以下5个问题来阅读本文: 1.当socket被多进程或者多线程共享时,关闭连接时有何区别? 2.关连接时,若连接上有来自对端的还未处理的消息,会怎么处理? 3.关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理? 4.so_linger这个功能的用处在哪? 5.对于监听socket执行关闭,和对处于ESTABLISH这种通讯的socket执行关闭,有何区…
TCP 连接关闭及TIME_WAIT探究
这里主要记录一下TCP连接在关闭的时刻,有哪些细节问题.方便在以后的程序设计中能够注意这些细节, 以避免出现这些错误.首先我们来看一下TCP的状态转换图.如<unix网络编程>卷一所示如下图: TCP 四次挥手: 挥手时的序号问题 挥手过程中状态转换问题 TIME_WAIT 产生原因 挥手序号问题: 这里可以看出FIN也占用了一个序号,例如FIN M, 对方回应ACK 确认序号为M+1.最后发送FIN也是如此.那么这里的M和N在传输数据过程中怎样得到的.看一下一个抓包的例子如下 :: >…
TCP连接的状态与关闭方式及其对Server与Client的影响
TCP连接的状态与关闭方式及其对Server与Client的影响 1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态,表示没有任何连接.LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求.SYN_SENT:发送连接请求后等待确认信息.当客户端Socket进行Connect连接时,会首先发送SYN包,随即进入SYN_S…