портирование synproxy в пространство пользователя - PullRequest
0 голосов
/ 21 апреля 2019

Я перенес код синтаксиса ядра в пространство пользователя. Я использую его как прозрачный прокси между клиентом и веб-сервером. Когда я запрашиваю веб-страницу, она работает нормально (веб-страница ниже 512 кбит). Однако, если я получу доступ к огромному файлу (4 Гбит или более), он не продолжит передачу после передачи 3Gbit.

Я настроил «подтверждение», отправленное сервером клиенту, и «seq», отправленное клиентом на сервер. В то же время параметр tcp «sack», отправляемый с клиента на сервер, также настраивается.

 if(tcpinp->state == CONNTRACK_SYN_SENT){              
    if(tcphdr->tcp_flags == (TCP_SYN_FLAG|TCP_ACK_FLAG)){ 
        synproxy_parse_options(tcphdr, &opts);            
        tcpinp->tsoff = opts.tsval - tcpinp->its;         
    }                                                     

    swap(opts.tsval, opts.tsecr);                         
    synproxy_send_server_ack(iphdr,tcphdr, &opts);      
    /* send client ack,update tcp window */               
    swap(opts.tsval, opts.tsecr);      
 /*                                          
  * update window to client                  
  *                                          
  * dir:server -> client   
  *                           
  * save isn_off =  client.ISN1 - server.ISN2   
  */                                                                                                           
    tcpinp->isn_off = tcpinp->isn - tcphdr->seq;                
    synproxy_send_client_ack(tcpinp, &opts);     
    tcpinp->state = CONNTRACK_ESTABLISHED;            
    return 0;                                             
}                                                         

   if(tcpinp->dir == IP_CT_DIR_REPLY){                                      
       tcphdr->sent_seq = htonl(ntohl(tcphdr->sent_seq) + tcpinp->isn_off);                                
   }else if(tcpinp->dir == IP_CT_DIR_ORIGINAL){                             
       tcphdr->recv_ack = htonl(ntohl(tcphdr->recv_ack) - tcpinp->isn_off); 
       nf_ct_sack_adjust(tcph, other_way);                
   }   


Что мне следует настроить, кроме seq / ack и sack?

1 Ответ

0 голосов
/ 23 апреля 2019

--- Я обнаружил, что опция client tcp'win 'была увеличена до' 828800 ', а затем она не меняется.

Я решил, что для этого нужно, чтобы mss всегда было одинаковым.

...