第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 发送以太网数据包
阅读(557) | 评论(0) | 转发(0) |