일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 분당 맛집
- 분당맛집
- 순천맛집
- CU 편의점 추천
- 치킨 신메뉴
- 편의점 신제품
- 서현 맛집
- 황리단길맛집
- 서현역중식
- 경주맛집
- 교촌치킨 신메뉴
- cu 편의점
- CU편의점 추천
- 대구동성로맛집
- 오뚜기 라면
- 마켓컬리 추천
- 냉동만두 추천
- 수지 술집
- 황리단길디저트
- 동성로맛집
- CU편의점
- 수원 맛집
- 황리단길기념품
- 서현역맛집
- 푸라닭
- 편스토랑
- 용인맛집
- 편의점 추천
- 순천디저트
- BBQ 신메뉴
- Today
- Total
일상 메모장
struct sk_buff 관련 함수 본문
struct sk_buff
sk_buff 는 Linux TCP/IP stack에서 사용하는 네트워크 패킷을 나타냅니다.
sk_buff는 3가지 구성요소를 가지고 있다. sk_buff 와 linear-data 버퍼 그리고 paged-data(struct skb_shared_info)를 가지고 있습니다.
sk_buff를 alloc 하고 sk_buff structure 에는 버퍼의 특정 포인터를
가르키는 4개의 변수 head, data, tail, end 가 존재합니다.
네트워크 layer 의 특성상 버퍼의 앞부분, 또는 뒷부분에 데이터들이(network header 또는 userdata)
추가 또는 삭제될 경우가 빈번하기 때문에 4개의 변수가 존재합니다.
쉽게 설명하면 버퍼의 중앙부분에 실제 데이터가 존재하고
head ~ data , tail ~ end 포인터의 위치를 비워두면서 데이터가 추가될 경우
버퍼를 늘릴 필요 없이 버퍼 앞, 뒤에 데이터를 쉽고, 빠르게
추가하기 위해서라고 생각하면 쉽습니다.
sk_buff 관련 함수
-
alloc_skb(size)
-
이 함수는 새로운 sk_buff를 할당합니다. Headroom 과 Data length 는 0 입니다. tailroom 은 length와 같아집니다.
-
head = data = tail; end = tail + size; len = 0
-
-
skb_reserve(len)
-
이 함수는 대부분 protocol header 저장을 위해 버퍼를 예약할때 사용된다.
-
data += len; tail += len
-
-
skb_put(len)
-
이 함수는 sk_buff 의 linear data 영역을 조작하는데 사용됩니다. tail pointer를 밑으로 확장합니다.(Data 영역 확장). user data 를 넣거나 TCP/UDP payload 를 copy하는데 쓰입니다. 사용 예는 tcp_sendmsg() 함수의 skb_add_data() 부분을 참고하시기 바랍니다.
-
tail += len; len += len
-
-
skb_push(len)
- 이 함수는 주로 데이터를 송신할 때 쓰이는데 각 프로토콜 에이어에서 헤더가 추가될때 사용됩니다.
-
headroom을 len 만큼 줄이고 data length를 증가시킵니다.
-
data -= len; len += len
-
skb_pull(len)
-
data pointer를 len 만큼 내리고 변경된 data pointer를 리턴합니다.
-
요청한 len 만큼 data가 줄고 headroom이 늘어나고, 이 함수는 주로 패킷을 수신했을때 사용됩니다.
-
혹시 잘못된점 있으면 알려주세요~
'Kernel TCP IP' 카테고리의 다른 글
TCP header (+ TCP 옵션) (0) | 2019.12.31 |
---|---|
sk_buff 에서 Mac header, IP v4 and v6 header, TCP header 파싱 (0) | 2019.12.28 |
TCP timers (Persistent, Keep alive, Time wait) (0) | 2019.12.27 |
TCP timer (Retransmission timer) (0) | 2019.12.26 |
TCP sliding window 개념 (0) | 2019.12.21 |