[TIL] TCP & UDP

다혜·2022년 3월 15일
0

Network

목록 보기
1/5
post-thumbnail

✅ TCP (Transmission Control Protocol)

✔ 전송 계층에서 사용하는 프로토콜.
✔ 신뢰성을 보장하는 연결형 서비스.
✔ 연속성보다 신뢰성있는 전송이 중요할 때 사용하는 프로토콜.


📌 TCP 특징


① 신뢰성 있는 전송

✔ 여러가지 이유로 패킷손실될 수 있다.
✔ TCP는 이러한 문제를 해결하기 위한 데이터 전송 메커니즘을 가지고 있다.

🔄 재전송 (Retransmission)

  • ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
  • 일정 시간동안 ACK 값이 수신을 못할 경우 재전송을 요청한다.

🔢 Sequence Number & ACK Number

  • Sequence Number와 ACK Number를 사용해 ACK패킷의 정보를 확인한다.



② 연결형 서비스

✔ TCP는 연결형 서비스로, 가상 회선 방식을 제공한다.
✔ 연결형 서비스라는 것은 클라이언트와 서버가 연결된 상태에서 데이터를 주고 받는 것을 의미한다.
✔ Client가 요청을 하고 Server가 연결을 수락하면 통신 선로가 고정되고, 모든 데이터는 고정된 선로를 통해 순차적으로 전달된다.
✔ 따라서 TCP는 데이터를 정확하고 안정적으로 전달할 수 있다.

💭 가상회선 패킷 교환 방식

  • 데이터를 전송하기 전에 논리적 연결이 설정되고 이를 가상 회선이라 한다.
  • 각 패킷에는 가상회선 식별 번호(VCI)가 포함돼있다.
  • 모든 패킷을 전송하면 가상회선이 해제되고, 패킷들은 전송된 순서대로 도착한다.
  • 데이터그램 방식은 패킷마다 라우터가 경로를 선택하지만, 가상회선 방식은 경로를 설정할 때 한번만 수행한다.

🌐 바이트 스트림 서비스

  • 데이터의 경계를 구분하지 않음.
  • 바이트들을 묶어 세그먼트화하여 전송.



③ 연결의 설정과 해제

🤝🏻 3-way handshaking 4-way handshaking (상세)

✔ TCP는 정확한 전송을 보장해야한다.
✔ 따라서 통신하기에 앞서 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다.
✔ 연결 성립 후, 모든 통신이 끝났다면 연결을 해제한다.



④ 흐름제어

✔ 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법.
✔ 수신측이 패킷을 지나치게 많이 받아 생기는 문제(버퍼 오버플로우)를 방지한다.

  • 수신측이 송신측보다 데이터 처리 속도가 빠르면 괜찮지만, 반대의 경우 문제가 생긴다.
  • 수신측 저장 용량을 초과한 이후 도착한 데이터는 손실될 수 있으며, 손실될 경우 송수신간 불필요한 응답과 전송이 발생한다.
  • 이런 위험을 줄이기 위해 송신측의 데이터 전송량을 수신측에 따라 조절해야한다.

⛔ Stop and Wait

  • 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법.

🚪 Sliding Window

  • 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하여 제어하는 방법.
  • 윈도우 기법을 통하여 송신 버퍼의 범위가 수신측의 여유 버퍼 공간을 반영하여 동적으로 바뀐다.



⑤ 혼잡제어

✔ 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법.
✔ 네트워크 내의 오버플로우나 데이터 손실을 방지한다.

  • 네트워크 내에 패킷수가 과도하게 증가하는 현상을 혼잡이라 한다.
  • 한 라우터에 데이터가 몰릴 경우, 데이터를 모두 처리할 수 없어 호스트들은 재전송을 해야한다.
  • 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 줄인다.

▪ AIMD(Additive Increase / Multiplicative Decrease)

  • 처음에 패킷을 하나씩 보내고 문제없이 도착하면 window size를 1씩 증가시켜가며 전송하는 방법
  • 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄인다.
  • 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못하는 잔점이 있다.
  • 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식

▪ Slow Start

  • AIMD 방식과 같이 패킷을 하나씩 보내고 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 증가시킨다. → AIMD 방식과는 다르게 지수 함수 꼴로 증가
  • 혼잡 현상이 발생하면 window size를 1로 떨어뜨린다.
  • 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 예상할 수 있어, 혼잡 현상이 발생했던 window size 절반까지는 지수 함수 꼴로 증가시키고 이후로는 1씩 증가시킨다.

▪ Fast Retransmit

  • TCP의 혼잡 조절에 추가된 정책
  • 패킷을 받는 쪽에서 먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보낸다.
  • ACK 패킷에는 다음 패킷의 순번을 실어서 보낸다.
  • 따라서 중간에 하나가 손실되면 송신측에서는 중복된 ACK 패킷을 받게 된다.
  • 중복된 순번의 패킷을 3개 받으면 재전송을 하고 window size를 줄인다.

▪ Fast Recovery

  • 혼잡 상태가 되면 window size를 반으로 줄이고 선형 증가 시키는 방법이다.
  • 혼잡 상황을 한번 발생하면 이후로는 순수한 AIMD 방식으로 동작한다.



⑥ 전이중, 점대점 방식

✔ 전이중 (Full-Duplex) : 전송이 양방향으로 동시에 일어날 수 있다.
✔ 점대점 (Point to Point) : 각 연결이 정확히 2개의 종단점을 가지고 있다.



✅ UDP (User Datagram Protocol)

✔ 전송 계층에서 사용하는 프로토콜.
✔ 신뢰성이 없는 비연결형 서비스.
✔ 실시간성 보장 또는 빠른 연결이 필요한 경우 사용되는 프로토콜


📌 UDP 특징

① 비연결형 서비스

✔ UDP는 비연결형 서비스로 데이터그램 방식을 제공한다.
✔ 연결 과정 없이 통신이 가능하다

🔄 데이터그램 패킷 교환 방식

  • 데이터를 전송하기 전에 논리적 연결이 설정되지 않으며 패킷이 독립적으로 전송된다.
  • 이를 데이터그램이라 하며 데이터의 경계를 구분한다.
  • 패킷을 수신한 라우터는 최적의 경로를 선택하여 패킷을 전송한다.
  • 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있다.
  • 송신측에서 전송한 순서야 수신측에서 도착한 순서가 다를 수 있다.



② 빠른 요청과 응답 및 멀티캐스팅

✔ 빠른 요청과 응답이 필요한 실시간 통신 또는 응용계층 프로그램에 적합하다.
✔ 1:n의 멀티캐스팅이 가능하다.
✔ 전송 속도에 특별한 제한이 없다.



❗ 차이점






💛 참고 :
https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://coding-factory.tistory.com/614
https://www.stevenjlee.net/2020/06/29/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-tcp-%EC%99%80-udp-tcp-vs-udp/

profile
봉식이를 위한 개발을 하고 싶오

0개의 댓글