Chinaunix首页 | 论坛 | 博客
  • 博客访问: 612577
  • 博文数量: 30
  • 博客积分: 125
  • 博客等级: 民兵
  • 技术积分: 1871
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-03 11:29
文章分类

全部博文(30)

文章存档

2014年(9)

2013年(21)

分类: LINUX

2013-10-25 11:02:12

原文是openoffice写的,图片什么不太好弄,我只把目录和第一章放在这里。

全文的pdf从这里下载。listen_backlog.pdf

再来个流程图。tcp连接建立流程图.pdf


Linux kernel tcp 连接建立详解

                         ——listen系统调用的backlog参数引发的长篇大论


目录

Linux kernel tcp 连接建立详解 1

0章 本文的目的 2

1listen()系统调用的困惑 2

1.1 前提条件 2

1.2 分析client程序 2

1.3 分析server程序 2

1.4 第一次观察程序行为 2

1.5 第二次观察程序行为 5

1.6 第三次观察程序行为 7

1.7 略作猜测与分析 10

2tcp 三次握手代码分析 11

2.1 client/server程序结构 13

2.2 serverlisten()系统调用 13

2.3 clientconnect()系统调用 19

2.4 server端处理SYN 23

2.5 client端处理SYN/ACK 32

2.6 server端处理ACK 34

3accept()系统调用分析 42

3.1 accept()系统调用的分析 42

3.2 连接请求的生命周期 47

4listen()系统调用的参数backlog详解 48

4.1 listen()系统调用的参数backlog的作用 48

4.2 分析1.4节中程序的行为 49

4.3 分析1.5节中程序的行为 52

4.4 分析1.6节中程序的行为 53

4.5 backlog参数的用法 53

附录1 client.c 54

附录2 server.c 55

0章 本文的目的

一直以来,对tcp的连接的建立过程只停留在三次握手的层面,阅读代码时发现好多逻辑流程不是很清楚。还有就是对系统调用int listen(int sockfd, int backlog)的第二个参数backlog似懂非懂。它到底是限制server端能同时处理的连接请求数量,还是限制同时建立的连接数量,还是限制等待建立连接队列的长度?

代码面前,了无秘密,关键是得探求。如果你也有同样的困惑,不妨读读本文。

我分析的是v3.12-rc4的代码,commit 0e7a3ed04f0c 。本文偏重于连接建立的函数调用过程、sock状态变化,以及backlog参数,其他的也很重要的内容,如tcp序号、拥塞控制等,但是本文从略,否则可以写本书了。并且本文只关注tcp层,IP层及以下也忽略。

1章是简单的client/server程序,如果你对第1章中的程序行为全部理解,那么恭喜你,完全可以略过本文。

阅读(3172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~