[CS] TCP와 UDP

hyewon jeong·2023년 3월 31일
0

CS

목록 보기
11/22

TCP와 UDP의 공통점과 차이점을 설명해보세요.

❄️참고 전송계층

1. TCP

1-1 ❄️ TCP

TCP는 일반적으로 TCP 와 IP가 함께 사용되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 하게 됩니다. 가상회선방식을 통한 연결지향적 프로토콜로써 3-way handshake를 통해 논리적 연결을 한 후, 데이터를 전송하며 데이터 전송이 완료되면 4-way handshake를 통해 연결을 해제합니다.
따라서 데이터의 신뢰성이 보장되며 TCP 세그먼트 내부의 있는 데이터 순서 값으로 전송 데이터의 순서가 보장이 되고, 흐름제어와 혼잡제어를 지원합니다. 따라서 TCP 프로토콜은 중요한 데이터를 통신하며 데이터 누락이 없어야 하는 애플리케이션에서 사용되기 적합합니다

1-1-1. 흐름제어(Flow Control)와 혼잡제어(Congestion Control)이란?

흐름제어는 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것입니다. 예를 들어 송신하는 곳에서 감당이 안되게 데이터를 빠르게 많이 보내면 수신자에서 문제가 발생하기 때문입니다.

혼잡제어는 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것입니다. 만약 정보의 소통량이 과다하면

패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막습니다.

1-2. TCP 3 way handshake란 무엇인지 설명해주실 수 있을까요?


TCP 헤더에는 코드 비트라는 부분이 있는데, 코드 비트는 TCP 헤더의 연결 제어 정보가 기록되는 곳이다

가상회선을 수립하는 단계로서 클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정입니다. SYN, ACK 패킷을 주고받으며,
1) 클라이언트는 서버에게 임의의 난수로 SYN(n)패킷으로 서버와의 연결 확립 요청을 합니다.
2) 서버는 SYN(n)패킷을 받고, 클라이언트가 연결을 설정하려는 것을 알고,
응답패킷으로 ACK패킷(n+1)에 1을 더한 값과 , 클라이언트가 다시 ACK패킷을 보내기를 기다리는 SYN(m)을 보냅니다 .

3) 클라이언트는 SYN(m)+ACK(n+1) 패킷을 받고 , 서버에게 ACK(m+1)패킷을 보내어 클라이언트가 서버와의 연결을 성공적으로 설정했다는 것을 알리므로 신뢰성 있는 연결 설정이 됩니다.

  • SYN ( Synchronize Sqeunce Number)
    연결 설정의 의미를 지닌다. 000010
    Sequence Number를 난수로 설정하여 세션을 연결하는데 사용하고, 초기의 Sequence Number인 ISN을 전송한다.
    *ACK(Acknowlegement)
    응답 확인의 의미를 지닌다. (패킷을 받았음을 의미한다)

#@# 1-2-1.2 way가 아닌 3 way 인 이유?

일단 클라이언트는 자신의 목소리가 들리는지 물어본다 👉 SYN
서버는 클라이언트의 목소리가 들린다고 말한다 👉 SYN + 1
그리고 서버 자신의 목소리가 들리는지 물어본다 👉 ACK
클라이언트는 서버의 목소리가 들린다고 말한다 👉 ACK + 1

총 3 번의 신호를 주고받아 TCP connection이 establish된다.
TCP connection은 양방향성 connection이다.
클라이언트는 서버에게 자신의 존재를 알리고 패킷을 보낼 수 있다는 것을 알리듯
서버도 클라이언트에게 자신의 존재와 함께 패킷을 보낼 수 있다는 신호를 보내야한다.
그렇기 때문에 2 way handshake로는 부족하다.

1-2-2. 왜 클라이언트는 임의의 난수로 설정된 SYN 플래그를 보낼까?

처음 클라이언트에서 SYN 패킷을 서버로 보낼 때, Sequence Number에는 랜덤한 숫자가 담긴다.
초기에 담긴 Sequence Number를 ISN이라고 한다.
ISN이 0부터 시작하지 않고 랜덤한 수로 설정하는 이유가 뭘까?

TCP connection을 맺을 때 사용하는 port는 유한 범위에서 사용되고 시간이 지나면 재사용된다.
이 말은 곧, 두 통신 host가 과거에 사용된 port 번호 쌍을 사용할 수 있는 가능성이 존재한다는 의미다.
서버 측에서 클라이언트 패킷의 SYN을 보고 패킷을 구분하는데, 만약 난수가 아닌 순차적인 Sequence Number가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있다.
이러한 문제가 발생할 가능성을 줄이기 위해 ISN을 난수로 설정하는 것이다.

1-3. TCP 4way handshake ( 연결해지시 )

데이터를 전송할 때뿐만 아니라 전송한 후에도 연결을 끊기 위한 요청을 교환해야 한다.
연결을 끊을 때는 FIN(연결 종료)과 ACK(확인 응답)를 사용한다

① 컴퓨터 1에서 컴퓨터 2로 연결 종료 요청(FIN)을 보낸다.
② 컴퓨터 2에서 컴퓨터 1로 연결 종료 응답(ACK)를 반환한다.
③ 또한 컴퓨터 2에서도 컴퓨터 1로 연결 종료 요청(FIN)을 보낸다.
④ 컴퓨터 1에서 컴퓨터 2로 연결 종료 응답(ACK)을 반환한다.

1-4. 패킷이란?

인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송을 하는데 이떄 이 조각을 패킷이라고 합니다.

1-4-1. TCP는 패킷을 어떻게 추적 및 관리하나요?

데이터는 패킷단위로 나누어 같은 목적지(ip계층)으로 전송됩니다. 예를 들어 한줄로 서야하는 ABC라는 사람(패킷)이 있을때 서울(발신지)에서 출발하여 붓나(수신지)으로 간다고 할때 ABC가 순차적으로 가야되는 상황에서 B가 길을 잘못 들어서 분실되었다고 가정합니다. 하지만 목적지에서는 ABC가 모두 필요한지 모르기 때문에 AC만 보고 다왔다고 착각 할 수 있습니다. 그렇기 때문에 ABC라는 패킷에 1,2,3 이라는 번호를 부여하여 패킷의 분실확인 및 같은 처리를 하여 목적지에서 재조립을 합니다. 이런 방식으로 TCP는 패킷을 추적하며 , 나누어 보내는 데이터를 받고 조립 할수 있습니다.

2. UDP

2-1. ❄️ UDP

UDP 같은 경우에는 데이터그램 방식을 통한 비연결형 프로토콜로써 별다른 3-way handshake 같은 데이터 전송 전처리 작업을 하지 않고 Header에 값도 적기 때문에 데이터의 신뢰성이 보장되지는 않지만 네트워크 부하를 감소 시킬 수 있으며, 혼잡제어를 하지 않기 때문에 패킷이 제대로 전송됐는지 또는 오류가 없는지 확인 할수 없지만 그로인해 TCP보다 데이터 전송속도가 빠릅니다. 따라서 중요한 데이터를 통신하는 것이 아닌 데이터 누락을 감수하더라도 데이터 전송속도가 빨라야 하는 실시간 동영상 스트리밍 서비스 같은 서비스에 적합합니다.

2-1-1. 데이터그램?

독립적인 관계를 지니는 패킷이라는 뜻으로 , 연결을 위해 할당되는 논리적인 경로가 없는데, 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 되어 처리되는 프로토콜을 프로토콜을 UDP라고 합니다.

3. TCP와 UDP 의 공통점

모두 인터넷프로토콜 스택에서 전송계층(Transport Layer) 프로토콜로써 ,
1 ) 데이터 전송기능이 있습니다.
2 ) 패킷기반의 프로토콜로써 데이터를 작은 크기의 패킷으로 나누어 전송하고 수신측에서 이를 조합하여 데이터를 복원합니다.
3 ) 포트번호를 사용하여 애플리케이션 간에 데이터를 구분하여 여러개의 애플리케이션이 동시에 데이터를 전송하고 수신 할수 있습니다.
4 ) IP 프로토콜의 상위계층에 위치하여 데이터를 전송합니다.
5) 전송계층 프로토콜로서 애플리케이션 계층과 네트워크 계층을 연결합니다.
이를 통해 애플리케이션에서 데이터를 생성하고, 인터넷에서 전송하는데 필요한 기능을 제공합니다.

4. TCP와 UDP 의 차이점

참고
https://velog.io/@guswns3371/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCP-3-4-way-handshake
https://mangkyu.tistory.com/15
https://velog.io/@april_5/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4-%EC%A0%84%EC%86%A1-%EA%B3%84%EC%B8%B5-%EC%8B%A0%EB%A2%B0%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%86%A1%ED%95%98%EA%B8%B0

profile
개발자꿈나무

0개의 댓글