network

[network] 혼자 공부하는 네트워크 04-2 TCP와 UDP

hail2y 2025. 1. 6. 23:53

강의는 몇 번 들었지만 전처럼 기록을 열심히 해 두지는 않아서 몇 개월이 지난 후에 다시 쓴다. (250414)

 

TCP 통신 단계

  • TCP는 통신(데이터 송수신)하기 전에 연결을 수립하고 통신이 끝나면 연결을 종료한다

MSS (Maximum Segment Size) 단위

  • MSS - TCP로 전송할 수 있는 최대 페이로드 크기
  • TCP 헤더 크기는 제외 (MTU는 헤더의 크기까지 포함)

https://www.youtube.com/watch?v=d6pUy1Z56h8&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=34&t=13s

TCP 세그먼트 구조

    • 송신지 포트, 수신지 포트
    • 순서 번호
    • 확인 응답 번호
    • 제어 비트 - ACK, SYN, FIN
    • 윈도우

https://www.ietf.org/rfc/rfc793.txt

① 송신지 포트, 수신지 포트

  • 송수신하는 포트 번호

순서 번호 (sequence number)

  • 순서 번호가 명시되는 필드
  • 순서 번호 = 초기 순서 번호 + 송신한 바이트 수
    • 송수신되는 세그먼트 데이터의 첫 바이트에 부여되는 번호
    • 세그먼트의 올바른 송수신 순서를 보장하기 위한 번호
    • 초기 순서 번호는 무작위 값

https://www.youtube.com/watch?v=d6pUy1Z56h8&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=34&t=13s

확인 응답 번호 (acknowledgment number)

  • 수신자가 다음으로 받기를 기대하는 순서 번호 (일반적으로 수신한 순서 번호 + 1)
  • 확인 응답 번호 값을 보내기 위해서는 제어 비트에서 승인을 나타내는 비트인 ACK 플래그를 1로 설정

④ 제어 비트 (control bits) 또는 플래그 비트 (flag bits)

  • 현재 세그먼트에 대한 부가 정보
  • 기본적으로 8비트로 구성
    • ACK: 세그먼트의 승인을 나타내기 위한 비트
    • SYN: 연결을 수립하기 위한 비트
    • FIN: 연결을 종료하기 위한 비트

⑤ 윈도우 (window)

  • 수신 윈도우(한 번에 수신하고자 하는 데이터 양)의 크기가 명시

TCP 연결 수립과 종료

  • 액티브 오픈(active open): 연결 시작 호스트의 연결 수립 과정
  • 패시브 오픈(passive open): 연결 수락 호스트의 연결 수립 과정

  • 액티브 클로즈(active close): 종료 시작 호스트의 종료 과정
  • 패시브 클로즈(passive close): 종료 수락 호스트의 종료 과정
  • 연결 종료: 네 단계로 연결을 종료한다는 점에서 포 웨이 핸드셰이크(four-way handshake)라고 부르기도 함
  • 상태(state): 현재 어떤 통신 과정에 있는지를 나타내는 정보
  • TCP는 상태를 유지하고 활용하는 프로토콜: stateful

https://www.youtube.com/watch?v=d6pUy1Z56h8&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=34&t=13s

TCP 상태의 유형

  • 연결이 수립되지 않은 상태 - CLOSED, LISTEN
  • 연결 수립 과정에서 주로 볼 수 있는 상태 - SYN-SENT, SYN-RECEIVED, ESTABLISHED
  • 연결 종료 과정에서 주로 볼 수 있는 상태
    - FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSING

-1. 연결이 수립되지 않은 상태

  • CLOSED: 아무런 연결이 없는 상태
  • LISTEN: 일종의 연결 대기 상태(SYN 세그먼트를 기다리는 상태)
    • 서버로서 동작하는 패시브 오픈 호스트는 일반적으로 LISTEN 상태 유지
    • LISTEN 호스트에게 SYN 세그먼트를 보내면 3-way handshake 시작

-2. 연결 수립 상태

  • SYN-SENT: 연결 요청을 보낸 뒤 대기하는 상태, 액티브 오픈 호스트가 SYN 세그먼트를 보낸 뒤 그에 대한 응답인 SYN + ACK 세그먼트를 기다리는 상태
  • SYN-RECEIVED: 패시브 오픈 호스트가 SYN + ACK 세그먼트를 보낸 뒤 그에 대한 세그먼트를 기다리는 상태
  • ESTABLISHED: 연결이 확립되었음을 나타내는 상태

http://www.ktword.co.kr/test/view/view.php?m_temp1=1901&id=995

-3. 연결 종료 상태

  • FIN-WAIT-1: 일반적인 TCP 연결 종료 과정에 있어 FIN-WAIT-1은 연결 종료의 첫 단계
  • CLOSE-WAIT: 종료 요청인 FIN 세그먼트를 받은 패시브 클로즈 호스트가 그에 대한 응답으로 ACK 세그먼트를 보낸 후 대기하는 상태
  • FIN-WAIT-2: FIN-WAIT-1 상태에서 ACK 세그먼트를 받고 상대 호스트의 FIN 세그먼트를 기다리는 상태
  • LAST-ACK: CLOSE-WAIT 상태에서 FIN 세그먼트를 전송한 뒤 이에 대한 ACK 세그먼트를 기다리는 상태
  • TIME-WAIT
    • 액티브 클로즈 호스트가 FIN 세그먼트를 수신한 뒤, 이에 대한 ACK 세그먼트를 전송한 뒤 접어드는 상태
    • 패시브 클로즈 호스트는 마지막 ACK 세그먼트를 수신하면 CLOSED 상태로 전이
    • TIME-WAIT 상태의 액티브 클로즈 호스트는 일정 시간을 기다린 뒤 CLOSED 상태로 전이

 

TIME-WAIT 상태에서 ACK 세그먼트를 보낸 후 일정 시간을 기다려야 하는 이유는 마지막 ACK 세그먼트를 보낼 때 중간에 유실되거나, 잘못 전송될 수 있기 때문이다. 이에 반해 호스트 B는 마지막 ACK 세그먼트를 수신한 후 바로 CLOSED 상태로 접어든다.

https://www.youtube.com/watch?v=d6pUy1Z56h8&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=34&t=1289s

UDP 데이터 그램의 구조

  • UDP는 TCP와 달리 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜
  • 그래서 연결 수립 및 해제, 재전송을 통한 오류 제어, 혼잡 제어, 흐름 제어 등을 수행하지 않음
  • 상태를 유지하지 않음: stateless
  • UDP는 TCP에 비해 적은 오버헤드로 패킷을 빠르게 처리
  • 주로 실시간 스트리밍 서비스, 인터넷 전화처럼 실시간성이 강조되는 상황에서 TCP보다 더 많이 쓰임

https://www.ietf.org/rfc/rfc768.txt
https://www.youtube.com/watch?v=d6pUy1Z56h8&list=PLVsNizTWUw7HfOCgvlfHIDPPo3TE-2iQM&index=34