IP 는 Internet + Protocol 의 합성어, 즉 여러 컴퓨터들이 복잡하게 얽혀있는 인터넷 상 에서 데이터를 주고받는 규약 을 말합니다.
IP 주소란 인터넷상에서 내 컴퓨터의 주소라고 볼 수 있습니다. 이 때 IP 주소는 IP 를 따릅니다.
IPv4
32비트 주소 체계를 사용
주소는 4개의 8비트 숫자로 구성되며, 일반적으로 점으로 구분된 십진수(예: 192.168.0.1)로 표현됨
IPv6
128비트 주소 체계를 사용
주소는 8개의 16비트 숫자 그룹으로 구성되며, 콜론으로 구분된 16진수(예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334)로 표현됨
IP 의 문제점
IP 에는 비연결성, 비신뢰성, 프로그램 구분 불가, 순서 보장 불가 등의 문제가 있었습니다.
비연결성: 패킷을 받을 상대가 없거나 (전원이 꺼져있는 등으로) 불능 상태여도 패킷을 전송하는 것
비신뢰성 : 상대에게 패킷을 보내던 중 패킷이 사라지거나, 순서대로 받지 못하는 것
프로그램 구분 불가 : IP 주소 만으로는, 어떤 애플리케이션과 데이터를 주고받아야 하는지를 모르는 것
예를들어 123.123.123.123 이라는 IP 주소를 사용하는 클라이언트가 게임과 음악감상, 인터넷 서핑을 하고 있을 때, 각 서비스는 IP 주소 만으로는 데이터를 어느 어플리케이션으로 보내주어야 하는 지 알 수 없음
이는 TCP 에서 보다 많은 데이터를 제공함으로써 해결할 수 있게 되었습니다.
TCP
TCP 는 Transmission Control Protocol 입니다. 전송 제어 프로토콜이라고도 합니다. TCP/IP 4계층에서는 3계층이며, OSI 7계층에서는 전송 계층(4) 입니다. 전송 제어 라고하니 전송을 보다 안전하게 할 수 있을 것 같은 느낌이 들기도 하는 이름입니다.
TCP 에서는 IP 에서의 문제점이었던 비연결성, 비신뢰성, 프로그램 구분 등을 보다 많은 정보를 담음으로써 개선하였습니다.
연결 지향 - TCP 3 way handshake (가상 연결)
일단 먼저 상대와 연결을 하고 메시지를 보내도록 함
즉 상대가 꺼져있거나 등 연결이 안되면 메시지를 보내지 않음
데이터 전달 보증
패킷 누락 등으로 상대가 못받은것을 알 수 있음
순서 보장
따라서 보다 신뢰할 수 있는 프로토콜로, 현재는 대부분의 애플리케이션에서 TCP 를 사용한다고 합니다.
TCP 세그먼트에 있는 데이터 (출발지와 목적지 포트 번호, 순서 번호, 확인 응답 번호, 플래그, 윈도우 크기 등) 를 바탕으로 3-way handshake 를 하기 때문에 보다 신뢰성있는 연결이 가능합니다.
3 way handshake 의 과정입니다.
client -> server : SYN (synchronous: 연결)
client <- server : SYN+ACK (알겠어)
client -> server : ACK (알겠어)
이 때 마지막 단계에서 ACK 과 데이터를 같이 전송할 수 있는데, 이를 피기백(piggyback) 이라고도 합니다.
(출처 : HTTP 강의 - 김영한 님)
단 이 때 client 와 server 의 연결은, client 와 server 가 서로의 존재를 알고 active 한 상태라는 것도 아는 정도의 단계 를 말한다. client - server 간의 모든 노드(서버) 들까지도 연결이 되었다는 뜻은 아닙니다.
여담으로... 찾아보면서 UDP 라면 HTTP Response 가 안오나? 라는 생각이 들었는데요, 찾아보니 HTTP 는 TCP 기반이기 때문에 HTTP Response 를 받는 것은 아무래도 어렵다고 합니다. 그러고보니 HTTP 는 클라이언트와 서버간에 통신을 하도록 하는 프로토콜이기 때문에 당연한 말이기도 하네요.
데이터 전달 및 순서 보장
TCP 세그먼트에는 순서 번호, 확인 응답 번호 가 있기 때문에 제대로 받았는지, 그리고 순서가 올바른지 알 수 있습니다. 따라서 잘못된 경우 패킷 재전송을 요청할 수도 있습니다.
(출처 : HTTP 강의 - 김영한 님)
(출처 : 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 의 줄임말 입니다. 기능이 거의 없어 하얀 도화지 같은 프로토콜이기도 합니다.
연결지향 - TCP 3 way handshake X
데이터 전달 보증 X
순서 보장 X
IP 와 거의 같지만, PORT 번호와 체크섬 정도가 추가되었습니다.
따라서 아래와 같은 장점이 있습니다.
데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
데이터 전송 양도 TCP 보다 많이 보낼 수 있음
원하는대로 최적화를 해볼 수 있음 (백지) -> 관심을 받고 있습니다
각광받는 UDP
HTTP3 스펙에서 3 way handshaking 에 대한 부담을 느껴 최적화를 하며 UDP 를 사용하였습니다. 이에 많은 관심을 받고 있습니다.
또한 UDP 는 이미 최적화가 완료된 TCP 와 달리 기능이 거의 없어 도화지 같은 프로토콜이라, 원하는대로 최적화를 해볼 수 있다는 점에서도 관심을 받고 있기도 합니다.
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 를 사용한다고 합니다.
(출처 : https://yozm.wishket.com/magazine/detail/1956/)
번외로 TCP/IP 4계층의 각 계층은 이렇습니다.
TCP/IP 패킷
패킷은 수화물(package) 과 덩어리(bucket) 의 합성어 입니다. 즉 데이터를 박스에 넣어서 보낸다는 의미와도 같습니다.
TCP 는 보다 많은 정보를 담음으로써 IP 에서의 문제점을 해결할 수 있었습니다. 출발지와 목적지의 PORT 번호, 전송 제어, 순서, 검증 정보 등을 담았습니다.
(출처 : HTTP 강의 - 김영한 님)
[신뢰성 있는 연결] TCP 세그먼트의 헤더 구조
그렇다면 TCP 는 어떻게 상대방의 정보를 알 수 있는걸까요? 그것은 TCP 세그먼트의 헤더 구조 때문입니다. TCP 헤더에는 출발지와 목적지의 포트 번호가 명시되어 있으며, 이 정보는 TCP 연결의 모든 단계에서 사용됩니다.
(출처 : https://www.geeksforgeeks.org/services-and-segment-structure-in-tcp/)
[신뢰성 있는 연결] TCP 3 way handshake
TCP 세그먼트에 있는 데이터 (출발지와 목적지 포트 번호, 순서 번호, 확인 응답 번호, 플래그, 윈도우 크기 등) 를 바탕으로 3-way handshake 를 하기 때문에 보다 신뢰성있는 연결이 가능합니다.
3 way handshake 의 과정입니다.
이 때 마지막 단계에서 ACK 과 데이터를 같이 전송할 수 있는데, 이를 피기백(piggyback) 이라고도 합니다.
(출처 : HTTP 강의 - 김영한 님)
단 이 때 client 와 server 의 연결은, client 와 server 가 서로의 존재를 알고 active 한 상태라는 것도 아는 정도의 단계 를 말한다. client - server 간의 모든 노드(서버) 들까지도 연결이 되었다는 뜻은 아닙니다.
여담으로... 찾아보면서 UDP 라면 HTTP Response 가 안오나? 라는 생각이 들었는데요, 찾아보니 HTTP 는 TCP 기반이기 때문에 HTTP Response 를 받는 것은 아무래도 어렵다고 합니다. 그러고보니 HTTP 는 클라이언트와 서버간에 통신을 하도록 하는 프로토콜이기 때문에 당연한 말이기도 하네요.
데이터 전달 및 순서 보장
TCP 세그먼트에는 순서 번호, 확인 응답 번호 가 있기 때문에 제대로 받았는지, 그리고 순서가 올바른지 알 수 있습니다. 따라서 잘못된 경우 패킷 재전송을 요청할 수도 있습니다.
(출처 : HTTP 강의 - 김영한 님)
(출처 : 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 헤더 구조
(출처 : https://ipwithease.com/udp-user-datagram-protocol/)
그림과 같이, TCP 헤더 구조에 비해 많이 간단합니다.
출처