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

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

文章分类

全部博文(193)

文章存档

2024年(9)

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-08 21:02:48

第9章 准备连接请求
    本章从客户端socket程序出发,沿着第二路线分析客户端与服务器的连接过程
    connect(client_fd, (struct sockaddr *)&server_address, server_len)
    其中server_address是服务器地址.
9.1 内核的连接函数
9.2 分配数据包结构和数据块空间
9.3 构建/发送TCP数据包
9.4 进化成IP数据包
        ......前一篇

9.5 进化成以太网数据包
        struct ethhdr {
            ......
        };
        sys_socketcall()-->sys_connect()-->inet_stream_connect()-->tcp_v4_connect()-->tcp_connect()-->tcp_transmit_skb()-->ip_queue_xmit()-->ip_local_out()-->dst_output()-->ip_output()-->
        ip_finish_output()
-->ip_finish_output2()-->neigh_resolve_output()-->neigh_hh_init()
-->eth_header_cache()
                                                                                                               -->dev_hard_header()-->eth_header()
        neigh_hh_init()对邻居结构的链路层头部hh_cache检查和初始化
        eth_header_cache()对链路层头部产进行初始化
        dev_hard_header()初始化数据包的链路层头部
        eth_header()设置以太网头部同内容,包括源地址目的地址以及使用的哪一种协议确定类型

9.6 发送以太网数据包
        sys_socketcall()-->sys_connect()-->inet_stream_connect()-->tcp_v4_connect()-->tcp_connect()-->tcp_transmit_skb()-->ip_queue_xmit()-->ip_local_out()-->dst_output()-->ip_output()-->
        ip_finish_output()-->ip_finish_output2()-->neigh_resolve_output()-->dev_queue_xmit()-->dev_hard_start_xmit()-->(dev->hard_start_xmit)
        dev_queue_xmit()作相关检查后,调用dev_hard_start_xmit()开始发送数据包
        dev_hard_start_xmit()其中调用网络设备的发送函数(通过将网卡的发送函数挂在hard_start_xmit上执行)

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