2009-09-22 2 views
1

마지막 ACK (TCP 연결을 시작하는 3 방향 핸드 쉐이크의 세 번째 세그먼트)을 보낸 후 연결 기능이 반환됩니다. 청취자가 서버에서 여전히 ACK를 기다리고 있지만 클라이언트에서 ACK를 다시 보낼 사람이 없기 때문에이 세 번째 세그먼트가 손실되면 어떻게됩니까?TCP 및 Unix 수신 기능에서 세 방향 핸드 쉐이크에 의심이 있음

답변

3

클라이언트가 데이터 패킷과 함께 ACK를 보내고 손실되면 클라이언트는 서버가 데이터를 ACK하지 않은 것을 확인하고 패킷을 다시 보냅니다.

클라이언트가 ACK를 별도의 패킷으로 보내고 손실되면 서버는 SYN/ACK가 클라이언트에 의해 ACK되지 않았 음을 알게되고 패킷을 다시 보냅니다. 클라이언트는 ACK를 다시 보내 응답합니다.

ACK가 OS의 TCP/IP 구현에 의해 수행되기 때문에 응용 프로그램의 연결 호출이 그 시점에 여전히 차단 중인지 여부는 중요하지 않습니다.

+0

당신은 ACK가 OS 구현으로 이루어졌지만 궁극적으로 연결하고 청취하는 기능은 3 방향 핸드 셰이크를 완료한다고 말했습니까? 핸드 셰이크를 완료 할 다른 것은 무엇입니까? – avd

+0

aditya : OS 커널은 일종의 커널 타이머가 만료되었을 때이를 비동기식으로 처리합니다. – caf

+0

wallenborn : 서버가 syncookies를 사용하지 않는 한 사실입니다.이 경우 syn/ack가 확인되지 않습니다 (전송 된 syn/ack에 대한 기록이 없으므로). – caf

관련 문제