일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- git
- 네트워크 스택
- pyqt menu bar
- 3D Surface Area
- 하이퍼바이저
- pyqt layout
- hackerrank
- Two Characters
- Python
- 혁진이의 프로그램 검증
- git 명령어
- 해커랭크
- 17609
- git 입문
- 백준
- SWEA
- pyqt status bar
- 프로그래밍 문제
- 도커
- PyQt
- Queen's Attack
- Queen's Attack II
- 리눅스 커널
- 커널 패킷 처리
- tcp stack
- 두 문자열
- pyqt button
- 백준 알고리즘
- pyqt tooltip
- 회문
- Today
- Total
목록리눅스 커널 (2)
뜸부기와 공작새
리눅스 패킷 Flow 분석 송신 [L7 Layer] send(), write() 함수와 같은 API를 이용하여 패킷의 정보들을 Kernel로 전달한다 해당 함수들을 호출하면 시스템 콜이 발생하여 sock_sendmsg() 함수를 호출한다 [L4 Layer] 시스템 콜 수행되어 sock_sendmsg() 함수에 전송할 패킷에 대한 정보가 전달된다 그다음 사용자 패킷에 mapping되는 버퍼를 읽을 수 있는지 확인하고 L7 Application에서 사용할 소켓 디스크립터를 이용해서 socket 구조체를 얻어오고 sock_sendmsg_nosec() 함수를 호출한다 sock_sendmsg_nosec() 함수는 얻어온 socket 구조체에 해당하는 프로토콜별 처리 함수를 호출한다 프로토콜의 명령과 설정을 담당하..
수신부 인터럽트와 패킷처리 최초에 NIC에서 패킷을 수신하면 커널의 메모리 영역에 존재하는 rx_ring에 수신한 패킷 정보를 밀어넣는다 이후에 CPU에게 인터럽트를 걸고 새로운 패킷이 왔다는 것을 정보를 밀어넣고 CPU에게 인터럽트를 요청한다 인터럽트 신호를 받은 CPU는 커널 인터럽트 핸들러를 수행한다 (do_IRQ() 호출) irq핸들러는 인터럽트 번호를 보고 드라이버 인터럽트 핸들러를 호출한다 드라이버 인터럽트 핸들러 함수는 (napi_schedule()) 소프트웨어 인터럽트(softirq)를 요청하는 일을 수행하는데 softirq핸들러 함수가 바로 net_rx_action() 이다 [L2 Layer] net_rx_action() 함수는 드라이버의 rx_ring에 존재하는 패킷 정보를 상위 레이어..