TCP
TCP(Transmission Control Protocol)
TCP : Reliable(책임감 있는) Protocol이라고 불린다.
이는 통신에 대한 신뢰성을 가지고 있기 때문이다.
TCP는 송, 수신자 사이에 교환되는 데이터 뭉치인 Packet의 전송에 대해서
전송 성공 여부를 확인하는데,
이러한 과정을 통해 데이터를 확실하게 전송할 수 있다는 신뢰성을 가지게 된다.
TCP 특징
1. 전이중 통신
2. Multiplex / Demultiplex
3. 연결형 서비스
4. 신뢰성 서비스
5. 흐름 제어 (Flow Control)
6. 혼잡 제어 (Congestion Control)
흐름 제어, 혼잡 제어, Piggybacking, 3-way handshaking 등의 다양한 방식은 모두
신뢰성 있는 통신을 제공하기 위한 TCP의 방식이다.
TCP 재전송 (오류 처리)
TCP의 통신 중에서 Packet 손실이 일어났을 때 or 오류가 발생하였을 때
이를 처리하기 위한 방식을 Pipelining method라고 한다.
Pipelining method
Go-Back-N (GBN)
Selective repeat

TCP의 통신 형태를 간단하게 표현하면 위와 같다.
1) 송신자가 Packet을 전송, 해당 Packet에 대한 Timer 설정
2) 수신자는 Packet에 대해 이상 여부 확인 후 확인 응답인 Ack 전송
3) 보낸 Packet에 대한 확인 응답이 도착했다면 다음 Packet 전송
4) 확인 응답인 Ack에 문제가 발생하면 해당 Packet 재전송
그림을 보면 pkt1 가 전송 도중 손실되었고,
이에 따라 수신자 측에서 해당 Packet에 대한 Ack가 전송되지 않았다.
송신자는 전송한 Ack를 받지 못한채로 설정한 Timer가 끝났다.
송신자는 더 이상 Ack를 기다리지 않고 중간에 문제가 발생했다고 판단,
해당 Packet을 재전송한다.
송신자는 Packet을 보낼 때 Timer를 설정하는데, 이는 수신자 측에서 전송한
Ack를 받는 제한 시간이다.
Packet 혹은 Ack 가 손실 되었을 때, Timer를 설정함으로써 재전송하는 것이다.
Timer의 시간을 너무 빠르게 설정하였을 경우, Ack 메세지가 정상적으로 도달하기 전에 Time out으로 처리하여 재전송하게 되는데, 이는 낭비가 될 수 있기 때문에 Timer의 시간 설정은 신중하게 진행해야 한다.

Pipelined Method
그림과 같이, 일반적으로 TCP는 여러 Packet을 한 번에 전송하며,
이를 Pipelined Method라고 한다.
전송되는 Packet 중 오류가 발생하는 Packet이 생길 수 있다.
이럴 때 Packet을 재전송하게 되는데, 이 때 사용하는 두 가지 방식이
1) Go-Back-N
2) Selective Repeat 이다.
위 그림과 같이 Packet 2번이 손실되었을 때,
수신자는 Packet 2번을 받아야하는 차례인데,
Packet이 도착하지 않아 이전에 받았던 Packet 1번에 대한 확인 Ack만을 전송하게 되고
Ack 2번에 대한 Timeout으로 인하여 Packet 2번을 재전송한다.
이 때 Packet 2번 이후의 Packet들도 함께 재전송되는데, 이것이 Go-Back-N 방식이다.

반면 이 그림은 Packet 2번이 전송 도중 손실되었음에도 불구하고,
수신자는 이후 도착한 Packet에 대한 Ack를 전송한다.
이후 Packet 2에 대한 Timeout이 발생, Packet 2만 재전송된다.
이것이 Selective Repeat 방식으로,
손실이 발생한 Packet이 있더라도 이후 도착한 Packet들은 수신자의 Buffer에 임시 보관하고,
이후 손실된 Packet이 재전송 되었을 때,
Buffer에 저장되어있던 Packet들도 온전히 수신한다.
UDP(User Datagram Protocol)
UDP : Transport Layer의 Protocol로 데이터의 전송을 담당한다.
UDP 특징
1. 비연결형 서비스
2. 신뢰성 없음
3. 빠른 속도