네트워크

4. TCP & UDP

ggomjiu 2025. 2. 21. 01:38

TCP & UDP

- 전송 계층에서 사용하는 프로토콜

-> 프로토콜 모델이 TCP / IP모델이므로 TCP / IP 계층에서 사용됨

-> OSI 계층에서 사용하는 모델은 아님

- 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜 기반으로 구현되어 있음

 

cf) TCP / IP 4계층 모델

 - Layer 3 (전송 계층) : 송신자와 수신자를 연결하는 통신 서비스 -> 데이터 전달은 담당

 

TCP(Transmission Control Protocol)

: 연결형 프로토콜

- 특징)

  • 데이터 경계를 구분하지 않음 -> 바이트 스트림(byte-stream) 서비스
  • 연결 지향 프로토콜(수신 여부 확인 O) -> 신뢰도는 높지만 속도가 느림
  • 1 : 1 통신
  • 가상회선 패킷 교환 방식을 사용 -> 패킷 사이 순서 보장
  • HTTP, Email, File transfer

cf) 가상 회선 패킷 교환 방식

- 각 패킷에는 가상회선 식별자가 포함되어 있음

- 모든 패킷을 전송하면 가상 회선이 해제되고 패킷들은 전송된 순서 대로 도착하는 방식

 

UDP(User Datagram Protocol)

: 비연결형 프로토콜

- 특징)

  • 데이터 경계를 구분함 -> 데이터그램(datagram) 서비스
  • 비연결 지향 프로토콜(수신 여부 확인 X) -> 신뢰도는 낮지만 속도가 빠름
  • 1 : 1 or 1 : N or N : N 통신
  • 단순히 데이터만 주는 데이터그램 패킷 교환 방식 사용 -> 순서를 보장하지 않음
  • DNS, Broadcasting

cf) 데이터그램 패킷 교환 방식

- 각 패킷이 독립적으로 이동하며 최적의 경로를 선택

- 하나의 메세지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있음

- 도착 순서가 다를 수 있는 방식

cf) 데이터 경계 구분 여부

▶ 데이터 경계 구분
: 데이터에 처음과 끝이 있음
- 끝날 때마다 발신과 수신이 이루어짐

▶ 데이터 경계를 구분하지 않음
: 데이터를 원하는 사이클로 받음
- 예를 들어, 길이 3의 데이터가 3번 보내졌어도 4초에 한 번 수신된다면 4초동안 데이터를 받고 그 이후에 들어온 데이터를 4초 동안 또 받음

 

TCP 연결 및 해제 과정

1. 포트(Port) 상태 정보

- CLOSED : 포트가 닫힌 상태

- LISTEN : 포트가 열린 상태로 연결 요청 대기 중

- SYN_RCV : 요청을 받고 상대방의 응답을 기다리는 중

- ESTABLISHED : 포트 연결 상태

 

2. 플래그 정보

- TCP Header에는 CONTROL BIT(플래그 비트, 6bit)가 존재

-> 각각의 bit는 "URG - ACK - PSH - RST - SYN - FIN" 의미를 가짐

1) SYN(Synchronize Sequence Number)

  • 000010
  • 연결 설정
  • Sequence Number를 랜덤으로 설정하여 세션을 연결하는 데 사용
  • 초기에 Sequence Number를 전송

2) ACK(Acknowledgement)

  • 010000
  • 응답 확인
  • 패킷을 받았다는 것을 의미

3) FIN(Finish)

  • 000001
  • 연결 해제
  • 세션 연결을 종료시킬 때 사용
  • 더 이상 전송할 데이터가 없음

3. TCP 연결 성립 과정 : 3-way handshake

1) SYN 단계 : 클라이언트는 서버에 클라이언트 ISN을 담아 SYN을 보냄

- ISN : 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호 -> 장치마다 다를 수 있음

 

 2) SYN + ACK 단계 : 서버는 클라이언트의 SYN을 수신하고 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냄

 

3) ACK 단계 : 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄

 

4. TCP 연결 해제 과정 : 4-way handshake

1) 클라이언트가 연결을 닫으려고 할 때, FIN으로 설정된 세그먼트를 보냄 -> 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다림

 

2) 서버 : 클라이언트로 ACK 승인 세그먼트를 보냄 / 클라이언트 : FIN 받기 위해 FIN_WAIT_2 상태

 

3) 서버 : ACK를 보내고 일정 시간 후 클라이언트에 FIN이라는 세그먼트를 보냄

 

4) 클라이언트 : TIME_WAIT 상태, 서버로 해지 준비가 되었다는 ACK를 보냄 / 서버 : CLOSED 상태가 됨 -> 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 모든 자원의 연결이 해제됨

 

cf) TIME_WAIT

: 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태

- 지연 페킷, 두 장치 간 접속 오류 등 의도치 않은 에러로 인해 연결이 데드락으로 빠지는 문제점을 방지하는 데 쓰임 

'네트워크' 카테고리의 다른 글

6. 네트워크 기기  (0) 2025.02.21
5. DNS + 웹 통신 흐름  (0) 2025.02.21
3. OSI 7계층  (0) 2025.02.14
2. 대역폭  (0) 2025.02.14
1. 네트워크 기초  (0) 2025.02.14