본문 바로가기

누군가 저에게 다음과 같은 추적 정보를 보내며 "패킷 번호"가 중복되어 재전송을 나타내는지 물었습니다.

T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0486 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 PA
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0044 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 PA
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A

그녀가 "패킷 번호"라는 표현을 사용한 점에 약간 혼란스러웠는데, 그녀가 언급한 것은 마지막 두 개의 숫자 열이었습니다. 저는 이것이 패킷 번호가 아니라 송신 포트 번호와 수신 포트 번호라고 설명했습니다. 안타깝게도 그녀가 TCP 패킷 헤더에서 재전송 여부를 판단할 수 있을 만큼 충분한 정보를 추출하지 못했기 때문에 그녀의 질문에 답할 수 없었습니다.

어떤 TCP 패킷이 재전송인지 판단하려면 해당 패킷의 시퀀스 번호를 캡처해야 합니다. 모든 TCP 연결 시작 시 두 호스트는 임의의 시퀀스 번호를 선택한 후, 전송하는 TCP 데이터의 각 바이트마다 시퀀스 번호를 증가시킵니다. 수신 호스트는 확인 응답 필드에 다음에 수신할 것으로 예상하는 시퀀스 번호를 에코하여 반환합니다.

다음 예시는 패킷 전송 또는 수신 여부 이상의 정보를 원할 경우 packet_monitor에 권장하는 최소 제어 인수 세트를 보여줍니다. interface 인수는 모니터링할 IP 인터페이스를 지정합니다. 인터페이스 이름을 제공하지 않으면 packet_monitor는 모든 인터페이스를 모니터링합니다. packet_monitor는 대량의 스트림 메모리를 사용할 수 있으며, interface 인수를 사용하면 이 양을 줄이는 데 도움이 됩니다. -verbose 인수는 시퀀스 번호와 확인 응답 번호를 실제로 출력하는 역할을 합니다. 이 옵션이 없으면 재전송을 식별할 방법이 없습니다. 또한 트레이스 분석에 유용한 다른 정보들, 예를 들어 생존 시간(TTL) 및 창 크기(window) 값도 출력합니다. -filter -host 및 -port 인수는 특정 연결을 식별하고 확인해야 할 패킷 수를 줄이는 데 도움이 됩니다.

packet_monitor -interface #sdlmux.m16.11-2 -verbose -filter -host 172.16.1.34 -p
 +port 23
dir                                                 icmp type           tcp
dir   len proto source             destination         src port dst port type
Xmit IP  Ver/HL 45, ToS 0, Len   29, ID 8569, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9eaf, Src ac100174, Dst ac100122
TCP from phx_vos-m16.51094 to 172.16.1.34.telnet
seq   448953077, ack 1766884569, window 65535, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum 9c85, Urg-> 0000
수신 IP   버전/헤더 45, ToS 0, 길이   29, ID 45db, 플래그/분할    0, TTL 3c, 포트 6
체크섬 de3d, 송신원 ac100122, 수신지 ac100174
TCP from 172.16.1.34.telnet to phx_vos-m16.51094
seq 1766884569, ack 448953078, window 8192, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum c984, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 8576, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9ea2, Src ac100174, Dst ac100122
TCP from phx_vos-m16.51094 to 172.16.1.34.telnet
seq   448953078, ack 1766884570, window 65535, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum d883, Urg-> 0000
수신 IP   버전/헤더 45, ToS 0, 길이   29, ID 45dc, 플래그/프레임    0, TTL 3c, 프로토콜 6
체크섬 de3c, 송신원 ac100122, 수신지 ac100174
TCP from 172.16.1.34.telnet to phx_vos-m16.51094
seq 1766884570, ack 448953079, window 8192, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum c982, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   28, ID 8580, Flg/Frg   0, TTL 3c, Prtl 6
Cksum 9e99, Src ac100174, Dst ac100122
TCP from phx_vos-m16.51094 to 172.16.1.34.telnet
seq   448953079, ack 1766884571, window 65535, 0 data bytes, flags Ack.
X/Off 05, Flags 10, Cksum 098b, Urg-> 0000
수신 IP   버전/헤더 45, ToS 0, 길이   28, ID 45dd, 플래그/분할    0, TTL 3c, 포트 6
체크섬 de3c, 송신원 ac100122, 수신지 ac100174
TCP from 172.16.1.34.telnet to phx_vos-m16.51094
seq 1766884571, ack 448953079, window 8192, 0 data bytes, flags Ack.
X/Off 05, Flags 10, Cksum e98a, Urg-> 0000

위 시퀀스 번호는 각 패킷이 1바이트의 데이터만 포함하기 때문에 1씩 증가합니다. 만약 패킷이 10바이트, 23바이트 또는 1023바이트를 포함했다면 시퀀스 번호는 각각 10, 23 또는 1023씩 증가했을 것입니다.

재전송은 어떻게 보일까요? 재전송 시 시퀀스 번호는 이전 시퀀스 번호보다 작거나 같으며 최소 1바이트의 데이터를 포함합니다. 데이터가 없는 패킷은 재전송으로 간주되지 않습니다. 다음 예시에서 시퀀스 번호 448953089가 여러 번 반복됩니다. 첫 번째를 제외한 모든 경우가 재전송입니다.

packet_monitor -interface #sdlmux.m16.11-2 -verbose -filter -host 172.16.1.34 -p
+ort 23
dir                                                 icmp type           tcp
dir   len proto source             destination         src port dst port type
수신 IP   버전/헤더 45, ToS 0, 길이   28, ID 4d43, 플래그/분할    0, TTL 3c, 포트 6
체크섬 d6d6, 발신 ac100122, 수신 ac100174
TCP from 172.16.1.34.telnet to phx_vos-m16.51094
seq 1766885133, ack 448953089, window 8192, 0 data bytes, flags Ack.
X/Off 05, Flags 10, Cksum e74e, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 9191, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9287, Src ac100174, Dst ac100122
TCP from phx_vos-m16.51094 to 172.16.1.34.telnet
seq   448953089, ack 1766885133, window 65535, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 919a, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 927e, Src ac100174, Dst ac100122
TCP from phx_vos-m16.51094 to 172.16.1.34.telnet
seq   448953089, ack 1766885133, window 65535, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 91a0, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9278, Src ac100174, Dst ac100122
TCP from phx_vos-m16.51094 to 172.16.1.34.telnet
seq   448953089, ack 1766885133, window 65535, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
. . .
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 91f9, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 921f, Src ac100174, Dst ac100122
TCP from phx_vos-m16.51094 to 172.16.1.34.telnet
seq   448953089, ack 1766885133, window 65535, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
수신 IP   버전/헤더 45, ToS 0, 길이   29, ID 4f04, 플래그/분할    0, TTL 3c, 포트 6
체크섬 d514, 발신 ac100122, 수신 ac100174
TCP from 172.16.1.34.telnet to phx_vos-m16.51094
seq 1766885133, ack 448953090, window 8192, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum 7744, Urg-> 0000

인터페이스 및 verbose 인수 외에도 time_stamp 및 numeric 인수를 포함할 것입니다. time_stamp 인수는 표시되는 모든 패킷에 타임스탬프를 추가합니다. 이를 통해 로그 파일의 메시지와 추적을 쉽게 연관 지을 수 있으며, 재전송 시퀀스와 같은 이벤트가 실제로 얼마나 오래 지속되는지 추정할 수 있습니다. numeric 인수는 호스트 또는 포트 이름을 조회하지 않음으로써 오버헤드를 줄입니다.

패킷 모니터 -인터페이스 #sdlmux.m16.11-2 -상세 -시간_스탬프 -숫자 -필터
+ -호스트 172.16.1.34 -포트 23
디렉토리                                                 icmp 유형
+        tcp
hh:mm:ss.ttt dir   len proto source             destination         src port ds
+t port type
14:30:17.604 Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 9b7b, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 889d, Src ac100174, Dst ac100122
TCP from 172.16.1.116.51094 to 172.16.1.34.telnet
순번   448953090, 확인 1766885134, 창 65535, 데이터 바이트 1, 플래그 Push Ack.
X/Off 05, 플래그 18, 체크섬 9b43, 긴급-> 0000
14:30:17.606 수신 IP   Ver/HL 45, ToS 0, 길이   29, ID 5442, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum cfd6, Src ac100122, Dst ac100174
TCP from 172.16.1.34.telnet to 172.16.1.116.51094
seq 1766885134, ack 448953091, window 32768, 1 data bytes, flags Push Ack.
X/Off 05, Flags 18, Cksum 1b42, Urg-> 0000

TCP 또는 IP 계층에서 문제가 발생했다고 판단되면 일반적으로 이 정보만으로 충분합니다. 그러나 애플리케이션 계층에서 문제가 발생할 가능성이 있다면 실제 데이터도 확인해야 합니다. -hex_dump 인수를 사용하면 데이터를 표시할 수 있습니다. 기본적으로 데이터의 첫 128바이트만 표시됩니다. 안전을 위해 저는 항상 길이를 1500으로 설정하여 패킷 내 모든 데이터를 표시합니다.

패킷 모니터 -인터페이스 #sdlmux.m16.11-2 -상세 출력 -시간 스탬프 -숫자 표시 -16진수 표시
+mp -길이 1500 -필터 -호스트 172.16.1.34 -포트 23
목록                                                 icmp 유형
+        tcp
hh:mm:ss.ttt dir   len proto source             destination         src port ds
+t port type
10:25:19.387 Rcvd IP   Ver/HL 45, ToS 0, Len   3b, ID f8f, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 1478, Src ac100122, Dst ac100174
TCP from 172.16.1.34.49562 to 172.16.1.116.telnet
seq   110526313, ack 1206659552, window 32768, 19 data bytes, flags Push Ack
+.
X/Off 05, Flags 18, Cksum d3ee, Urg-> 0000
offset 0 . . . 4 . . .   8 . . . C . . . 0...4... 8...C...
0    54 68 69 73 20 69 73 20 6f 6e 6c 79 20 61 20 74 * This is only a t
10    65 73 74                                         * est
10:25:19.389 Xmit IP   Ver/HL 45, ToS 0, Len   3b, ID f969, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 2a9d, Src ac100174, Dst ac100122
TCP from 172.16.1.116.telnet to 172.16.1.34.49562
seq 1206659552, ack 110526332, window 8192, 19 data bytes, flags Push Ack
+.
X/Off 05, Flags 18, Cksum 33dc, Urg-> 0000
offset 0 . . . 4 . . .   8 . . . C . . . 0...4... 8...C...
0    54 68 69 73 20 69 73 20 6f 6e 6c 79 20 61 20 74 * This is only a t
10    65 73 74                                         * est
10:25:22.263 Xmit IP   Ver/HL 45, ToS 0, Len   28, ID f994, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 2a85, Src ac100174, Dst ac100122
TCP from 172.16.1.116.telnet to 172.16.1.34.49562
seq 1206659571, ack 110526332, window 8192, 0 data bytes, flags Ack.
X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000
TCP 데이터 없음.

패킷 모니터 추적 데이터를 타인에게 전송하기 전에 반드시 데이터를 정제하십시오. 텍스트와 16진수 값 모두에서 독점 정보를 제거해야 합니다. 상황에 따라 IP 주소도 정제할 수 있습니다. IP 주소는 두 곳에 나타납니다. 프로토콜 헤더 디코드 라인에서는 표준 점으로 구분된 십진수 표기법으로 표시됩니다. 디코드 라인 바로 위의 라인에서는 16진수 값으로 표시됩니다.

10:25:22.263 Xmit IP   Ver/HL 45, ToS 0, Len   28, ID f994, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 2a85, Src ac100174, Dst ac100122
TCP from 172.16.1.116.telnet to 172.16.1.34.49562
seq 1206659571, ack 110526332, window 8192, 0 data bytes, flags Ack.
X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000
TCP 데이터 없음.

© 2024 Stratus Technologies.