IPv4(Internet Protocol version4)
옵션을 따로 사용하지 않는 일반적인 IP 헤더의 크기는 (최소 20, 최대 60) 바이트로 가변적이다.
헷갈릴 수 있는 게. 포맷 구조가 32비트 단위로 이뤄져있다. 하지만 IPv4의 각 필드들이 32비트 단위로 정렬됨의 의미이지 크기가 아니다. 이전에 만들어진 CPU는 대부분 x32 아키텍처였는데, 한번에 읽고 처리할 수 있는 워드의 크기가 32비트였기 때문이란다. 이렇게 동일하게 만들어두면 패킷 처리 속도가 훨씬 빨라지고 메모리 접근 효율성도 높다고 한다.
하지만 x64를 사용하는 지금도 딱히 문제는 없다고 한다. 64비트 CPU라고 해서 무조건 64비트 단위로 읽는 것은 아니고, 바이트 단위 모두 지원한다. 성능 차이도 미미. 어찌되었든 아주 오랫동안 전세계가 사용해오던 프로토콜에 하위 호완성이 최우선되니 32비트 포맷을 사용하는 것이라 한다.
옵션 자체도, 32비트로 표현해 헤더의 크기 x 4만 하면 될 수 있도록 설계되어있는 것.
1. version: IP 프로토콜의 버전을 의미하며 4비트로 설정된다. (0100)
2. Header Length: 헤더 길이. 옵션을 포함한 헤더의 총 길이를 나타낸다.
IPv4의 헤더의 크기는 20바이트로 가변적인데 왜 4비트만 사용할까
헤더 길이의 크기는 4비트로, 0~15까지 나타낼 수 있다. 옵션의 크기는 32비트이므로 1바이트, 즉 헤더 길이의 크기에 옵션의 크기를 곱하면 최소 20~60 바이트의 가변적인 크기를 나타낼 수 있는 것이다.
패킷 길이의 낭비가 심하니 바이트 단위를 비트 단위로 호환시킨건데, 실제 NIC 로 전송할 때는 바이트 스트림 단위로 전송되어 바이트 사이즈로 변경되어 송신한다. 수신측에서는 이를 받아 다시 비트 단위 필드 값을 해석한다.
3. Packet Length(전체 길이): 전체 길이 필드의 길이는 16비트로, 최대 크기는 65,535바이트가 된다.
4. Identification(식별자): 링크의 최대 전달 유닛 보다 더 큰 데이터를 보내기 위해 여러 개의 패킷으로 분할할 경우 목적지에서 재조립을 위해 상요하는 필드로 분할된 패킷들은 같은 식별자 값을 갖는다.
MTU(Maximum Transmission Unit)
한 번에 보낼 수 있는 최대 패킷 크기를 의미한다. 예를 들어, 송신자가 2000바이트 데이터를 보내는데, 중간의 네트워크 링크 MTU가 1500 바이트라면 쪼개서 보낼 수밖에 없다. 이 때 쪼갠 패킷들이 동일한 패킷임을 알려주기 위한 게 식별자다.
목적지에서는 이 값을 보고 같은 패킷에서 온 조각들을 인식하고 Offset과 같은 다른 필드들을 사용해 재조립한다.
5. flag: 단편화 여부나 단편화 된 필드가 몇번째 조각인지 구분하기 위한 필드.
6. Fragment Offset(단편화 오프셋): 패킷 재조립 시 분할된 패킷간의 순서에 대한 정보를 가진다.
7. TTL(Time-to-live) 패킷이 경유할 수 있는 최대 홉 수를 의미. 패킷이 라우터를 통과 할 때마다 TTL 값은 1씩 감소되고, TTL 값이 0이 되면 패킷은 폐기되고 송신측으로 ICMP가 전달됨.
홉(네트워크 수)
패킷의 홉 수를 정해두지 않으면 패킷이 계속 네트워크 상에서 떠돌고, 루프 문제 발생 위험이 있음
8. Transport(프로토콜): 해당 IP 패킷과 관련된 상위 프로토콜을 나타내기 위해 사용한다. 상위 프로토콜로든 TCP, UDP, ICMP 드이 있음. 최종 목적지에 도달했을 때 데이터가 전달되는 계층의 프로토콜을 명시한다.
9. Header Checksum: IP 패킷 헤더의 오류 발생 검사
그 밖에도 IP는 네트워크와 호스트 주소에 따라 A~E 클래스로 구분된다. 이 부분은 생략
- 호스트 주소의 모든 비트가 0 : 네트워크 주소. 네트워크 자체를 의미한다. 패킷의 송신지나 수신지로는 사용 불가
- 호스트 주소의 모든 비트가 1: 브로드캐스트 주소. 네트워크에 있는 모든 호스트로 패킷 전송할 때 사용
- 루프백 주소: 127.0.0.1로 이 곳으로 발송된 모든 요청은 다시 되돌아 이 곳으로 와 수신 된 것처럼 동작. 로컬 주소다.
사설 /공인IP
- 사설 IP: 가정이나 회사 내부에서 자유로운 사용. 공인 IP는 각 나라의 관할 기관에서 할당 받아야 사용 가능
전체 IP 주소를 관리하는 IANA가 사설 네트워크를 위해 미리 확보해 둔 것이며, 공인 IP 주소의 효율적 사용을 위한 차원에서 마련됐다.
A class: 10.0.0.0 - 10.255.255.255
B class: 172.16.0.0 - 172.31.255.255 (상가 건물이나.. 좀 규모가 큰 경우 사용.)
C class: 192.168.0.0 - 192.168.255.255
외부 네트워크 접속으로는 NAT를 이용한 주소 변환이 필요한데. 일반 가정집이나 작은 규모의 건물에서는 공유기가 그 역할을 대신해준다. 즉, 각 단말 ( 휴대폰, 컴퓨터, 노트북 등 )이 여러개의 사설 IP를 가지고 공유기를 통해 주소 변환을 이뤄 요청을 처리하게 된다. 이 때 반드시 우리가 통신사에서 할당 받은 랜선을 꽂게 되는데, 통신사에서 제공하는 DHCP 서버가 공인 IP를 자동으로 할당 시켜준다.
인터넷 랜선을 직접 본체에 꽂으면 공인 IP 주소 하나가 그 컴퓨터에 할당 된다. 그러니 다른 단말은 인터넷을 사용할 수 없게 된다.
집 내부 → 요청 → 공유기(공인 IP 부여) → 인터넷 서버(ISP), 공인 IP로 요청
전송 방식 | 설명 |
유니캐스트 | 하나의 송신자가 하나의 수신자에게 패킷 전송 |
멀티캐스트 | 하나의 송신자가 다수의 수신자에게 패킷 전송 이를 위해서 네트워크 장치가 멀티캐스트 지원은 물론 멀티캐스트 그룹에 가입되어있어야 함 |
브로드캐스트 | 같은 네트워크에 있는 모든 호스트들에게 패킷을 보냄. 호스트 주소는 모두 1 |
서브네팅
이 내용을 아주 오래전에 실습으로 진행했었다. 당시 구조 자체는 이해했으나 다시금 읽어보니 원리를 이해하지 못했다.
우선 서브네팅의 사용 이유는 IP 주소 낭비를 막기 위함이다. 네트워크를 다시 작은 네트워크로 나눠 요긴하게 관리도 할 수 있다.
서브넷 마스크에서 이진수로 1인 부분은 네트워크를, 0인 부분은 호스트를 나타내는데, 이 때 1은 연속적으로 나와야 한다.
예시 사례 - 210.100.100.3
이 주소는 기본적으로 C class에 속한다. 별도의 서브넷 조건이 없으면 기본적으로 255.255.255.0 서브넷 마스크를 가진다.
예시 주소와 서브넷 마스크를 각각 2진수로 표현 후 AND 연산을 한다.
IP와 마스크를 AND 연산하면,
네트워크 비트는 그대로 유지 되고 호스트 비트는 0으로 표현된다.
호스트 비트가 0이어야 네트워크 대표 주소를 알 수가 있다.
따라서 에시 주소의 네트워크 주소는 210.100.100.0이 되는데, 이를 3개의 서브넷 마스크로 나누려면 최소 2개의 비트가 필요하다. (2의 2제곱)
본래 255.255.255.0이었던 서브넷 마스크 중 마지막 바이트의 가장 앞 두자리를 쓰게 되니, 255.255.255.192의 서브넷 마스크가 적용되고. 각각 네트워크 주소와 브로드 캐스트 주소를 제외하고 4개의 서브넷으로 나눌 수 있다.
첫번째 서브넷 = 00/0
두번째 서브넷 = 01/64
세번쨰 서브넷= 10/128
네번째 서브넷= 11/192
'CS' 카테고리의 다른 글
TCP/IP Protocol (5) | 2025.08.10 |
---|