sk_buff 의 수신 사이즈가 실제 패킷 사이즈와 차이점?

글쓴이: 익명 사용자 / 작성시간: 목, 2011/12/15 - 4:18오후
안녕하세요
sk_buff를 분석하던중 질문이 있습니다.
보통 패킷 캡쳐 프로그램 한번 수신 패킷당 사이즈 1500 -> 헤더사이즈 40 제외 실제 한번 수신시 최대 데이타 사이즈는 1460 이기에
실제 sk_buff로 수신되는것도 1500사이즈 고정일 것이라 생각 하였는데
확인해보니 여러 패킷 스트림이 모여서 수신 되는것 같더라구요
1. 실제 리눅스 커널의 패킷 수신은 어플리케이션단에서 캡쳐하는 패킷스트림과 짤리는(?) 사이즈의 크기가 다른가요?
2. 총 3만 바이트의 데이타 스트림을 수신할때 sk_buff->len 의 사이즈가 5000정되 되는 사이즈가 있었는데 ,
그렇다면 동일한 헤더로 데이타 스트림만 짤리어서 어플리케이션단에서 수신되는건가요?
len 만큼 각각 데이타를 확인 해보았을때 0 값이 무수히 많이 들어 가있더라구요 실제 데이타들 사이에.. 이 값들의 의미는 무엇인가요?
도움 부탁드립니다.
Forums:
생각나는대로 씁니다. 1.실제 데이타수신되는 패킷
생각나는대로 씁니다.
1.실제 데이타수신되는 패킷 전체에 대한 전권은 커널이 갖고 있는게 아니고 장치 드라이버가
갖고 있습니다.따라서 사이즈의 최대 크기,DMA를 이용한 버퍼 메모리주소,이에대한 포인터 할당,기타 장치내재된 특별한 하드웨어적 루틴 수행(있다면),,,여기까지가 대충 드라이버가 하는일이고 그 다음이 커널이 되겠죠
이더넷 같은 경우 MTU 1500 이 보통 됩니다만 이것보다 큰게 있다면 점보프레임이 가능한 장치드라이버겠죠
2.rx_ring 버퍼(커널에 따라 다릅니다만 위 1번 버퍼가 이거라고 보시면 됩니다.)는 장치드라이버가 자른 매 패킷마다 1개씩 생기고
이것은 매 패킷마다 새롭게 완전한 헤드+데이타를 갖고 있어야 한다는 뜻입니다.
sk_buff 도 링버퍼의 포인터를 그대로 참조하므로 실제 데이타는 위 1번의 버퍼에 그대로 있습니다.
제가 말씀드릴 수 있는건 여기까지고 지금당장
왜 길이가 5000 인 데이타가 1번 버퍼에 있느냐.......000000 가 많은데 뭐냐....
이건 모르겠습니다.
fragment
fragment
댓글 달기