TCP가 reliable data transfer를 보장하기 위해 사용하는 기법으로
checksum, sequence number, ACK, retransmission timer가 있다.
우선 checksum에 대한 설명입니다.
각각의 character들을 숫자로 mapping해서 그 숫자들을 합한 것을 checksum이라 한다.
원본 문장과 계산한 checksum을 한꺼번에 수신자에게 보낸다.
여기서 어떤 형식으로 보내는지는 프로토콜에 의해서 합의를 한다.
그리고 수신자가 동일한 알고리즘으로 합을 구하고
checksum과 같으면 ok하고 다르면 무시하여 reliable delivery를 보장한다.
다음은 retransmission timer에 대한 설명입니다.
sender는 해당 packet에 대응하는 ACK가 중간에 loss되었는지, 전달한 packet이 중간에 loss되었는지, packet이 느리게 가는지, ACK가 느리게 오고 있는지 확인할 수 없다.
이를 해결하기 위해 packet을 보낸 시점을 기준으로 retransmission timer를 두어, 대응하는 ACK가 일정 시간 안에 도착하지 않는다면 해당 packet을 retransmission하고 다시 timer을 두는 방법으로 reliable delivery를 보장한다.
sequence number - segment data의 첫번째 bite의 순서번호다. 다음에 올 segment의 sequence number는 앞의 segment number에 그의 application data 길이를 더해준다. 데이터의 순서를 정해주어 중간에 빠진것이 있나를 확인하기 쉽게 하여 데이터를 신뢰성있게 관리한다.
acknowledge number - 상대방으로부터 수신하기를 기대하는 순서번호다. ack100이면 99번 데이터까지 잘 수신되었음을 알려준다. 이를 통해 데이터를 신뢰성있게 관리한다.
UDP를 사용하는 이유
신뢰성보다는 빠른 속도를 원할 때 UDP를 사용하면 TCP보다 더 빠르게 데이터를 보낼 수 있다.
추가로 TCP는 상대방의 준비 상태를 확인하지만 UDP는 simple(no connection state at sender, receiver)하다.
마지막으로 UDP는 어플리케이션에서 자기 하고 싶은대로 프로토콜을 설계할 수 있다.
1) TCP connection setup 과정을 three-way handshaking이라고 부르는 이유가 무엇인가?
client와 server가 서로 연결을 확인하는 과정에 필요한 메시지가 3개이기 때문이다.
처음엔 client가 server에게 SYN segment를 보내고 server는 확신할 수는 없으나 SYN ACK segment를 client에게 보낸다.
client는 이를 받고 이에 대한 ack 메시지인 ACK segment를 다시 server에게 보낸다.
이로 인해 client와 server 둘 다 연결을 확신한다.
2) TCP connection setup 과정에서 three-way handshake을 하지 않으면 생기는 문제가 무엇인가요? 예를 들어 설명하세요.
네트워크 상태가 일정하지 않기 때문에 server에서는 SYN packet이 유효한 것인지 모른다.
예를 들어, client가 server와 연결을 맺기 위해 보내는 SYN packet에 대한 RTT(round trip time)가 일시적으로 충분히 크면 client는 이 packet을 재전송하게 된다.
그런데 다시 보낸 packet이 server에 늦게 전달되어 이미 작업이 끝나고 연결을 끊은 시점에 도착한 경우 server는 실제로 유령같은 packet을 받게 된다.
이 문제를 막기 위해 양쪽이 다 연결되었다는 것을 확인하기 위한 three-way handshake를 해야 한다.
'CS > 네트워크' 카테고리의 다른 글
3-tier architecture (0) | 2024.06.26 |
---|---|
DHCP (0) | 2023.01.05 |
포트 (0) | 2022.04.09 |
네트워크 계층, 패킷, Domain (0) | 2022.04.09 |
서버 언어, 구조, WAS (0) | 2022.03.29 |