2012-08-29 4 views
1

FastCGI 프로토콜이 1 바이트 패딩이있는 7 바이트 레코드 (통신에 사용되는 데이터 구조) 헤더를 정의한다는 사실을 알게되었습니다. 필요한 경우 다른 구조체도 패딩됩니다. 이 1 바이트가 무엇이든 변경되면, 나는 1000000 순차적 인 전송 및 7 및 8 바이트 버퍼의 수신을 시간 초과했다. 그리고 특히 ... 아무것도 발견하지 못했다. 몇몇 실행은 데이터를 가변적으로 제공했기 때문에 평균화 할 가치조차 없었습니다. (testing code)TCP를 통해 전송할 때 데이터 구조 패딩

TCP를 통해 7 바이트 데이터를 전송해야한다면 1 바이트를 추가하면되므로 전송 및 읽기가 8 바이트 버퍼에서 작동합니다. 어디에서 오는 것이고 어떤 덧씌우 기가 적절한 지 어떻게 알 수 있습니까? socket이 Unix 파일 소켓 또는 INET 소켓 인 경우에는 다른가요? 보낸 사람과받는 사람이 같은 호스트에 있으면 다른 것입니까?

답변

1

이 다른 아키텍처의 alignment requirements로 돌아갑니다, 여기에 주요 목적은 엄격한 정렬 플랫폼에서 수행해야 할 데이터 복사를 최소화하고, 빠른 실행을 활용 상용 PC 하드웨어. 이것이 IP 및 TCP와 같은 대부분의 저수준 프로토콜이 32 또는 64 비트 경계에서 정렬 된 헤더에 정수를 갖는 이유입니다.

+0

데이터 구조 정렬 문제에 대해 알고 있었지만 높은 수준의 플랫폼 독립적 인 네트워크 프로토콜 사양이 자신을 신경 쓰지 않을 것이라고 생각했습니다. –

+0

그것은 어떤 종류의 프로토콜인지를 결정합니다. 예를 들어 텍스트 기반 인 HTTP는 상관하지 않습니다. 바이너리가 일반적으로하는 일은 결국 결국 물리적 인 머신의 모든 비트와 바이트로 이어집니다. –

1

아니요, 패딩은 네트워킹과 관련이 없습니다.

이러한 방식으로 정의 된 구조는 일반적으로 4 바이트 경계 (또는 64 비트 OS에서는 8 바이트)에 정렬됩니다. 더 여기를 참조하십시오 :

http://en.wikipedia.org/wiki/Data_structure_alignment

관련 문제