2012-05-04 4 views
15

TCP 헤더의 시퀀스 번호 생성 방법을 이해하려고합니다.TCP 시퀀스 번호

일부 사이트에서는 "패킷의 첫 번째 바이트 인덱스"(link here)를 읽었으며 일부 다른 사이트에서는 임의의 32 비트가 생성 된 숫자가 증가합니다.

내가 정말 그렇게 여기에 몇 가지 질문이있는, 어떤 알 수없는

:

  • 어떻게 초기 시퀀스 번호가 생성이? (있을 경우 rfc 번호)
  • 어떻게 증가합니까?
  • 비밀 키는 어떻게 생성됩니까?

나는 RFC 6528, RFC 793RFC 1948처럼 RFC 년대의 일부를 읽을 수 있지만 실제로 구현되는 하나 이해 수없는 것. "std"상태에 대해 읽었지 만 ...

미리 감사드립니다!

+1

구현은 무엇입니까? 그 구현의 소스는 구체적으로 묻고 있습니까? – geoffspear

+0

오, 미안 해요. 인터넷에서 (HTTP/TCP/IP) 검색 할 때 컴퓨터가 시퀀스 번호를 생성하는 데 사용하는 것은 무엇입니까? 어떻게 작동합니까? –

+0

이것은 프로그래밍 문제가 아닙니다. – geoffspear

답변

27

TCP 연결의 각 끝점은 보내는 패킷의 시작 시퀀스 번호를 설정하고이 번호를 연결을 설정하는 과정에서 보내는 SYN 패킷으로 보냅니다.

시작 시퀀스 번호를 선택할 때 특정 절차를 따르는 데 어느 쪽이든 끝까지 요구 사항이 없습니다. 운영 체제는 원하는 메커니즘을 자유롭게 사용할 수 있지만 일반적으로 임의의 번호를 선택하는 것이 가장 안전합니다.

시작 지점에서 전송 된 각 패킷에는 두 개의 시퀀스 번호가 있습니다. 하나는 스트림에서 패킷이있는 위치를 지정하는 번호이고, 바이트를 나타내는 ACK 시퀀스 번호입니다. 두 숫자는 시작 순서 번호에 의해 상쇄됩니다.

Wikipedia에 대한 모든 내용은 물론 - 모든 세부 정보를 얻으려면 해당 페이지의 "시퀀스 번호"를 찾으십시오.

+0

감사합니다. 귀하의 빠른 답변을 위해! = D 나는 그것이 더 잘 압니다. 그냥 두 가지 후속 질문 ^^ : 난수가 어떻게 생성되는지 아십니까? 그리고 설명하는 절차가 어떤 RFC 번호에 해당하는지 알고 있습니까? 다시 Thx! –

+2

@AwakeZoldiek 설명 된 바와 같이 초기 시퀀스 번호는 _any_ 메서드로 선택할 수 있습니다. 최상의 보안을 위해서는 좋은 난수 생성기를 사용하여 선택해야합니다. SYN 및 ACK 시퀀스 번호는 모두 핵심 RFC 793 문서에 있습니다. – Alnitak

+0

귀하의 asnwers 주셔서 감사합니다! =) –

2

4.4BSD (및 대부분의 버클리에서 파생 된 구현)에서 시스템을 초기화 할 때 초기 송신 순서 번호는 1로 초기화됩니다.이 방법은 호스트 요구 사항 RFC를 위반합니다. 코드의 주석은 이것이 틀렸다는 것을 인정합니다.이 변수는 0.5 초마다 64,000 씩 증가하고 매 9.5 시간마다 0으로 순환합니다. (이 값은 매 4 마이크로 초가 아니라 8 마이크로 초마다 증가하는 카운터에 해당합니다.) 또한 연결이 설정 될 때마다이 변수가 64,000 씩 증가합니다.