저자는 TCP를 설명하는 Python 네트워크 프로그래밍에 대한 평판이 좋은 책 (질문을 책의 광고로 생각하지 않는 제목은 언급하지 않음)에서 다음과 같이 썼습니다.
순차 정수 (1, 2, 3 ...)를 사용하여 패킷을 시퀀스하는 대신 TCP는 전송 된 바이트 수를 계산하는 카운터를 사용합니다. 예를 들어, 시퀀스 번호가 7,200 인 1,024 바이트 패킷 뒤에는 시퀀스 번호가 8,224 인 패킷이옵니다. 이는 바쁜 네트워크 스택이 데이터 스트림을 패킷으로 분리하는 방법을 기억할 필요가 없음을 의미합니다. 재전송을 요청하면 스트림을 다른 방법으로 새 패킷으로 나눌 수 있으며 (이제 더 많은 바이트가 전송을 기다리고있는 경우 패킷에 더 많은 데이터를 넣을 수 있음) 수신자는 패킷을 다시 함께 넣을 수 있습니다.
어떻게 그 번호 지정 패턴 (모든 시퀀스 패킷에 1을 추가하는 대신 패킷의 바이트 수를 세는 것)이 송신자가 패킷을 더 쉽게 재전송 할 수 있도록합니까?
본질적으로 각 바이트에 이러한 방식으로 번호가 매겨져 있으므로 이미 사용 된 상위 시퀀스 ID 에 대해 걱정할 필요없이 새 시퀀스 ID를 생성 할 수 있기 때문에 더 쉽습니다 .
처음 8,224 바이트의 전송이 성공했지만 다음 2 개의 패킷을 다시 전송해야한다고 가정 해 보겠습니다. 또한 마지막 2 개의 패킷은 최적의 크기가 아니며 길이가 2048 바이트이고 1024 바이트가 더 나은 패킷 크기입니다 (아마도 경로가 전환되었거나 다른 이유로).
패킷에 순차적으로 번호가 매겨진 경우 이미 수신 된 이후 패킷이 시리즈의 다음 번호를 이미 사용하므로이 두 패킷을 분리 할 수 없습니다 . 이 두 패킷은 10과 11로 번호가 매겨 질 수 있으며, 이러한 숫자는 이미이 일련의 패킷에서 사용 되었기 때문에이를 분리하고 12와 13도 사용합니다.
그러나 8224 및 10272를 대신 사용했다면 이제 전체 시퀀스의 순서를 깨지 않고 패킷을 분할하고 시퀀스 번호 8224, 9248, 10272 및 11296을 보낼 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다