- Today
- Total
목록전체 글 (115)
Byeo
일반적인 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을 받으면(..
이전 포스트: 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..
이전 포스트: https://byeo.tistory.com/entry/listen-system-call-1-syslisten listen system call 1 (__sys_listen)BSD socket API에서 server쪽은 bind를 실행한 뒤, listen을 시작합니다. Application이 listen을 시작하면 이제 받을 수 있게 됩니다. 이 때, listen은 client가 요청한 연결들을 보관하는 함수라고 볼 수 있을byeo.tistory.com sock->ops->listen 함수는 inet_listen입니다. 현재까지 흐름도 2. inet_listen// net/ipv4/af_inet.c/inet_listen() :193/* * Move a socket into listen..
BSD socket API에서 server쪽은 bind를 실행한 뒤, listen을 시작합니다. Application이 listen을 시작하면 이제 받을 수 있게 됩니다. 이 때, listen은 client가 요청한 연결들을 보관하는 함수라고 볼 수 있을 것 같은데요. 그 보관 가능한 최대 개수가 listen system call의 2번째 인자인 'backlog'라고 보면 될 것 같습니다. 이 큐를 소모하는 주체(consumer)는 일반적으로 listen 다음에서 불리는 accept() system call입니다. backlog와 관련된 내용은 별도의 포스트에서 다뤄보겠습니다. 이 번에는 BSD socket API중에서 listen를 분석해보려고 합니다. 이전 포스트 (bind system call..
본 포스트는 sigcomm '21의 Revisiting the Open vSwitch Dataplane Ten Years Later를 요약하였습니다. 이전 포스트:https://byeo.tistory.com/entry/Revisiting-the-Open-vSwitch-Dataplane-Ten-Years-Later-1 Revisiting the Open vSwitch Dataplane Ten Years Later 1본 포스트는 sigcomm '21의 Revisiting the Open vSwitch Dataplane Ten Years Later를 요약하였습니다. Abstarct 해당 논문은 수천 명의 VMware 고객이 사용하는 data center 가상화를 위한 NSX 상품의 일부로서, Open vSwi..
마니산강화도에 위치한 산이다. 정상은 472m로 난이도가 생각보다 높지는 않다. 계단과 벌레가 많다. 정상까지의 소요시간은 정확히 1시간! 빨간색: 등산로보라색: 능선파란색: 하산로 사진 마니산 입구다. 날씨가 좋았어서 산책 혹은 등산하는 사람이 많았다. 등산까지 생각이 없다면 산책으로도 손색은 없다! 강화도인게 문제지만 나뭇잎은 아직 피지 않았지만 나름 봄이라고 철쭉은 폈다. 마니산 입구에서 별도의 등산 안내도를 보지는 못했다. 대신, 중턱에서 발견했던 이 사진으로 대체 중턱 오르면 오를수록 시야가 넓어진다. 강화도는 대부분 논으로 이루어져 있었고, 그 반대편은 바다가 멀리 보였다~ 정상 마니산 정상 파노라마 왼쪽 사진이 BAC 인증지이다. 오른쪽은 정상석에서 5분정도 거리에 있는 참성단이다. ..
이전 포스트https://byeo.tistory.com/entry/bind-system-call-2-inetbind bind system call 2 (inet_bind)이전 포스트 (bind system call 1: __sys_bind)https://byeo.tistory.com/entry/bind-system-call-1 bind system call 1 (__sys_bind)BSD socket API에서 socket을 생성한 뒤에는 server-side 측에서 bind를 실행합니다. bind는 나의 ip:port를 sbyeo.tistory.com 현재까지의 흐름도__inet_bind를 이어서 탐색해 봅시다. 4. __inet_bind3) __inet_bind로 돌아와서3-1) 주소 검사// net..
이전 포스트 (bind system call 1: __sys_bind)https://byeo.tistory.com/entry/bind-system-call-1 bind system call 1 (__sys_bind)BSD socket API에서 socket을 생성한 뒤에는 server-side 측에서 bind를 실행합니다. bind는 나의 ip:port를 socket과 연결하는 역할을 수행하죠. 이 번에는 BSD socket API중에서 bind를 분석해보려고 합니다. 이전byeo.tistory.com 현재까지의 흐름도3. inet_bind__sys_bind에서 그 다음으로 호출하는 함수는 sock->ops->bind였습니다.// net/socket.c/__sys_bind() :1693 err =..
BSD socket API에서 socket을 생성한 뒤에는 server-side 측에서 bind를 실행합니다. bind는 나의 ip:port를 socket과 연결하는 역할을 수행하죠. 이 번에는 BSD socket API중에서 bind를 분석해보려고 합니다. 이전 포스트 (socket system call)https://byeo.tistory.com/entry/socket-system-call socket system call 1 (syscall_socket ~ __sock_create)int socket(int domain, int type, int protocol); socket 시스템 콜의 동작을 한 번 들여다봅니다! https://man7.org/linux/man-pages/man2/socket...
본 포스트는 sigcomm '21의 Revisiting the Open vSwitch Dataplane Ten Years Later를 요약하였습니다. Abstarct 해당 논문은 수천 명의 VMware 고객이 사용하는 data center 가상화를 위한 NSX 상품의 일부로서, Open vSwitch를 지원하고 운영해온 경험을 공유한다. 2009년부터 시작된 OVS는 userspace와 kernel의 강한 결합을 분리하였다. 이 분리는 성능을 위해서 반드시 필요했지만, 유지 보수의 어려움이 남아있다. 나아가, in-kernel packet processing은 DPDK와 같은 새로운 option에 비해 상당히 느린 상황이다. kernel/user split으로부터 야기하는 이 문제들을 해결하기 위해서 O..
* BSD socket API에 대한 소개와 Kernel 흐름도를 정리합니다. (linux 5.15 기준)BSD Socket API Model* BSD Socket API: Berkeley Software Distribution Socket API출처: https://www.keil.com/pack/doc/mw6/Network/html/using_network_sockets_bsd.html출처: https://en.wikipedia.org/wiki/Berkeley_sockets 1. Socket()socket(int address_family, int socket_type, int protocol); Socket Systemcall: https://byeo.tistory.com/entry/socket-..
이전 포스트: https://byeo.tistory.com/entry/socket-system-call-3 socket system call 3 (tcp_v4_init_sock)이전 포스트: https://byeo.tistory.com/entry/socket-system-call-2 socket system call 2 이전 포스트: https://byeo.tistory.com/entry/socket-system-call socket system call 1 int socket(int domain, int type, int protocol); socket 시스템 콜의 동byeo.tistory.com 7. sock_map_fd마지막으로 sock_map_fd 함수를 거칩니다. 이 함수는 기존에 tcp_ip..
이전 포스트: https://byeo.tistory.com/entry/socket-system-call-2 socket system call 2이전 포스트: https://byeo.tistory.com/entry/socket-system-call socket system call 1 int socket(int domain, int type, int protocol); socket 시스템 콜의 동작을 한 번 들여다 봅니다! https://man7.org/linux/man-pages/man2/socket.2.html linubyeo.tistory.com inet_create까지의 발걸음 6. tcp_v4_init_sock// net/ipv4/tcp_ipv4.c/tcp_v4_init_sock() :2236st..
급히 성남에서 대전까지 하루 만에 다녀와야 할 일이 생겨서 어쩌다 이용하게 되었다. 대전에서 성남으로 올라올 때, 대전에서 동탄까지 SRT를 이용하고 동탄에서 판교까지 지난 3월 30일에 개통한 GTX-A를 탑승하였다. 동탄에서 성남역 (판교역과 이매역 중간)까지 약 12분 소요! 엄청난 속도다! 동탄역 SRT를 이용해 동탄에서 하차하면 곧바로 GTX-A로 환승할 수 있게 연결되어 있다. 바로 교통카드를 찍고 입장하면 된다! 역 구성은 아주 심플하다. 동탄에서 곧바로 성남, 그다음 역이 수서역이다. 추후에 구성역이 개통될 예정이라고 한다. 동탄에 분포한 삼성전자와 판교에 분포한 IT기업들의 교류(이직?)가 더 쉬워질라나? GTX 개통 기념 현수막이 걸려있다! 내부 23시 13분 차를 탑승했는데, 사람이 ..
이전 포스트: https://byeo.tistory.com/entry/socket-system-call socket system call 1int socket(int domain, int type, int protocol); socket 시스템 콜의 동작을 한 번 들여다 봅니다! https://man7.org/linux/man-pages/man2/socket.2.html linux 5.15 기준입니다. 1. syscall_64.tbl 이전 포스트에서 리눅스 시스템 콜byeo.tistory.com 5. inet_create (net/ipv4/af_inet.c:248)사실 address family가 달라지면 호출될 함수가 달라지겠죠. 예를 들어서 AF_INET6을 지정했다면 inet6_create가 ..