《UNIX网络编程》多线程TCP C/S服务器正常启动和正常结束过程剖析

原创 2017年07月24日 19:50:49

一、启动过程

1、服务器启动后,它调用socket、bind、listen、accept, 并阻塞accept调用(我们还没有启动客户)。
2、客户启动并调用socket和connect,后者引起TCP三路握手过程。当三路握手完成后,客户中的connect和服务器中的accept均返回,连接建立。
3、服务器中的的accept返回时,调用fork处理这个连接,而父进程阻塞在accept等待下一个连接。

二、结束过程

1、服务器子进程终止,关闭所有打开的描述符,客户打开的套接字由内核关闭。这导致客户TCP发送一个FIN给服务。器,服务器TCP则以ACK响应,这就是TCP连接终止的前半部分,至此,服务器的套接字处在CLOSE_WAIT状态,客户套接字则处于FIN_WAIT 状态。
2、服务器接收到FIN时,服务器接受函数(read)处于阻塞状态,于是read返回0。
3、服务器子进程终止。
4、服务器所有描述符随之关闭。由子进程来关闭套接字回应发TCP连接序列终止的最后两个分节:一个服务器到客户的FIN和客户到服务器的ACK。至此连接完全终止,客户套接字进入TIME_WAIT状态。
5、进程终止处理的另一部分是:在服务器子进程终止的时候,给父进程发送一个SIGCHLD信号,如果没有捕捉,子进程将进入僵死状态(Zombie)。

TCP状态转换图

TCP连接的分组交换

版权声明:本博客的所有内容采用Creative Commons(知识共享)许可证,作者权利:署名(BY)& 非商业性使用(NC)。转载时请务必标明文章超链接、作者信息和本声明,禁止用于商业用途。

UNIX网络编程(一)一个简易的TCP C/S模型(echo sever)

简易的TCP C/S模型实现
  • zero_witty
  • zero_witty
  • 2017年02月08日 16:22
  • 340

【Unix 网络编程】TCP 客户/服务器简单 Socket 程序

前面介绍了Socket 编程函数  在编写 Socket 程序之前还需要了解TCP连接是如何建立的。(参考资料《Unix 网络编程》) 建立一个 TCP 连接时会发生下述情形: 1. 服务器必须准备好...
  • yeswenqian
  • yeswenqian
  • 2014年03月20日 19:25
  • 1893

Linux网络编程——tcp并发服务器(多进程)

一、tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。 二、多...
  • lianghe_work
  • lianghe_work
  • 2015年06月15日 15:02
  • 4723

一个简单的时间获取客户端/服务器程序

TCP时间获取客户程序#include "unp.h"int main(int argc, char **argv) { int sockfd, n; c...
  • qq_33351410
  • qq_33351410
  • 2016年09月18日 11:01
  • 1821

TCP三次握手和连接关闭过程详解

1、建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。 (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带A...
  • jien1109
  • jien1109
  • 2014年08月14日 15:18
  • 944

TCP/IP网络编程 学习笔记_11 --多进程服务器端

并发服务器首先,我们来假设有下面这样两种类型的服务器:第一种,第一个连接请求的受理时间为1s,第50个连接请求的受理时间为50s,第100个连接请求的受理时间为100s。即同时很多客服端连接,需要依次...
  • u010223072
  • u010223072
  • 2015年08月18日 18:40
  • 1797

TCP客户/服务器

《UNIX Network Programming Volume1: The Socket Networking API, Third Edition》 W.Richard Stevens /...
  • yss28
  • yss28
  • 2017年01月16日 15:25
  • 420

C/S架构与多进程多线程

C/S架构与多进程多线程   如题,C/S架构指的是服务器(Server)与客户机(Client)协作完成网络程序功能的一种模式。它是已经在计算机世界活跃数十年的一种古老的软件架构。如今已...
  • u011456940
  • u011456940
  • 2016年03月16日 17:02
  • 1042

linux下 socket tcp Server c语言编写(分别实现单进程,多进程,多线程)

TCP 迭代服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接。TCP 迭代服务器一次只能处理一个客户端的请求,只有在这个客户的所有请求满足后,服务器才可以继续后面的请求。如果...
  • jelly_gemini
  • jelly_gemini
  • 2017年08月05日 22:26
  • 592

UNIX网络编程笔记(4)—TCP客户/服务器程序示例

TCP客户/服务器程序示例
  • zhangxiao93
  • zhangxiao93
  • 2016年06月03日 16:06
  • 2230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《UNIX网络编程》多线程TCP C/S服务器正常启动和正常结束过程剖析
举报原因:
原因补充:

(最多只允许输入30个字)