용어 정의
- hole.first: 빈 공간의 첫번째 바이트 번호
- hole.last: 빈 공간의 마지막 바이트 번호
- hole descriptor: hole.first와 hole.last의 쌍
- hole descriptor list: hole descriptor의 목록
알고리즘 개요
- 패킷이 도착하면 hole descriptor list 조회
- 빈 공간이 메워지는 경우 해당 hole descriptor를 list에서 제거
- hole descriptor list가 완전히 비워지는 경우 재조립 처리 가능
경우의 수
- 빈 공간에 완전히 딱 맞아떨어지는 경우
- 앞이나 뒤의 일부분만 채우는 경우
- 중간에 끼어들어서 남은 공간을 둘로 쪼개는 경우
재조립 알고리즘 (4번의 비교 필요)
- hole descriptor list에서 hole descriptor 선택, 더 이상 없으면 8번 단계로
- fragment.first가 hole.last보다 크면 1번 단계로
- fragment.last가 hole.first보다 작으면 1번 단계로
- hole descriptor list에서 현재 항목 삭제
- fragment.first가 hole.first보다 크면, [hole.first, fragment.first – 1] hole descriptor를 새로 생성
- fragment.last가 hole.last보다 작고 More Fragment가 참이면,[fragment.last + 1, hole.last] hole descriptor를 새로 생성
- 1번 단계로
- 재조립 완료




