第9章 准备连接请求
本章从客户端socket程序出发,沿着第二路线分析客户端与服务器的连接过程
connect(client_fd, (struct sockaddr *)&server_address, server_len)
其中server_address是服务器地址.
9.1 内核的连接函数
9.2 分配数据包结构和数据块空间
9.3 构建/发送TCP数据包
......前一篇
9.4 进化成IP数据包
ip选项结构 struct ip_option {
......
};
struct iphdr {
......
};
sys_socketcall()-->sys_connect()-->inet_stream_connect()-->tcp_v4_connect()-->tcp_connect()-->tcp_transmit_skb()-->ip_queue_xmit()-->......
tcp_transmit_skb()-->ip_queue_xmit()-->__sk_dst_check()
-->ip_options_build()
-->ip_select_ident_more()-->__ip_select_ident()-->inet_getid()
-->ip_select_fb_ident()
-->ip_local_out()-->__ip_local_out()-->nf_hook()
-->dst_output()-->ip_output()-->ip_finish_output()-->ip_finish_output2()-->neigh_resolve_output()
ip_queue_xmit(struct sk_buff *sk, int ipfragok)发送数据包. 其skb是客户要发送的SYN数据包, ipfragok是指定是否分段.
ip_options_build()将程序设置的ip选项复制到数据中. 将目标地址保存在源路由中并记录时间戳等内容.
ip_select_ident_more()设置ip头部的标识ID
__ip_select_ident()设置ip头部的标识编号
inet_getid()
ip_select_fb_ident()根据目标地址生成ID, 记录到头部中
ip_local_out()
__ip_local_out()通过Netfilter发送数据包
nf_hook()通过Netfilter过滤
dst_output()直接发送数据包
ip_output()
ip_finish_output2()对分段数据进行发送
neigh_resolve_output()一方面完善客户端的邻居子系统,另一方面实现数据包的发送
......需进一步深入理解
9.5 进化成以太网数据包
9.6 发送以太网数据包
阅读(460) | 评论(0) | 转发(0) |