第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) |