2011-02-23 3 views
2

그래서 클라이언트는 seq가있는 서버에 SYN 패킷을 보내 TCP 연결을 시작합니다. # X 서버는 X + 1에 대해 SYN + ACK로 응답합니다. 근접 접속 프로토콜이 제정 될 때 FIN 패킷에 대해서도 마찬가지이다.TCP 3- 방향 핸드 셰이크 질문

내 질문에 왜 X 서버 대신 X + 1에 대한 ACK 않습니다? 나는 SYN과 FIN 패킷이 어떤 데이터도 피기 백하지 않는다고 생각했다. 이것에 대한 다른 이유가 있습니까? 서버가 X 대신 ACK X + 1을 표시하는 이유에 대해 혼란 스럽습니다.

+0

논문은 (http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-tomlin75.ps)는 일련 번호를 선택하는 방법에 대해 설명 [S. 레이몬드 톰린슨 의해 시퀀스 번호를 선택]. –

답변

3

보낼 시퀀스 번호는 다음 예상 시퀀스 번호입니다. 증가하지 않았다면 답장은 패킷이 수락되지 않았 음을 나타내므로 다시 보내주십시오. 이것은 무한 루프로 끝날 것입니다.

SYN은 그 자체로 정보를 전송하는 특수한 경우입니다. (목적지에서 수신 된 카운트를 초기화합니다.) ACK는 다음 예상 된 바이트 (SYN + 1)에 대한 것입니다.

ACK 카운트가 항상 증가하는 것은 아니며 1보다 커질 수 있습니다. 패킷 2가 지연되어 순서가 잘못된 경우이 교환을 고려하십시오.

Received ACK 
    1   2 
    3   2 
    4   2 
    2   5
+0

ACK 번호가 (시퀀스 번호) + N으로 지정된 경우 프로토콜은 정상적으로 작동합니다. 결국 ACK 번호를받는 측은 시퀀스 번호에 대한 상수를 추가 할 수 없도록 되돌릴 수 있습니다. 질문은 N이 1 인 이유라고 생각합니다. 예 : N = 1이면 가능한 TCP 구현의 미세 최적화가 있습니까? –

+0

@AmbrozBizjak N 또는 N + 1 중 하나를 선택했을 수 있습니다. N + 1은 버퍼 주소 위치 계산을 더 간단하게 만든다고 생각합니다. – BillThor

관련 문제