>  기사  >  끈적한 TCP 패킷 문제를 해결하는 방법은 무엇입니까?

끈적한 TCP 패킷 문제를 해결하는 방법은 무엇입니까?

coldplay.xixi
coldplay.xixi원래의
2020-06-28 13:02:557395검색

tcp 끈적한 패킷 문제를 처리하는 방법: 1. 고정 길이 전송 방법, 전송 측에서는 데이터를 보낼 때 LEN을 길이로 사용하여 패킷화합니다. 2. 테일 마크 시퀀스 방법, 각 데이터 패킷의 끝에 설정됩니다. 전송된 특수 바이트 시퀀스 3. 헤더 표시 단계별 수신 방법, 사용자 헤더를 정의하고 헤더에 전송된 각 데이터 패킷의 크기를 나타냅니다.

끈적한 TCP 패킷 문제를 해결하는 방법은 무엇입니까?

tcp의 끈적한 패킷 문제를 처리하는 방법:

1. 디자인 계획 1: 고정 길이 전송

데이터를 보낼 때 고정 길이 디자인을 사용하세요. 데이터의 크기에 따라 분할됩니다. 패킷은 고정된 길이입니다(여기서는 설명의 편의를 위해 고정된 길이를 LEN으로 기록합니다). 즉, 송신자는 데이터를 보낼 때 패킷화할 길이로 LEN을 사용합니다. 이런 방식으로 수신기는 고정된 LEN으로 수신하므로 송신과 수신이 일대일로 대응될 수 있습니다. 하위 패키징 시 여러 개의 완전한 LEN 패킷으로 완전히 분할되지 않을 수 있습니다. 일반적으로 마지막 패킷은 LEN보다 작습니다. 이때 마지막 패킷은 누락된 부분을 공백 바이트로 채울 수 있습니다.

물론 이 접근 방식에는 결함이 있습니다.

1. 마지막 패킷의 길이가 부족하여 공백 부분으로 채워져 있으며 이는 잘못된 바이트 순서입니다. 그러면 수신자는 이 잘못된 부분을 식별하는 데 어려움을 겪을 수 있습니다. 이는 단지 채우기 위한 것일 뿐 실제 의미는 없습니다. 이로 인해 수신 측에서 그 의미를 처리하는 데 문제가 발생합니다. 물론, 플래그 비트를 추가하여 보완할 수 있는 방법, 즉 각 데이터 패킷의 앞에 고정 길이 헤더를 추가한 후 데이터 패킷의 끝 표시를 함께 보내는 방법도 있습니다. 수신자는 이 표시를 기반으로 잘못된 바이트 시퀀스를 확인함으로써 데이터의 완전한 수신을 달성합니다.

2. 전송된 패킷의 길이가 무작위로 분산되면 대역폭이 낭비됩니다. 예를 들어 전송 길이는 1,100, 1000, 4000바이트 등일 수 있으며 모두 최대 고정 길이인 4000에 따라 전송되어야 합니다. 4000바이트보다 작은 데이터 패킷이 포함된 다른 패킷도 채워집니다. 4000, 네트워크 로드가 비효율적으로 낭비됩니다.

요약하자면, 이 솔루션은 전송된 데이터 패킷의 길이가 상대적으로 안정적인 경우(특정 고정 값 경향) 더 나은 결과를 얻는 데 적합합니다.

관련 학습 권장사항: PHP 초보자부터 숙련자까지 프로그래밍

2. 설계 계획 2: 테일 마크 시퀀스

전송할 각 데이터 패킷의 끝에 특수 바이트 시퀀스를 설정합니다. 이 시퀀스는 특별한 의미를 가지며 그 뒤에는 "터미네이터" 문자열이 옵니다. 식별자"

장점: 프로그램 설계의 복잡성을 방지하고 효율성을 쉽게 확인할 수 있으며 소프트웨어 설계의 안정성 요구 사항을 더 쉽게 충족할 수 있습니다. 정리하자면, 3번 방안이 최선의 정책입니다!

위 내용은 끈적한 TCP 패킷 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.