dev-writeup-2024 / march

개발 1일 1글 스터디
2 stars 0 forks source link

[03-04] IP, TCP, UDP #1

Open snaag opened 7 months ago

snaag commented 7 months ago

IP 와 TCP, UDP

IP

IP 는 Internet + Protocol 의 합성어, 즉 여러 컴퓨터들이 복잡하게 얽혀있는 인터넷 상 에서 데이터를 주고받는 규약 을 말합니다. IP 주소란 인터넷상에서 내 컴퓨터의 주소라고 볼 수 있습니다. 이 때 IP 주소는 IP 를 따릅니다.

IP 의 문제점

IP 에는 비연결성, 비신뢰성, 프로그램 구분 불가, 순서 보장 불가 등의 문제가 있었습니다.

이는 TCP 에서 보다 많은 데이터를 제공함으로써 해결할 수 있게 되었습니다.

TCP

TCP 는 Transmission Control Protocol 입니다. 전송 제어 프로토콜이라고도 합니다. TCP/IP 4계층에서는 3계층이며, OSI 7계층에서는 전송 계층(4) 입니다. 전송 제어 라고하니 전송을 보다 안전하게 할 수 있을 것 같은 느낌이 들기도 하는 이름입니다.

TCP 에서는 IP 에서의 문제점이었던 비연결성, 비신뢰성, 프로그램 구분 등을 보다 많은 정보를 담음으로써 개선하였습니다.

따라서 보다 신뢰할 수 있는 프로토콜로, 현재는 대부분의 애플리케이션에서 TCP 를 사용한다고 합니다.

image (출처 : https://yozm.wishket.com/magazine/detail/1956/)

번외로 TCP/IP 4계층의 각 계층은 이렇습니다.

TCP/IP 패킷

패킷은 수화물(package) 과 덩어리(bucket) 의 합성어 입니다. 즉 데이터를 박스에 넣어서 보낸다는 의미와도 같습니다.

TCP 는 보다 많은 정보를 담음으로써 IP 에서의 문제점을 해결할 수 있었습니다. 출발지와 목적지의 PORT 번호, 전송 제어, 순서, 검증 정보 등을 담았습니다.

image

(출처 : HTTP 강의 - 김영한 님)

[신뢰성 있는 연결] TCP 세그먼트의 헤더 구조

그렇다면 TCP 는 어떻게 상대방의 정보를 알 수 있는걸까요? 그것은 TCP 세그먼트의 헤더 구조 때문입니다. TCP 헤더에는 출발지와 목적지의 포트 번호가 명시되어 있으며, 이 정보는 TCP 연결의 모든 단계에서 사용됩니다.

image

(출처 : https://www.geeksforgeeks.org/services-and-segment-structure-in-tcp/)

[신뢰성 있는 연결] TCP 3 way handshake

TCP 세그먼트에 있는 데이터 (출발지와 목적지 포트 번호, 순서 번호, 확인 응답 번호, 플래그, 윈도우 크기 등) 를 바탕으로 3-way handshake 를 하기 때문에 보다 신뢰성있는 연결이 가능합니다.

3 way handshake 의 과정입니다.

  1. client -> server : SYN (synchronous: 연결)
  2. client <- server : SYN+ACK (알겠어)
  3. client -> server : ACK (알겠어)

이 때 마지막 단계에서 ACK 과 데이터를 같이 전송할 수 있는데, 이를 피기백(piggyback) 이라고도 합니다.

image (출처 : HTTP 강의 - 김영한 님)

단 이 때 client 와 server 의 연결은, client 와 server 가 서로의 존재를 알고 active 한 상태라는 것도 아는 정도의 단계 를 말한다. client - server 간의 모든 노드(서버) 들까지도 연결이 되었다는 뜻은 아닙니다.

여담으로... 찾아보면서 UDP 라면 HTTP Response 가 안오나? 라는 생각이 들었는데요, 찾아보니 HTTP 는 TCP 기반이기 때문에 HTTP Response 를 받는 것은 아무래도 어렵다고 합니다. 그러고보니 HTTP 는 클라이언트와 서버간에 통신을 하도록 하는 프로토콜이기 때문에 당연한 말이기도 하네요.

데이터 전달 및 순서 보장

TCP 세그먼트에는 순서 번호, 확인 응답 번호 가 있기 때문에 제대로 받았는지, 그리고 순서가 올바른지 알 수 있습니다. 따라서 잘못된 경우 패킷 재전송을 요청할 수도 있습니다.

image (출처 : HTTP 강의 - 김영한 님)

image (출처 : HTTP 강의 - 김영한 님)

이런 것들은 모두 TCP 세그먼트에 순서 번호(Sequence Number)와 확인 응답 번호(Acknowledgment Number) 가 있기 때문입니다.

UDP/IP 가 아닌 TCP/IP 라는 용어를 사용하는 이유는?

UDP/IP 보다 TCP/IP 라는 용어를 사용하는 이유는 TCP 가 더 대중적이라서 그런걸까요?

TCP 는 UDP 보다 많은 정보를 제공합니다, 즉 TCP 는 UDP 를 커버할 수 있기 때문에 TCP/IP 의 TCP 는 UDP 를 포함하기도 합니다. 또한 TCP 는 신뢰성있는 통신을 사용하고, (의미적으로 포함되기 때문에) 보다 보편적입니다. 이와달리 UDP 는 특정 상황에 적합한 프로토콜로 인식됩니다.

따라서 TCP 가 보다 보다 보편적이고 더 넓은 정보를 제공하기 때문에 TCP/IP 를 사용합니다. 그리고 이때 TCP 는 UDP 를 의미적으로 포함합니다.

UDP

사용자 데이터그램 프로토콜로, User Datagram Protocol 의 줄임말 입니다. 기능이 거의 없어 하얀 도화지 같은 프로토콜이기도 합니다.

IP 와 거의 같지만, PORT 번호와 체크섬 정도가 추가되었습니다. 따라서 아래와 같은 장점이 있습니다.

각광받는 UDP

HTTP3 스펙에서 3 way handshaking 에 대한 부담을 느껴 최적화를 하며 UDP 를 사용하였습니다. 이에 많은 관심을 받고 있습니다.

또한 UDP 는 이미 최적화가 완료된 TCP 와 달리 기능이 거의 없어 도화지 같은 프로토콜이라, 원하는대로 최적화를 해볼 수 있다는 점에서도 관심을 받고 있기도 합니다.

UDP 헤더 구조

image (출처 : https://ipwithease.com/udp-user-datagram-protocol/)

그림과 같이, TCP 헤더 구조에 비해 많이 간단합니다.

출처

mingnuj commented 7 months ago

으악 운체 오랜만이네요 이번 스터디도 화이팅입니다

snaag commented 7 months ago

@mingnuj 요새 네트워크 다시 하고 잇슴미다 🫠..