TCP 패킷 헤더의 시퀀스 번호가 줄 바꿈됩니까?


16

TCP 헤더 필드의 시퀀스 번호가 핸드 셰이크 중에 무작위로 선택되고 패킷이 교환됨에 따라 점차 증가하기 때문에 2 ^ 32-initial_seq_no 전송 후 어떻게됩니까? 시퀀스 번호가 줄 바꿈되어 0이되거나 초기 값이 재사용됩니까 (또는 이전 연결이 중지 된 위치에서 새 연결이 초기화 되었습니까)?

답변:


19

RFC 793 에 따르면 :

실제 시퀀스 번호 공간은 매우 크지 만 유한하다는 것을 기억해야합니다. 이 공간의 범위는 0에서 2 ** 32-1입니다.이 공간은 유한하기 때문에 시퀀스 번호를 다루는 모든 산술은 모듈로 2 ** 32로 수행되어야합니다. 이 부호없는 산술은 시퀀스 번호가 2 ** 32-1에서 0으로 다시 순환 할 때 시퀀스 번호의 관계를 유지합니다. 컴퓨터 모듈로 산술에는 미묘한 부분이 있으므로 이러한 값의 비교를 프로그래밍 할 때는 각별히주의해야합니다. "= <"기호는 "작거나 같음"을 의미합니다 (모듈로 2 ** 32).


3
모든 숫자는 다른 모든 숫자보다 작거나 같습니다, 모듈로 2 ** 32 ...
user253751

2
@ user20574 따라서 TCP 창 크기가 1GB보다 커질 수 없으며 시퀀스 번호 비교가 가장 짧아야합니다 (즉, 차이는 -2 ^ 31 ~ 2 ^ 31 범위에 있어야 함).
kasperd

17

시퀀스 번호가 줄 바꿈되어 0이됩니까?

예. 모든 세부 사항은 TCP 사양 RFC 793- 전송 제어 프로토콜 에서 찾을 수 있습니다 .


시퀀스 번호

실제 시퀀스 번호 공간은 매우 크지 만 유한하다는 것을 기억해야합니다. 이 공간은 0 내지 2의 범위 32 - 1 사이입니다.

공간이 유한하기 때문에 시퀀스 번호를 다루는 모든 산술은 모듈로 2 32 로 수행되어야합니다 . 이 부호없는 산술은 시퀀스 번호가 2 32-1 에서 0으로 다시 순환 할 때 시퀀스 번호의 관계를 유지 합니다.

컴퓨터 모듈로 산술에는 미묘한 부분이 있으므로 이러한 값의 비교를 프로그래밍 할 때는 각별히주의해야합니다. "= <"기호는 "작거나 같음"을 의미합니다 (모듈로 2 32 ).

소스 RFC 793-전송 제어 프로토콜


1
나는 메신저를 쏘는 것이 아니라 "모듈러스 N"이하입니까? 분명히 RFC 저자는 "컴퓨터 모듈 산술에 대한 미묘함"을 놓쳤다.
벤 Voigt

최대 창이 2 ^ 31보다 작은 경우 xand y유형 인 경우 mean uint32_t을 정의 x<=y하는 것이 실용적 (uint32_t)(y-x) < 0x80000000입니다.
supercat

@BenVoigt, mor는 나중에 RFC 도구에
Carsten S

유용한 연산이지만은 "산술 모듈로 N"아니다 @Carsten
벤 보이트

1
@BenVoigt, 예, 뭐든간에. Btw, 나는 그룹 Z / (n)이 순서가 없다는 것을 잘 알고 있지만, 문맥에서 진술을 해석 할 수도 있습니다.
Carsten S

7

그렇습니다. 랩핑 된 시퀀스 번호로부터 보호하는 방법을 보여주는 Wikipedia 또는 RFC1323 에서 읽을 수 있습니다 .

인용하겠습니다 :

TCP 타임 스탬프는 랩핑 된 시퀀스 번호 또는 PAWS로 알려진 알고리즘에 사용됩니다 (자세한 내용은 RFC 1323 참조). 수신 창이 시퀀스 번호 랩 어라운드 경계를 교차 할 때 PAWS가 사용됩니다. 패킷이 재전송 될 가능성이있는 경우 "이 시퀀스 번호는 처음 4GB 또는 두 번째입니까?"라는 질문에 대답합니다. 그리고 타임 스탬프는 넥타이를 끊는 데 사용됩니다.

과:

PAWS는 앞에서 설명한 RTTM 메커니즘과 동일한 TCP 타임 스탬프 옵션을 사용하며, 수신 된 모든 TCP 세그먼트 (데이터 및 ACK 세그먼트 포함)에는 타임 스탬프 SEG.TSval이 시간에 따라 모노톤 감소하지 않는 타임 스탬프를 포함한다고 가정합니다. 기본 아이디어는 세그먼트가이 연결에서 최근에 수신 된 일부 타임 스탬프보다 적은 타임 스탬프 SEG.TSval로 수신 된 경우 이전 복제본으로 버려 질 수 있다는 것입니다.

PAWS와 RTTM 메커니즘에서 "타임 스탬프"는 모듈 식 32 비트 공간에서 부호없는 32 비트 정수입니다. 따라서 "보다 작음"은 TCP 시퀀스 번호와 동일한 방식으로 정의되며 동일한 구현 기술이 적용됩니다. s 및 t가 타임 스탬프 값이면 s <t if 0 <(t-s) <2 ** 31이며 부호없는 32 비트 산술로 계산됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.