✍ IP (Internet Protocol) 란?
우리가 다른 곳으로 데이터를 보내면 인터넷 상의 수많은 노드들을 거쳐 목적지 호스트로 전달되게 됩니다. 이 때 거치는 노드의 경로들은 라우팅 프로토콜과 같은 물리적 패킷 전송 방식에 따라 달라지기 때문에, 데이터를 전송할 때 목적지를 나타내는 정보가 있어야 합니다. 그 목적지를 나타내는 정보가 바로 'IP' 주소 입니다.
IP (Internet Protocol) 이란, OSI 7계층에서 3계층인 네트워크 계층의 데이터 전송 프로토콜로 사용됩니다. IP 프로토콜에서는 지정한 IP 주소 (IP Address)에 데이터를 전달하게 됩니다.
IP 프로토콜에서는 '패킷' 단위로 데이터가 전송됩니다. (데이터 링크 계층은 '프레임' / 전송 계층은 '세그먼트' 라는 이름으로 데이터를 나누지만 일반적으로 '패킷'이라는 단어를 많이 사용합니다.)
상위 계층에서 내려온 전송 데이터에 출발지 IP, 목적지 IP등의 정보를 포함하는 IP 헤더를 붙여 전송하게 됩니다. IP 프로토콜은 상위 계층에서 내려온 전송 데이터가 패킷 하나로 전송하기에 너무 크다면 패킷을 분할하는 기능도 있습니다.
IP 프로토콜의 주요 특징
- 비연결형
- 비신뢰성
- 패킷을 분할 / 병합하는 기능 수행 가능
- Best Effort 원칙에 따라 전송
IP 프로토콜 덕분에 목적지 IP 정보에 따라, 데이터를 원하는 목적지에 전달할 수 있게 되었습니다. 하지만, IP 프로토콜은 다음과 같은 여러가지 한계점이 존재합니다.
IP 프로토콜의 한계
1. 비연결형
- IP 프로토콜은 별도의 연결 설정 없이 목적지 호스트(목적지 IP)로 데이터를 전송합니다. 따라서, 목적지 호스트에 문제가 생기거나, 목적지 IP를 잘못 설정하여 패킷을 받을 대상이 없어도 패킷을 전송합니다. IP 프로토콜은 전송받은 데이터에 대해 응답(ACK)을 보내지 않기때문에 데이터를 보내는 사람도 이 사실을 알 수 없습니다.
2. 비신뢰성
- IP 프로토콜은 Best Effort 원칙에 따라 데이터를 전송하기 때문에 데이터의 신뢰성을 보장하지 않습니다. 따라서, 만약 중간에 패킷이 분실되거나 패킷이 순서대로 도착하지 않았을 때 데이터가 꼬이더라도 이를 해결할 방법을 제공하지 않습니다. (다른 프로토콜에서는 타임아웃, 순서번호와 같은 방법으로 이 문제점을 해결합니다.)
3. 프로그램 구분
- IP 프로토콜에서는 PORT 개념이 없습니다. 따라서, 같은 IP에서 둘 이상의 애플리케이션으로부터 데이터를 수신할 경우, 어떤 데이터가 어떤 애플리케이션에 필요한지 구분할 수 없습니다.
✍ TCP (Transmission Control Protocol) 란?
- TCP는 IP 프로토콜 위에서 연결형 서비스를 지원하는 전송 계층 프로토콜로 OSI 7계층에서 4계층(전송 계층)에 해당하며, 현재 대부분의 인터넷 환경에서 사용하고 있습니다.
http://www.ktword.co.kr/test/view/view.php?nav=&m_temp1=1889&id=1103
TCP는 IP 프로토콜 위에서 동작합니다. 송신 호스트쪽에서 데이터를 보낼 때 TCP Data를 먼저 TCP 헤더를 붙여 '세그먼트' 단위의 데이터로 만들고 이후, IP 프로토콜에 의해 IP 헤더를 추가로 덧붙여 패킷, 이후의 프레임 단위로 네트워크 장비를 통해 데이터가 전송됩니다. 따라서 전송되는 데이터에는 IP 헤더의 정보와 TCP 헤더의 정보가 함께 전송된다고 볼 수 있습니다.
TCP 프로토콜의 주요 특징
- 연결형 서비스 (3 way handshake)
- 데이터 전달 보증
- 순서 보장
- 오류 검출
- 혼잡 제어
- PORT 정보 제공
🌐 연결형 서비스
TCP를 사용하는 프로세스는 데이터를 보내기 전에 먼저 수신 호스트와 연결을 설정합니다. 이때 사용되는 연결 설정 방식이 바로 3단계 설정 (3-way handshake)입니다.
1. 먼저 송신 호스트측에서 SYN 플래그(연결 요구 비트)를 지정한 세그먼트를 전송함으로써 연결 설정을 요구한다.
2. 연결 설정 요구를 받은 수신 호스트측에서 ACK 플래그와 SYN 플래그를 지정하여 긍정 응답과 연결 설정을 요구한다.
3. 연결 설정 요구를 받은 송신 호스트측에서 다시 ACK 플래그를 보내 연결 설정을 완료한다.
🌐 신뢰성있는 데이터 전달 보증
데이터 전달 보증
- TCP의 데이터 전송을 통해 데이터를 수신 프로세스측에서 정상적으로 수신했다면 긍정 응답을 송신 측으로 보내주기 때문에 보낸 데이터가 성공적으로 수신되었는지 알 수 있습니다.
오류 검출(체크섬, 타임 아웃 등)
- TCP는 부정 응답 기능인 NAK를 사용하지 않습니다. 따라서, 수신 프로세스에 도착한 데이터 세그먼트의 내용이 변형되어도 수신 프로세스가 응답을 하지 않아 데이터 분실과 동일하게 타임아웃 기능에 의해 오류가 복구됩니다.
- TCP는 체크섬 필드를 포함하고 있습니다. 따라서 TCP 에서는 다항 코드 방식 (CRC)을 통해 데이터의 오류를 검출해낼 수 있다. 이런 다항 코드 방식은 일반 네트워크에서 많이 발생하는 버스트 에러를 검출하는 확률이 높은 것으로 알려져있습니다.
순서 보장
- TCP로 전송되는 각 세그먼트에는 순서 번호 필드가 포함되어 있습니다. 순서 번호를 통해 중복된 데이터가 수신되지는 않았는지 검증할 수 있습니다. 또한 순서 번호에 따라 송신 프로세스에서는 데이터를 순차적으로 전송하고, 수신 프로세스측에서는 세그먼트의 순서 번호를 바탕으로 데이터를 재조합하기 때문에 데이터의 순서가 보장됩니다.
🌐 PORT 정보 제공
TCP 헤더에는 송신 프로세스와 수신 프로세스의 PORT 를 포함하고 있습니다. 따라서 하나의 컴퓨터(IP)에서 여러 어플리케이션을 통해 데이터를 전달 받더라도, TCP 헤더에 포함된 PORT 정보에 따라 각 데이터가 알맞은 애플리케이션에 전달될 수 있습니다.
Reference.
- https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
- 쉽게 배우는 데이터 통신과 네트워크 / 박기영 (한빛 아카데미)