-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
TCP의 신뢰성은 어떻게 보장하는가? #97
Comments
TCP는 재전송을 통해 신뢰성을 보장합니다. TCP Header의 Checksum 부분을 사용하여 데이터가 정상적으로 수신되었는지 확인합니다. |
TCP는 특성상 자신이 보낸 데이터에 대해서 상대방이 받았다는 의미의 패킷을 다시 받아야 통신이 정상적으로 이뤄졌다고 생각한다. 그래서 만약 자신이 보낸 데이터에 대해 응답 패킷을 받지 못한다면, 패킷이 유실되었다 생각하고 보냈던 패킷을 다시 보내게 됩니다. 이 과정을 TCP 재전송이라 합니다. TCP 재전송은 보냈던 패킷을 다시한번 보내기 때문에 네트워크 성능 저하를 일으킬 수 있지만 TCP 통신상 반드시 필요한 과정이다. 수신자가 TCP Segment에 오류가 있는지 확인하는 방법은 TCP Segment의 Header부분중 Checksum 부분을 보고 알 수 있다. 이 Checksum Error Detecting을 통해 수신자는 송신자가 보낸 데이터가 제대로 보내졌는지 확인 할 수 있으며 잘못보내졌을 경우 위 TCP Flag 중에서 ACK Flag를 reset(0)하여 보냅니다. 제대로 보내졌을 경우에는 ACK Flag를 set(1)하고 Acknowlegment number에 수신자가 받았던 sequence number에 1을 더한 sequence number+1의 값을 넣어서 보내줍니다. 순서가 뒤바뀐 TCP Segment의 경우도 Sequence number가 있기 때문에 수신자 측에서 이러한 Sequence number순서대로 데이터 청크(Data chunks)들을 잘 붙여주기만 하면 된다. 만약 수신자가 송신자에게 ACK, NAK 둘다 못보내는 상황이라면 |
네트워크 통신과정 도중에는 네트워크 혼잡성 및 receiver의 overload 등의 사유로 데이터가 손실되거나, 전달 순서가 바뀌는 등의 문제가 발생할 수 있습니다. 이런 문제를 해결하고 통신의 신뢰성을 보장하기 위해 TCP/IP에서 사용하는 것이 흐름 제어와 혼잡 제어입니다.
흐름 제어수신 측이 송신 측보다 데이터 처리 속도가 느릴 경우 데이터를 손실할 위험이 존재합니다. 흐름 제어는 이런 송신 측과 수신 측의 데이터 처리 속도 차이로 인해 발생하는 문제를 해결하기 위한 기법입니다.
혼잡 제어데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 라우터는 더 이상 데이터를 처리할 수 없습니다. 이런 상황에서 송신 측은 라우터에서 처리하지 못한 데이터를 손실 데이터로 간주하고 계속해서 데이터를 전송하게 됩니다. 이는 네트워크를 혼잡하게 만듭니다. 혼잡 제어는 이런 네트워크의 혼잡성 문제를 해결하기 위한 기법입니다.
실질적인 혼잡제어는 이 중 하나만으로 작동한다기보단, 상황에 따라 정책을 바꿔가며 제어합니다. 예를 들면 처음에는 Slow Start를 사용하다가 이런 정책에는 Tahoe, Reno, New Reno, Cubic, Ealstic-TCP 등 여러가지가 존재합니다. |
No description provided.
The text was updated successfully, but these errors were encountered: