TCP 빠른 열기
TCP Fast Open을 사용하여 보다 효율적인 데이터 교환
TFO(TCP Fast Open)는 TCP 세션 중 표준 3방향 연결 핸드셰이크를 통해 최대 한 번의 RTT(전체 왕복 시간)를 절약하는 TCP에 대한 업데이트입니다. TFO 지원은 MS-MPC 및 MS-MIC를 위한 것입니다.
표준 3방향 연결 핸드셰이크에는 두 호스트 간의 세 세트의 송수신 메시지와 다음과 같은 SYN(동기화) 및 ACK(승인) 패킷 교환이 포함됩니다.
호스트 A는 호스트 B에게 TCP SYN 패킷을 보내고, 호스트 B는 이를 수신합니다.
호스트 B는 호스트 A에게 SYN-ACK 패킷을 전송하고, 호스트 A는 이를 수신합니다.
호스트 A는 호스트 B에게 ACK 패킷을 보내고 호스트 B는 ACK 패킷을 수신합니다.
표준 TCP에서는 데이터가 SYN 패킷으로 전송될 수 있지만 이 데이터는 3방향 핸드셰이크가 완료될 때까지 전달될 수 없습니다. TFO는 이러한 제약 조건을 제거하고 SYN 패킷의 데이터를 애플리케이션에 전달할 수 있도록 하여 대기 시간을 크게 개선합니다.
TFO의 핵심 구성 요소는 서버에서 생성되는 MAC(메시지 인증 코드) 태그인 Fast Open Cookie(쿠키)입니다. 클라이언트는 하나의 일반 TCP 연결에서 쿠키를 요청한 다음 핸드셰이크 중에 데이터를 교환하기 위해 향후 TCP 연결에 쿠키를 사용합니다.
TFO 옵션은 TFO 쿠키를 요청하거나 보내는 데 사용됩니다. 쿠키가 없거나 비어 있는 경우 클라이언트는 이 옵션을 사용하여 서버에서 쿠키를 요청합니다. 쿠키가 있는 경우 옵션은 서버에서 클라이언트로 또는 클라이언트에서 서버로 쿠키를 다시 전달하는 데 사용됩니다.
다음 목록에서는 클라이언트가 TFO 쿠키를 요청하는 방법을 간략하게 설명합니다.
클라이언트는 쿠키 필드가 비어 있는 TFO 옵션과 함께 SYN을 보냅니다.
서버는 쿠키를 생성하여 SYN-ACK 패킷의 TFO 옵션을 통해 보냅니다.
클라이언트는 향후 TFO 연결을 위해 쿠키를 캐시합니다.
그 후 두 디바이스는 TFO 교환을 수행합니다.
클라이언트는 TFO 옵션의 데이터 및 쿠키와 함께 SYN을 보냅니다.
서버는 쿠키의 유효성을 검사합니다.
쿠키가 유효한 경우 서버는 SYN과 데이터를 모두 승인하는 SYN-ACK를 보냅니다.
그런 다음 서버는 데이터를 응용 프로그램에 전달합니다.
그렇지 않으면 서버는 데이터를 삭제하고 SYN 시퀀스 번호만 승인하는 SYN-ACK를 보냅니다.
나머지 연결은 일반 TCP 연결처럼 진행됩니다. 클라이언트는 쿠키를 획득한 후(쿠키가 서버에 의해 만료될 때까지) 많은 TFO 작업을 반복할 수 있습니다. 따라서 TFO는 동일한 클라이언트가 동일한 서버에 여러 번 다시 연결하여 데이터를 교환하는 응용 프로그램에 유용합니다.
또한보십시오
TFO 구성
이 항목에서는 TFO(TCP Fast Open)의 세 가지 모드에 대해 설명하고 예제를 제공합니다. TFO와 함께 NAT를 사용하는 사례도 다룹니다.
TFO를 위한 세 가지 모드
TFO를 사용하기 위해 구성이 필요하지 않습니다. TFO는 기본적으로 사용하도록 설정되어 있습니다. 기본 모드에서는 모든 TFO 패킷이 서비스 PIC에 의해 전달됩니다. 기본 모드 외에 CLI를 통해 구성하는 TFO에 대한 두 가지 다른 모드가 있습니다.
TFO 삭제 - 이 모드가 설정되면 TFO 패킷이 전달되지 않습니다.
TFO 비활성화 - 이 모드가 설정된 경우 TFO, 데이터 또는 둘 다를 전달하는 모든 SYN 또는 SYN ACK 패킷이 전달되기 전에 TFO 및 데이터가 제거됩니다.
TFO 옵션은 서비스 집합별로 사용할 수 있습니다. 서비스 세트는 넥스트 홉 서비스 세트 또는 인터페이스 스타일 서비스 세트일 수 있습니다. 다음은 인터페이스 스타일 서비스 세트 구성의 예입니다.
[edit] services { service-set ss2 { stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } stateful-firewall { rule sfw_rule { match-direction input-output; term 0 { from { source-address { any-ipv4; } destination-address { any-ipv4; } then { accept; } } } } } }
이 경우 TFO는 기본적으로 사용하도록 설정됩니다(TFO 구성 없음). 명령의 show services service-sets statistics tcp
출력은 다음과 같습니다.
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 1 TFO packets stripped: 0
TFO 사용 패킷을 삭제하면 다음과 같은 구성 및 출력이 제공됩니다.
[edit] services { service-set ss2 { service-set-options { tcp-fast-open drop; } stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } }
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 1 TFO packets stripped: 0
TFO 옵션을 제거하면 그에 따라 구성 및 출력이 변경됩니다.
[edit] services { service-set ss2 { service-set-options { tcp-fast-open disabled; } stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } }
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 0 TFO packets stripped: 1
NAT 및 TFO 사용
NAT가 서비스 집합에 구성되어 있고 TFO를 사용하는 경우 APP(Address-Pooling Pairing)를 구성해야 합니다. APP를 사용하면 모든 세션에 대해 사설 IP 주소를 NAT 풀의 동일한 공용 IP 주소에 매핑할 수 있습니다.
APP를 구성하지 않으면 NAT는 이전에 서버로 전송한 것과 동일한 NAT 풀에서 클라이언트에 다른 IP 주소를 제공할 수 있습니다. 서버는 IP 주소를 인식하지 못하고 TFO 옵션을 삭제하고 SYN ACK로 응답하며 클라이언트가 보낸 데이터는 승인되지 않습니다. 따라서 연결에 성공하고 패킷이 손실되지 않더라도 TFO의 이점은 손실됩니다. 그러나 클라이언트가 동일한 IP 주소를 가지고 돌아오면 서버는 이를 인식하고 데이터를 승인합니다. 따라서 항상 TFO를 사용하여 매핑 시간 제한 값이 높은 APP를 활성화합니다.
앱 구성:
MS-DPC 및 MS-PIC 서비스 인터페이스에 대한 단편화 제어 구성
많은 수의 단편화된 패킷 처리로 인해 서비스 PIC에서 컴퓨팅 CPU 주기의 과도한 소비를 방지하기 위해 두 가지 구성 옵션을 사용할 수 있습니다. 이러한 프래그먼트 처리는 DOS 공격에 악용될 수 있습니다. 이 fragment-limit
옵션은 패킷에 대한 최대 조각 수를 설정합니다. 이 수를 초과하면 패킷이 삭제됩니다. 은(는 reassembly-timeout
) 패킷의 첫 번째 및 최신 프래그먼트 수신부터 최대 시간을 지정합니다. 수가 초과되면 패킷이 삭제됩니다.
MS-DPC 및 MS-PIC 서비스 인터페이스에 대한 단편화 제어를 구성하려면 다음을 수행합니다.
추적 서비스 PIC 작업
추적 작업은 모든 적응형 서비스 작업을 추적하고 로그 파일에 기록합니다. 기록된 오류 설명은 문제를 더 빨리 해결하는 데 도움이 되는 자세한 정보를 제공합니다.
기본적으로 이벤트는 추적되지 않습니다. 또는 [edit services logging]
계층 수준에서 문을 [edit services adaptive-services-pics]
포함하는 traceoptions
경우 기본 추적 동작은 다음과 같습니다.
중요한 이벤트는 /var/log 디렉토리에 있는 라는
serviced
파일에 기록됩니다.서비스되는 파일이 128KB(킬로바이트)에 도달하면 세 개의 추적 파일이 있을 때까지 이름이 serviced.0, serviced.2 등으로 바뀝니다. 그런 다음 가장 오래된 추적 파일(serviced.2)을 덮어씁니다. 로그 파일을 만드는 방법에 대한 자세한 내용은 시스템 로그 탐색기를 참조하세요.
로그 파일은 추적 작업을 구성하는 사용자만 액세스할 수 있습니다.
추적 파일이 있는 디렉토리(/var/log)는 변경할 수 없습니다. 그러나 다음 문을 포함하여 다른 추적 파일 설정을 사용자 지정할 수 있습니다.
file filename <files number> <match regular-expression> <size size> <world-readable | no-world-readable>; flag { all; command-queued; config; handshake; init; interfaces; mib; removed-client; show; }
또는 [edit services logging traceoptions]
계층 수준에서 이러한 문을 [edit services adaptive-services-pics traceoptions]
포함합니다.
이러한 문은 다음 섹션에 설명되어 있습니다.
- Adaptive Services 로그 파일 이름 구성
- Adaptive Services 로그 파일의 개수 및 크기 구성
- 로그 파일에 대한 액세스 구성
- 기록할 행에 대한 정규 표현식 구성
- 추적 작업 구성
Adaptive Services 로그 파일 이름 구성
기본적으로 추적 출력을 기록하는 파일의 이름이 서비스됩니다. 또는 [edit services logging traceoptions]
계층 수준에서 문을 [edit services adaptive-services-pics traceoptions]
포함하여 file
다른 이름을 지정할 수 있습니다.
file filename;
Adaptive Services 로그 파일의 개수 및 크기 구성
기본적으로 추적 파일의 크기가 128KB에 도달하면 세 개의 추적 파일이 있을 때까지 이름이 .0, filename.1 등으로 바뀝니다filename. 그런 다음 가장 오래된 추적 파일(filename.2)을 덮어씁니다.
또는 [edit services logging traceoptions]
계층 수준에서 다음 문을 [edit services adaptive-services-pics traceoptions]
포함하여 추적 파일의 수와 크기에 대한 제한을 구성할 수 있습니다.
file <filename> files number size size;
예를 들어 최대 파일 크기를 2MB로 설정하고 최대 파일 수를 20으로 설정합니다. 추적 작업(filename)의 출력을 수신하는 파일이 2MB filename 에 도달하면 이름이filename .0으로 바뀌고 라는 filename 새 파일이 만들어집니다. 새 filename 파일이 2MB filename 에 도달하면 .0의 이름이 .1로 바뀌고 filename .0으로 이름이 filename 바뀝니다filename. 이 프로세스는 20개의 추적 파일이 있을 때까지 반복됩니다. 그런 다음 가장 오래된 파일(.19)을 최신 파일(filenamefilename.0)로 덮어씁니다.
파일 수는 2개에서 1000개까지 가능합니다. 각 파일의 파일 크기는 10KB에서 1GB까지 가능합니다.
로그 파일에 대한 액세스 구성
기본적으로 로그 파일은 추적 작업을 구성하는 사용자만 액세스할 수 있습니다.
모든 사용자가 모든 로그 파일을 읽을 수 있도록 지정하려면 또는 [edit services logging traceoptions]
계층 수준에서 문을 포함합니다file world-readable
.[edit services adaptive-services-pics traceoptions]
file <filename> world-readable;
기본 동작을 명시적으로 설정하려면 또는 [edit services logging traceoptions]
계층 수준에서 문을 포함합니다file no-world-readable
.[edit services adaptive-services-pics traceoptions]
file <filename> no-world-readable;
기록할 행에 대한 정규 표현식 구성
기본적으로 추적 작업 출력에는 기록된 이벤트와 관련된 모든 줄이 포함됩니다.
또는 [edit services logging traceoptions]
계층 수준에서 문을 [edit services adaptive-services-pics traceoptions file filename]
포함하고 match
일치시킬 정규식(regex)을 지정하여 출력을 구체화할 수 있습니다.
file <filename> match regular-expression;
추적 작업 구성
기본적으로 구성이 있는 경우 traceoptions
중요한 이벤트만 기록됩니다. 또는 [edit services logging traceoptions]
계층 수준에서 다음 문을 [edit services adaptive-services-pics traceoptions]
포함하여 추적 작업이 기록되도록 구성할 수 있습니다.
flag { all; configuration; routing-protocol; routing-socket; snmp; }
표 1 은 적응형 서비스 추적 플래그의 의미를 설명합니다.
플래그 |
설명 |
기본 설정 |
---|---|---|
|
모든 작업을 추적합니다. |
끄기 |
|
추적 명령 큐에 넣기 이벤트. |
끄기 |
|
계층 수준에서 구성의 로그 읽기. |
끄기 |
|
핸드셰이크 이벤트를 추적합니다. |
끄기 |
|
초기화 이벤트를 추적합니다. |
끄기 |
|
인터페이스 이벤트를 추적합니다. |
끄기 |
|
GGSN SNMP MIB 이벤트를 추적합니다. |
끄기 |
|
클라이언트 정리 이벤트를 추적합니다. |
끄기 |
|
CLI 명령 서비스를 추적합니다. |
끄기 |
로그의 끝을 표시하려면 작동 모드 명령을 실행합니다.show log serviced | last
[edit] user@host# run show log serviced | last