2011-09-12 5 views
0

관련된 모든 인터페이스 (라우터 및 브리지)가 LRO/TSO 기술을 지원해야하는 이유는 무엇입니까?TCP - LRO/TSO 기술

+0

나는 그것이 필요한지 모른다. 그러한 요구 사항에 대한 참조를 제공 할 수 있습니까? –

답변

2

라우터는 그렇지 않습니다. 교량 않습니다.

외부 라우터, 허브, 스위치 또는 네트워크에 외부 연결되어있는 다른 장치는 TSO의 영향을 볼 수 없으며 TSO가있는 장치 내부의 인터페이스 만 영향을받습니다. 이는 소프트웨어적인 것입니다.

라우터는 이더넷 케이블, 광섬유 케이블, 무선 통신 등으로 네트워크에 연결된 외부 장치입니다. 이러한 통신 매체는 이더넷의 경우 803.2 또는 무선의 경우 803.11과 같은 국제 표준을 준수합니다. 하드웨어 장치 , 하드웨어 장치에는 통신 방법에 대한 매우 엄격한 규칙이 있습니다.

브리지는 내부 소프트웨어 구조이며 사용자 OS에 따라 다릅니다.

예를 들어 803.2 (이더넷)과 리눅스 호스트를 사용합시다.

응용 프로그램에서 소켓을 만들도록 요청한 다음 큰 데이터 청크를 소켓에 푸시합니다. 리눅스 커널은이 데이터가 전송 될 인터페이스를 결정합니다. 커널은이 인터페이스의 드라이버를 확인하여 그 기능을 결정합니다. 인터페이스가 TSO 가능하면 커널은 하나의 "템플릿"헤더와 거대한 데이터 덩어리 (1 패킷 이상)가있는 인터페이스를 sk_buff로 전달합니다 운전사.

의 바로 첫 번째 하드웨어 NIC에 표준 인터페이스를 생각해 보자 :

일부 인터페이스가 가짜 TSO (그들은 세그먼트 드라이버에서 패킷) 일부는 사실 TSO (템플릿 헤더와 데이터에 전달했다 최소한의 변경으로 하드웨어). 이 시점에서 드라이버 또는 NIC 하드웨어는이 큰 세그먼트의 데이터를 여러 개의 표준 호환 이더넷 프레임으로 변환합니다. 라우터, 허브, 스위치, 모뎀 또는 다른 호스트와 같은 외부 장치 전선에서 볼 수 있습니다. 이제

의이 소프트웨어 다리 뒤에 여러 NIC를 살펴 보자 : 커널이 낮은 수준에서 각 NIC의 인식

있지만은, 네트워크 스택 따라서, 단지 기능의 모든 신부의 인식 기본 NIC는 브리지까지 전달되어야합니다. sk_buff가 브릿지에 전달되면 브릿지의 모든 인터페이스는 동일한 sk_buff를 수신합니다. kernal이 다시 한번 우리의 대형 TSO sk_buff를 브리지에 전달했다고 가정 할 것입니다. 기본 인터페이스 중 하나가 TSO를 지원하지 않으면 패킷이 하드웨어 NIC에 의해 삭제 될 가능성이 큽니다. 요약

:

최악의 시나리오는 다리가 반복적으로 응용 프로그램을 포기하기로 결정 때까지 잠 깁니다 깨진 인터페이스와 전체 다리에 동일한 데이터 청크를 보낼 시도합니다입니다. 가장 좋은 시나리오는 비 TSO NIC가 단순히 죽은 것처럼 보일뿐입니다.

즉, NIC에 드라이버에 안전하지 않은 코드가있는 경우 전체 시스템을 다운시킬 수있는 세그먼트 오류가 발생할 수 있습니다.