728x90
IP(Internet Protocol)
IP 주소는 일반적으로 비부호형 32비트 이진수로 표현되지만, 사람이 읽기 쉬운 형식으로는 8비트씩 4부분으로 나누어 10진수로 표현하며, 각 부분은 점으로 구분합니다. (192.168.0.1)
네트워크 프로그램은 IP 주소를 IP 주소 구조체에 저장합니다.
TCP / IP 프로토콜에서 가장 많이 사용되는 프로토콜입니다.
/* IP address structure */
struct in_addr {
uint32_t s_addr; /* Address in network byte order (big-endian) */
};
특성
- 비신뢰성: IP 데이터 그램이 목적지에 성공적으로 도달한다는 것을 보장하지 않음
- 비접속형: 전달되는 데이터그램에 대해 상태 정보 유지 않음
- 주소 지정: 각 네트워크 상에 접속해 있는 노드의 주소를 지정해서 데이터를 전송할 목적지 지정
- 경로 지정: IP의 주요 기능으로 목적지의 주소를 가지고 패킷을 전송하기 위해 최적 경로를 설정
- 계층 구조: IP 주소는 일반적으로 네트워크 부분과 호스트 부분으로 나뉘며, 이 구조 덕분에 인터넷이 계층적 라우팅을 수행할 수 있게 해줍니다.
- 호스트와 라우터의 구분: 모든 IP 주소는 호스트 또는 라우터에 할당되며, 라우터는 IP 데이터그램을 올바른 방향으로 전달하기 위한 중간 장치입니다.
- 서브넷: 큰 네트워크를 더 작은 단위(서브넷)로 나누어 관리할 수 있도록 설계되었으며, 각 서브넷 내에서도 고유한 호스트 주소가 필요합니다.
IP 헤더 필드(20바이트)
- Version: 프로토콜의 버전을 나타낸다.
- IP hdr: 선택 사항을 포함한 헤더 길이
- Type of Service: 3비트의 우선권 필드와 4비트의 TOS필드 그리고 값이 0인 사용되지 않은 1비트로 구성
- Total Length: IP 데이터 그램의 전체 길이를 바이트로 표현
- TTL: 데이터그램이 지날 수 있는 라우터의 상한을 설정하여 생존 시간 제한
- Identification: 호스트가 보낸 각 데이터그램을 유일하게 식별
- Flag: 세 개의 비트로 단편화 여부 표시
- Fragmentation Offset: 단편화된 조각들을 하나의 데이터그램으로 합칠 때, 전체 데이터그램에서의 상대적인 위치 표시
IP 주소 함수
인터넷 호스트들이 서로 다른 호스트 바이트 순서를 가질 수 있기 때문에 TCP / IP는 네트워크 패킷 헤더에 포함되는 IP 주소와 같은 모든 정수형 데이터 아이템에 대해 통일된 네트워크 바이트 순서를 정의합니다.
Unix는 네트워크와 호스트 바이트 순서 간의 변환을 위해 다음과 같은 함수들을 제공합니다.
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(unit16_t netshort);
자세한 설명은 CSAPP를 참고하세요.
→ 요즘엔 IP고갈 문제로 IPv4(32비트) 주소대신 IPv6(128비트)주소가 도입되고 있습니다. 사실 많이 적용 안됨.
728x90
'크래프톤 정글(C언어 WEEK 5 ~ 8)' 카테고리의 다른 글
DNS(Domain Name System) (0) | 2025.05.06 |
---|---|
TCP / UDP (1) | 2025.05.06 |
HTTP(Hyper Text Transfer Protocol) (1) | 2025.05.06 |
CGI(Common Gateway Interface) (1) | 2025.05.06 |
MIME Type (1) | 2025.05.06 |