• linux内核中,tcp连接三次握手过程中的,tcp协议栈中的函数调用关系



    http://blog.chinaunix.net/uid-20540275-id-1649827.html


        最近工作需要修改一套tcp协议栈,简单的看了一下内核tcp协议栈的函数调用过程,只是一个大致的流程,并没有做详细的调查,准备修改的时候在仔细的看.还有就是仅仅看了tcp部分,下面的ip以下的都没有查看.

        在这里简单的说一下关于tcp连接开始的三次握手的函数调用关系:

        客户端:(发起连接请求)
        tcp_v4_connect -> tcp_connect_init
                       -> tcp_transmit_skb -> icsk->icsk_af_ops->send_check
                                               (tcp_v4_send_check)
                                           -> icsk->icsk_af_ops->queue_xmit
                                               (ip_queue_xmit)
                                              向外发送syn包
                       -> inet_csk_reset_xmit_timer
                          设置从新发送的定时器
        如果过一段时间没有接到应答:
        tcp_retransmit_timer -> tcp_retransmit_skb -> tcp_transmit_skb
        其余操作就跟上面的相同了.

        服务器端:(接收syn,并返回syn/ack)
        tcp_v4_rcv -> tcp_v4_do_rcv
                          -> tcp_v4_hnd_req
                          -> tcp_rcv_state_process
                              -> icsk->icsk_af_ops->conn_request 
                                 (tcp_v4_conn_request) ->
                                      -> tcp_v4_init_sequence
                                      -> tcp_v4_send_synack
                                            -> ip_build_and_send_pkt
        这个写的并不是很全面,只是匆匆忙忙的整理出来的.

        客户端:(接收syn/ack,并返回ack)
        tcp_v4_rcv -> tcp_v4_do_rcv
                        -> tcp_rcv_state_process
                                -> tcp_rcv_synsent_state_process
                                      -> tcp_ack
                                      -> tcp_store_ts_recent
                                      -> tcp_initialize_rcv_mss
                                      -> tcp_send_ack
                                            ->tcp_transmit_skb
                                -> tcp_urg
                                -> tcp_data_snd_check

        服务器端:(接收ack)
        tcp_v4_do_rcv
            -> tcp_v4_hnd_req
                    -> tcp_check_req
                            ->inet_sk(sk)->icsk_af_ops->syn_recv_sock
           -> tcp_rcv_state_process
                    ->  tcp_sequence

         上面是三次握手的tcp协议栈部分函数调用关系的描述,由于整理的比较匆忙,可能会存在一些问题


  • 相关阅读:
    二叉排序树的最低公共祖先
    [jobdu]树中两个结点的最低公共祖先
    [jobdu]用两个栈实现队列
    [leetcode]Balanced Binary Tree
    [jobdu]从尾到头打印链表
    [leetcode]Flatten Binary Tree to Linked List
    [leetcode]Unique Binary Search Trees
    hdu 4059
    hdu 3972 1 M possible
    CF 317D Game with Powers
  • 原文地址:https://www.cnblogs.com/ztguang/p/12644872.html
Copyright © 2020-2023  润新知