TCP 패킷의 Urgent bit와 Urgent Pointer의 의미를 아시는 분 계
글쓴이: Necromancer / 작성시간: 수, 2004/02/18 - 10:58오전
TCP RFC문서를 보고 이것을 분해하는 프로그램을 짜고 있는데,
그곳에 설명되어 있는 내용 중에 Urgent (URG) bit와 Urgent 포인터 부분이
도저히 머리에 안 들어오네요.
다행히도 제가 덤프 떠본 패킷에서는 이 비트가 set된 패킷이 없어서 어느정도
분석이 가능했습니다만(URG=0, URG PTR=0) 이들의 의미가 궁금합니다,
그리고 Push Function Bit (PSH)도 어떤의미인지 궁금하네요.
덤프 떠서 분석해본 패킷에서는 데이터 날리는 것 같은데, 이 비트 없이
데이터가 날라간 것도 없고, 이 비트가 set 된 채로 날라간 것도 있습니다.
RFC 문서 읽기 정말 어렵네요. :cry:
Forums:
Urgent flag는 클라이언트가 서버에게 (혹은 그 반대의 경우) 현
Urgent flag는 클라이언트가 서버에게 (혹은 그 반대의 경우) 현재의 TCP
flow와는 상관없는 일을 시키고 싶을때 사용하는것입니다. 예를 들자면
클라이언트가 Urgent flag를 설정해서 패킷을 "A"라고 전송하게 되면
서버는 SIGUSR Signal을 받게 됩니다. 핸들러를 설정해 놓았다면 잠시
다른 작업을 수행하고 다시 원래의 Flow로 돌아올 수 있는 것입니다.
소켓에서 사용할때는 옵션으로 MSG_OOB를 설정하시면 됩니다.
그리고 Push flag는 빈번하게 사용됩니다. 예를 들어서 MTU가 1500인데
3500byte를 전송했다. 그러면 1500, 1500, 500 이렇게 세번으로
나누어서 전송하겠죠? 그러면 마지막 500byte를 전송할때 Push flag를
설정해서 여기가 끝이니까 이제 묶어서 버퍼로 올려 보내라~
뭐 이렇게 서버에게 가르쳐 주는 겁니다. 소켓 프로그래밍을 하신다면 이런
flag는 socket layer 에서 알아서 해주니까 신경 쓰실 필요 없습니다.
아 그리고 Urgent pointer는 전송한 데이터의 맨 마지막 바이트
아 그리고 Urgent pointer는 전송한 데이터의 맨 마지막 바이트를
가리키므로 신경 쓰실 필요 없습니다. 1500byte를 MSG_OOB로
전송했다면 마지막 1500번째 바이트를 가리키는 것입니다.
(OOB는 Out of band의 약자입니다.)
감사합니다.
감사합니다.
Written By the Black Knight of Destruction
댓글 달기