Chinaunix首页 | 论坛 | 博客
  • 博客访问: 661008
  • 博文数量: 186
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2117
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(186)

文章存档

2024年(2)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2015-08-04 20:34:38

第9章 准备连接请求
    本章从客户端socket程序出发,沿着第二路线分析客户端与服务器的连接过程
    connect(client_fd, (struct sockaddr *)&server_address, server_len)
    其中server_address是服务器地址.
9.1 内核的连接函数
    sys_socketcall()-->sys_connect()-->inet_stream_connect()-->tcp_v4_connect()-->ip_route_connect()
                                                                                                                                 -->inet_hash_connect()-->__inet_hash_connect()
                                                                                                                                                                      -->sk_unhashed()
                                                                                                                                                                      -->__inet_hash_nolisten()
                                                                                                                                 -->ip_route_newports()-->ip_route_output_flow()
                                                                                                                                 -->sk_setup_caps()
                                                                                                                                 -->tcp_connect()-->tcp_connect_init()-->tcp_mtup_init()
                                                                                                                                                                                            -->tcp_sync_mss()
                                                                                                                                                                                            -->dst_metric()
                                                                                                                                                                                            -->tcp_initialize_rcv_mss()
                                                                                                                                                                                            -->tcp_select_initial_window()
        ip_route_connect()查找路由表
        inet_hash_connect()检查端口是否可用.
        ip_route_newports()检查客户端本地端口和目的端口是否与路由表中的记录相同, 如果不同就准备路由键值, 然后创建新的路由表.
        ip_route_output_flow()创建路由表
        sk_setup_caps()增加兼容标志位的GSO
        tcp_connect()发送第一次握手的SYN数据包
        tcp_connect_init()初始化tcp_sock结构内容
        tcp_mtup_init()设置连接结构的MTU内容
        tcp_sync_mss()利用MTU值以及窗口值来计算最佳的MSS值,并记录到tcp_sock结构中
        dst_metric()取得路由项设置的窗口值
        tcp_initialize_rcv_mss()初始化接收用的MSS值
        tcp_select_initial_window()初始化滑动窗口值
9.2 分配数据包结构和数据块空间
9.3 构建/发送TCP数据包
9.4 进化成IP数据包
9.5 进化成以太网数据包
9.6 发送以太网数据包
阅读(505) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~