TCP/UDP

Minuuu·2023년 5월 2일
0

네트워크

목록 보기
7/11

들어가기전에
TCP와 UDP는 OSI 4 layer의 Transport이다.
이 송신측과 수신측의 프로세스를 포트번호로 찾는 역할을 한다는 사실을 기억하고 들어가자

TCP(Transmission Control Protocol)

인터넷에서 데이터를 안정적으로 전송하기 위해 사용되는 프로토콜

안정적이라는 키워드를 주목하자. 도대체 어떻게 데이터를 전송하는 프로토콜이길래
안정적으로 전송이라는 표현을 했을까?

TCP 특징

1. 접속형

TCP를 사용하는 두 어플리케이션(클라이언트, 서버)이 데이터를 서로 교환하기 전에
TCP 접속을 성립해야만 한다
즉 두 어플리케이션간의 연결을 설정해주어야 한다.

2. 신뢰성

TCP는 전송한 데이터가 수신측에 올바르게 도착했는지를 확인해 신뢰성 있는 통신을 수행한다.

3. 흐름 제어

송신측의 TCP가 수신측이 갖고 있는 버퍼의 크기만큼 데이터를 보내도록 제어

4. 혼잡 제어

네트워크 내의 존재하는 여러 패킷이 과도하게 증가되는 현상을 혼잡이라하며
이를 방지하거나 제거하는 기능이다.

위의 특징을 보니 결국 데이터의 안정성을 위해서 어플리케이션을 연결하고,
데이터가 잘 도착했는지를 확인하는 절차를 통해 안정성을 지킨다고 볼 수 있다
그렇다면 실제로 프로토콜이 어떻게 구조되어 있길래 이를 지킬 수 있는지 알아보자.

TCP Header


처음 이 사진을 보면 이게 뭐지..? 할 것이다. 아래 설명을 통해 이해해보자

TCP 헤더의 크기는 32bit(4byte) * 5 = 기본 20byte
OPTION(예비공간) 최대 40, 즉 20 ~ 60바이트의 크기를 가진다.

Source Port, Destination Port

송,수신 프로세스를 구분하기 위한 포트번호

Sequence num

  • 송신측이 전송한 데이터의 랜덤의 일련번호
  • 수신측은 이 일련번호를 통해 데이터의 순서를 파악하고, 중복된 데이터를 제거한다.

ACK number

  • 수신측이 ACK 패킷을 송신할 때 사용되는 변수입니다.
  • ACK 패킷에 포함되는 ACK number는 수신측이 성공적으로 수신한 데이터의 마지막 일련번호를 나타냄
  • 송신측은 이 ACK number를 통해 다음에 전송할 데이터의 일련번호를 결정

간단하게 설명하면 송, 수신간의 연결을 위해 사용되는 번호라고 이해하면 되고
이를 실제로 어떻게 활용하는지 확인하기 위해서는 3-way handshake라는
TCP의 연결 방식에 대해 알아야 하나 이 글에서는 다루지 않고 다음 포스팅을 통해
다룰 것이다.
그냥 연결을 확인하기 위해 서로 주고받는 번호라고만 이해하고 넘어가면 좋을듯 하다.

HLEN (Header length)

현재 TCP 헤더의 크기 5 ~ 15의 값을 가진다. = 4*5 = 20, 4 x 15 = 60 20 ~ 60byte

Reserved

앞으로 TCP 프로토콜이 변경될 경우를 대비해서 예약된 필드 (사용x)

Flag bit

URG : 이 비트가 1로 설정되면 긴급한 데이터를 보냄
ACK : 이 비트가 1로 설정되면, 해당 패킷이 데이터를 확인하고 응답하는 것을 나타냄
PSH: 이 비트가 1로 설정되면, 해당 패킷이 수신측에서 즉시 처리되어야 한다는 것을 나타
RST: 이 비트가 1로 설정되면, TCP 연결이 비정상적으로 종료되었다는 것을 나타냄
SYN : 이 비트가 1로 설정되면, 해당 패킷이 TCP 연결 설정을 시작한다는 것을 나타냄
FIN : 이 비트가 1로 설정되면, 해당 패킷이 TCP 연결 종료를 요청한다는 것을 나타냄

CheckSum

TCP header + TCP 데이터에 대한 체크섬 수행 (에러 검출)

URG Pointer

URG 플래그가 1일 때만 유효한 값을 가짐 -> 긴급 데이터의 위치를 가리킴

위와 같이 연결과 관련된 정보가 프로토콜에 대해 있는 것을 알 수 있다.

UDP

TCP와 달리 신뢰성을 제공하지 않는 프로토콜
즉 신뢰를 보장하지 않기 때문에 헤더가 TCP에 비해 적고 간단하다.

그러면 데이터의 손실이 많아질텐데 왜 많이 쓸까?

UDP 특징

1. 비연결형

TCP는 연결 설정을 맺는 반면 UDP는 연결설정 없이 데이터를 전송하기에 빠른 서비스 제공

2. 비상태정보

TCP는 연결에 대한 상태정보(ACK, SEQ)를 유지하나 UDP는 연결 정보 저장 x

3. 비 정규적인 송신률

TCP에서 사용하는 혼잡제어 매커니즘은 송신측에서 보내는 데이터 양의 제한이 있어 실시간 전송에서는 제한이 있다.
하지만 UDP는 패킷의 손실이 생기더라도 실시간 전송을 지원할 수 있다.

4. 경량의 오버헤드

TCP 헤드는 20바이트이지만, UDP는 8바이트 -> 더 빠르다

즉 UDP는 데이터의 안정성을 보장하지는 않지만 실시간 전송에 유리한 특성을 가진다

UDP Header


각 필드에 대해서는 위에서 설명했으니 넘어가나 한 눈에 봐도 굉장히 간단해진 것을 볼 수 있다.

정리

  • TCP는 연결 지향적이기 때문에 데이터의 안정성을 보장하나,
    속도가 UDP에 비해 느리다
  • UDP는 연결을 하지 않기에 데이터의 안정성을 보장하지 않으나, 속도가 UDP에 비해 빠르기 때문에 실시간 전송에서 사용된다.

자 이렇게 이번에 TCP와 UDP에 대해 알아보았다.
이 글만으로는 ACK, SEQ 등이 어떻게 구체적으로 사용되는지는 알 수 없을 것이나,
이후 3-way handshake와 4-way handshake의 포스팅을 준비하도록 하겠다.

profile
꾸준히 한걸음씩 나아가려고 하는 학부생입니다 😄

0개의 댓글