2017-02-18 4 views
0

TCP 세 방향 핸드 셰이크 연결 절차에서 클라이언트 (연결을 시작한 사람)는 세 번째 단계에서 ACK 패킷과 연결된 모든 데이터 페이로드를 서버로 보냅니 까?TCP 세 방향 핸드 셰이크

답변

1

TCP 핸드 셰이크의 마지막 ACK는 이미 페이로드를 포함 할 수 있습니다. 그러나 응용 프로그램이 처음 연결을 호출 한 후 서버가 응답하거나 첫 번째 데이터를 보낼 때까지 기다릴 것이므로 일반적으로이 작업은 수행되지 않습니다. 커널은 응용 프로그램이 다음에 무엇을 하는지를 알지 못하기 때문에 서버가 가능한 빨리 연결이 설정되었음을 알 수 있도록 연결 내에서 ACK를 전송합니다.

OS에 따라이 동작을 변경하고 ACK를 첫 번째 데이터와 함께 보낼 수 있습니다. Linux에서는 연결하기 전에 명시 적으로 빠른 확인을 비활성화하여이 작업을 수행 할 수 있습니다.

int off = 0; 
setsockopt(fd, IPPROTO_TCP, TCP_QUICKACK, &off, sizeof(off)); 
connect(fd,...)