이 포스팅은 '성공과 실패를 결정하는 1%의 네트워크 원리' 책을 기반으로 작성되었습니다.
2장 세번째, IP와 이더넷의 패킷 송 수신 동작
1. 패킷의 기본
IP 담당 부분이 어떻게 패킷을 상대에게 송신하는가?
패킷은 헤더와 데이터 두 부분으로 구성된다. 헤더에는 수신처 주소 등의 제어 정보가 들어있고 데이터 부분에는 그 자체로 데이터가 담긴다.
먼저 패킷의 송신처가 되는 기기가 패킷을 만든다. 그리고 가장 가까운 중계장치에 송신한다. 중계 장치는 도착한 패킷의 헤더를 조사하여 다음 목적지를 판단한다. 이 때 어느 수신처가 어느 방향에 있는지에 대한 정보를 기록한 표 같은 것을 사용한다. 헤더에 기록된 내용과 표에 등록된 내용을 결합하여 목적지를 판단하는 것이다.
TCP/IP 패킷 구조는 이 기본에서 발전한 것으로 조금 더 복잡하다.
라우터와 허브라는 두 종류의 패킷 중계장치에서 역할을 분담하여 패킷을 운반하기 때문이다. TCP/IP 패킷에는 두 개의 헤더가 붙어있다.
MAC 헤더(이더넷 용 헤더) / IP 헤더(IP용 헤더)
라우터는 IP 규칙에 따라 패킷을 운반하고 허브는 이더넷의 규칙에 따라 패킷을 운반한다.
먼저 송신처에서 패킷의 목적지가 되는 액세스 대상 서버의 IP 주소를 IP 헤더의 수신처에 기록한다. IP는 수신처가 있는 방향에 있는 다음 라우터를 조사한다. 라우터를 찾으면 그 라우터에 할당된 이더넷 주소(MAC 주소)를 조사하고, MAC 헤더에 기록한다. 그리고 다음 라우터에 패킷이 도착하도록 이더넷에 의뢰한다. 이렇게 패킷을 송신하면 이더넷의 원리에 따라 패킷이 허브에 도착한다. 허브에 도착하게 되면 패킷의 목적지를 판단하기 위한 표와 헤더가 결합되어 다음 목적지를 판단한다. 그러면 패킷은 다음 라우터에 도착하게 되는 것이다. IP와 역할을 분담하는 구조는 이더넷 말고도 무선 LAN 등이 존재한다.
2. 패킷 송수신 동작의 개요
패킷을 운반하는 것은 라우터와 허브가 하므로 IP 담당 부분은 패킷을 송출하기만 하는 입구 부분이다. 하지만 입구 부분에서 해야 할 일이 있다. TCP 담당 부분으로부터 데이터 조각에 TCP 헤더가 부가된 것을 받는다. 이것이 들어가는 내용물이 되고 동시에 통신 상대의 IP주소를 나타낸다. TCP 담당부분은 IP 담당 부분에게 이 내용물을 '이 상대에게 전달해주세요' 라고 의뢰하는 것이다.
IP 담당 부분은 내용물을 하나의 데이터로 간주하고 앞에 제어 정보를 기록한 헤더(IP헤더, MAC헤더)를 부과한다. 두 헤더가 덧붙여진 패킷을 네트워크용 하드웨어에 건네준다. 하드웨어는 이더넷이나 무선 LAN 등을 말한다. (여기서는 LAN어댑터로 통일) LAN 어댑터에게 전달되는 데이터의 형태는 0과 1로 이루어진 디지털 데이터이다. 이것이 LAN 어댑터에 의해 전기나 빛의 신호 상태로 바뀌어 케이블에 송출된다.
응답이 들어오면 마찬가지로 전기나 빛의 신호 상태로 응답이 돌아올 것이다. 이것을 LAN 어댑터에서 디지털 데이터의 모습으로 되돌린다. 그러면 IP 담당 부분이 MAC 헤더와 IP 헤더 뒤에 이어지는 내용물, TCP 헤더와 데이터 조각을 TCP 담당 부분에게 건네준다.
3. 수신처 IP 주소를 기록한 IP 헤더를 만든다.
IP 담당 부분은 TCP담당 부분으로부터 송신 의뢰를 받으면 건네 받은 TCP헤더에 IP헤더를 부과한다고 했다. IP 헤더에 들어가는 내용 중 가장 중요한 것은 수신처 IP 주소이다. 여기에서 TCP 담당 부분에서 통지된 통신 상대의 IP 주소를 그대로 설정한다. 송신처 IP 주소도 설정한다. 보통 송신처 IP주소는 LAN 어댑터에 의해 결정된다. LAN 어댑터가 여러 개일 경우, 어느 LAN 어댑터를 사용하여 패킷을 송신해야 하는지를 판단하는 것이 곧 송신처 IP 주소를 결정하는 것이 된다. 패킷을 건네줄 상대를 판단하는 방법은 라우터가 IP용 표를 사용하여 다음 라우터를 결정하는 동작과 같다.
프로토콜 번호라는 필드에도 값을 설정한다. 프로토콜 번호란 패킷에 들어간 내용물이 어디에서 의뢰받은 것인지를 나타내는 값이다. TCP에서 의뢰받은 내용물이라면 06(_16), UDP에서 의뢰받은 것이면 17(_16)이다.
4. 이더넷 용 MAC 헤더를 만든다.
IP 담당 부분 앞에 MAC 헤더를 붙인다. 이더넷의 수신처 판단 구조로 사용하는 것이 MAC 헤더이다. 이더넷에는 TCP/IP와는 다른 구조로 패킷의 수신처를 판단하기 때문이다. MAC 헤더는 세 부분으로 나뉘어 진다. 수신처 MAC 주소, 송신처 MAC 주소, 이더 타입. IP 주소는 32비트이고 MAC 주소는 48이며, IP 주소는 주소를 보는 것과 같이 그룹화 개념이 있지만, MAC주소는 48비트를 한 개의 값으로 여겨진다. 이더넷은 MAC 헤더 뒤에 이어지는 내용물이 무엇인지를 이더 타입으로 나타낸 것이다. 이더넷의 내용물은 IP나 ARP라는 프로토콜의 소켓이며, 규칙에 따라 값을 기록하게 된다.
5. ARP로 수신처 라우터의 MAC 주소를 조사한다.
ARP(Address Resolution Protocol)
이더넷에는 연결되어 있는 모든 서브넷에 패킷을 전달하는 브로드캐스트라는 구조가 있다. 이 구조를 사용하여 IP 주소를 갖고 있는 서브넷을 찾아낸다. ( 모두에게 질의를 하면 응답이 오는 형식인 것이다!) 패킷을 보낼 때마다 이 동작을 하면 ARP의 패킷이 너무 많이지기 때문에, 한 번 조사한 결과는 ARP 캐시라는 메모리 영역에 보존하여 다시 이용한다. 즉 패킷을 송신할 때 우선 캐시를 조사하여 상대의 MAC 주소가 저장되어 있으면 ARP 조회 과정을 거치지 않고 캐시에 보존되어 있는 값을 사용하는 것이다. 하지만 캐시에 저장된 값은 일정 시간이 지나면 삭제된다. 캐시의 내용과 현실 사이에 일치하지 않을 수 있기 때문이다. MAC 헤더를 IP 헤더 앞에 붙이면 패킷이 완성된다. 이렇게 패킷을 만들기까지가 IP 담당 부분의 역할이다.
6. 이더넷의 기본
이더넷은 다수의 컴퓨터가 여러 상대와 자유롭게 적은 비용으로 통신하기 위해 고안된 통신 기술이다. 패킷의 수신처 MAC 주소에 따라 누구에게 갈 것인지를 알고, 송신처 MAC 주소에 따라 누가 송신한 것인지 알며 이더 타입에 의해 패킷의 내용물로 무엇이 들어있는지를 아는 원리로 패킷이 전달된다.
7. IP 패킷을 전기나 빛의 신호로 변환하여 송신한다.
아직 IP가 만든 패킷은 메모리에 기억된 디지털데이터이다. 그렇기 때문에 전기나 빛의 신호로 변환하여 네트워크 케이블에 송출해야 한다. 이 동작을 실행하는 것이 LAN 어댑터이다. LAN 어댑터를 제어하려면 LAN 드라이버 소프트웨어가 필요하다. (모든 하드웨어는 제어하기 위한 드라이버 소프트웨어가 필요하다.) LAN 어댑터는 사용하기 위해 초기화 작업으로 이더넷의 송 수신 동작을 제어하는 MAC이라는 회로에 MAC 주소를 설정한다. 이 MAC주소는 전 세계에서 중복되지 않도록 일원화되어 관리되고 있다. LAN 어댑터의 ROM에 제조할 때 기록되며, LAN 드라이버가 MAC 회로에 설정한다.
8. 패킷에 3개의 제어용 데이터를 추가하고 허브를 향해 패킷을 송신한다
LAN 드라이버는 IP 담당 부분에서 패킷을 받으면 그것을 LAN 어댑터의 버퍼 메모리에 복사한다. 그 다음 MAC 회로의 작업이 시작된다. MAC 회로는 송신 패킷을 버퍼 메모리에서 추출하고 맨 앞에는 프리앰블과 스타트 프레임 딜리미터라는 두개의 데이터를, 맨 끝에는 프레임 체크 시퀀스(FCS)라는 오류 검출용 데이터를 부가한다.
각각의 역할은 무엇인가?
프리앰블은 송신하는 패킷을 읽을 때 타이밍을 잡기 위한 것이다.
스타트 프레임 딜리미터는 패킷의 시작을 나타내는 표시가 된다.
FCS는 패킷을 운반하는 도중에 잡음 등의 영향으로 파형이 흐트러져 데이터가 변한 경우 이것을 검출하기 위해 사용한다.
드디어 케이블에 송출하는 패킷이 완성되었다. 이제 케이블에 송출하게 된다.
2장 세번째 The End
'Dev.Basic > 네트워크' 카테고리의 다른 글
#Transport Layer, TCP vs UDP (0) | 2016.11.23 |
---|---|
[3장] 1. 복수 서버에 리퀘스트를 분배한 서버의 부하 분산 (0) | 2016.11.16 |
[2장] 2. 데이터를 송 수신하는 과정 (0) | 2016.11.11 |
[2장] 1. TCP/IP - 소켓을 작성하고 서버에 접속한다. (0) | 2016.11.10 |
[1장] 4. 프로토콜 스택에 메시지 송신을 의뢰한다. (0) | 2016.11.09 |