- Today
- Total
목록프로그래밍 (Programming)/네트워크 스택 (24)
Byeo
우리는 앞선 포스트에서 3-way handshake의 1st packet을 서버가 수신한다면 어떤 코드를 거치는지 확인했습니다: https://byeo.tistory.com/entry/Listen-socket%EC%9D%98-TCP-SYN-%EC%B2%98%EB%A6%AC Listen socket의 TCP SYN 처리 1accept system call은 established된 connection에 대해서 fd를 할당해 userspace에게 제공합니다. 그러면 3-way handshake의 TCP_SYN은 누가 처리할까요? 한 번 그 과정을 알아봅니다. 단, tcp code만 살펴볼 예정이고,byeo.tistory.com 1st handshake: 서버는 SYN packet을 수신하면 tcp의 globa..
지금까지 tcp_conn_request() 함수의 6867줄까지 확인을 했습니다. 남은 6869줄부터 어떤 기능이 있을지 확인해봅니다. 현재까지의 흐름도입니다: 5. tcp_conn_request5-7. timestamp// net/ipv4/tcp_input.c/tcp_conn_request() :6869 if (tmp_opt.tstamp_ok) tcp_rsk(req)->ts_off = af_ops->init_ts_off(net, skb); af_ops는 tcp_request_sock_ipv4이고, init_ts_off 함수는 tcp_v4_init_ts_off입니다. // net/ipv4/tcp_ipv4.c/tcp_v4_init_ts_off() :102static u32 tcp_v4_init_ts..
accept system call은 established된 connection에 대해서 fd를 할당해 userspace에게 제공합니다. 그러면 3-way handshake의 TCP_SYN은 누가 처리할까요? 한 번 그 과정을 알아봅니다. 단, tcp code만 살펴볼 예정이고, device driver와 ip layer는 스킵합니다. 나중에 read system call에서 깊이 다루게 될 것 같습니다. ★ 이 로직은 application에 의해서 trigger되는 로직이 아닙니다! NIC이 packet을 수신하여 interrupt가 발생했고, device driver가 이를 처리하기 위해 trigger되는 로직(으로 예상을 하고있고, 나중에 read에서 확인할 예정)입니다! 1. tcp_v4_rcvtc..
kernel function의 흐름이 모호할 때, ftrace가 도움을 줄 수 있습니다. ftrace 사용법을 정리해봅니다. kernel source code를 호스트에서 갖고 있고, 이를 qemu로 부팅합니다. linux 5.15입니다. 1. kernel configurationkernel configuration에서 FTRACE 관련 항목들의 설정을 확인합니다. CONFIG_FTRACE=y# CONFIG_BOOTTIME_TRACING is not setCONFIG_FUNCTION_TRACER=y available filter functions을 통해서 원하는 function만 tracing하도록 설정할 수 있습니다. 다른 설정들도 확인해서 필요한 값들도 있는지 확인합니다. (FTRACE 혹은 TRAC..
이전 포스트: https://byeo.tistory.com/entry/accept-system-call-2-inetaccept accept system call 2 (inet_csk_accept)이전 포스트: https://byeo.tistory.com/entry/accept-system-call-1-sysaccept4 accept system call 1 (__sys_accept4)accept system call의 개요와 관련된 내용은 이전 포스트에 정리되어 있습니다.: https://byeo.tistory.com/entry/accept-byeo.tistory.com 7. inet_acceptinet_accept에서 호출했던 sk1->sk_prot->accept 함수는 inet_csk_accept ..
개요Blocking I/O의 동작 방법을 공부해 봅니다. (LDD (https://www.makelinux.net/ldd3/) 3판 section 6.2 요약) sys_accept을 공부하다가 blocking I/O에 대해서는 따로 간단히 정리를 해보면 좋겠다 싶어서 작성하게 되었습니다. Blocking I/O 하드웨어 장비는 언제나 작업을 처리할 수 있는 것은 아니다. 예를 들어, NIC을 통해서 data를 내보내고 싶은데 (send, TX), 이미 수많은 작업들이 쌓여있어서 하드웨어가 이를 수용하지 못할 수 있다. 반대로, application이 무언가 data를 받기를 기대하는데 (recv, RX) 실제로는 NIC에 들어온 data가 없을 수도 있다. 하지만 우리가 작성하는 프로그램은 하드웨어 상..
이전 포스트: https://byeo.tistory.com/entry/accept-system-call-1-sysaccept4 accept system call 1 (__sys_accept4)accept system call의 개요와 관련된 내용은 이전 포스트에 정리되어 있습니다.: https://byeo.tistory.com/entry/accept-system-call-Intro accept system call 0 - Intro일반적인 BSD Socket API는 server가 socket을 생성하고 bindbyeo.tistory.com sock->ops->accept 함수는 inet_accept입니다. 5. inet_accept// net/ipv4/af_inet.c/inet_accept() :..
accept system call의 개요와 관련된 내용은 이전 포스트에 정리되어 있습니다.: https://byeo.tistory.com/entry/accept-system-call-Intro accept system call 0 - Intro일반적인 BSD Socket API는 server가 socket을 생성하고 bind 하고 listen 하면, 그다음은 accept을 수행합니다. 이 accept은 client가 연결 요청을 시도 함으로 인해 listen queue에 차있는 established packet을 꺼내온byeo.tistory.com 언제나 그렇듯, __sys_accept에서 시작합니다. 단, 함수 명의 끝에 4가 붙어있습니다.0. Parameteraccpet의 parameter는 조금 특..
일반적인 BSD Socket API는 server가 socket을 생성하고 bind 하고 listen 하면, 그다음은 accept을 수행합니다. 이 accept은 client가 연결 요청을 시도 함으로 인해 listen queue에 차있는 established packet을 꺼내온 뒤, socket()으로 생성했던 fd와는 다른 새로운 fd(!)를 생성하여 userspace에 제공합니다. accept에서 확인해야 할 점은 다음과 같습니다. 1. TCP Passive open 3-way handshake 수행 지점:server의 3-way handshake (SYN | ACK 반환)는 listen이 하는 것도 아니고, accept이 하는 것도 아닙니다.(1) Kernel이 SYN packet을 받으면(2)..
이전 포스트: https://byeo.tistory.com/entry/listen-system-call-2-inetlisten listen system call 2 (inet_listen)이전 포스트: https://byeo.tistory.com/entry/listen-system-call-1-syslisten listen system call 1 (__sys_listen)BSD socket API에서 server쪽은 bind를 실행한 뒤, listen을 시작합니다. Application이 listen을 시작하면 이제 받byeo.tistory.com sk->sk_prot->hash(sk)는 tcp_prot 구조체에 선언되어 있고, inet_hash 함수포인터를 값으로 갖고 있습니다. 4. inet..