[TCP/IP] IP와 이더넷의 패킷 송수신 동작
패킷의 기본
패킷은 헤더와 데이터의 두 부분으로 구성된다.
네트워크 계층을 거치면서 패킷에 헤더나 데이터가 붙게 된다.
TCP 담당 부분은 통신 상대와 대화할 때 IP 담당 부분에 의뢰하여 데이터를 패킷의 모습으로 만들어 상대에게 보낸다.
TCP/IP 패킷에는 MAC 헤더(이더넷용 헤더)와 IP 헤더(IP용 헤더)가 붙어있다.
- IP 헤더 : IP 프로토콜에 따라 IP 주소로 표시된 목적지까지 패킷을 전달할 때 사용하는 제어 정보
- MAC 헤더 : 이더넷 등의 LAN을 사용하여 가장 가까운 라우터까지 패킷을 운반할 때 사용하는 제어 정보
패킷은 클라이언트에서 허브나 라우터를 거쳐 목적지인 서버로 최종적으로 전달된다.
패킷 송수신 동작의 개요
위에서 만든 패킷을 네트워크용 하드웨어(이더넷이나 무선 LAN 등)에 건네준다.
LAN 어댑터에 건네줄 때의 패킷의 모습은 0이나 1의 비트가 이어진 디지털 데이터이며, 이것이 LAN 어댑터에 의해 전기나 빛의 신호 상태로 바뀌어 케이블에 송출된다.
TCP 담당 부분의 데이터 송수신 동작에는 각 단계에서 다양한 역할을 가진 패킷이 존재했는데, IP 패킷의 송수신 동작은 패킷의 역할에 관계 없이 모두 같다.
IP 담당 부분은 TCP 헤더와 데이터 조각을 한 덩어리의 바이너리 데이터로 간주하여 내용을 보지 않고 송수신한다.
내용을 보지 않으므로 TCP 헤더와 데이터 조각 두 가지가 들어있는지, 패킷의 순번이 바뀌어 들어오거나 패킷이 없어졌는지 상관하지 않는다.
IP 헤더
IP 담당 부분은 TCP 담당 부분에서 패킷 송수신 의뢰를 받으면 IP 헤더를 만들어 TCP 헤더 앞에 붙인다.
IP 헤더의 필드는 수신처 IP 주소, 송신처 IP 주소 등으로 구성된다.
수신처 IP 주소에는 TCP 담당 부분에서 통지된 패킷을 전달할 통신 상대의 IP 주소를 설정한다.
이 IP 주소는 애플리케이션에서 통지된 것을 TCP 담당 부분이 IP 담당 부분에게 통지하므로 본래 애플리케이션에서 통지된 통신 상대의 IP 주소다.
송신처 IP 주소에는 송신처가 되는 LAN 어댑터를 판단하여 주소를 설정한다.
MAC 헤더
IP 담당 부분이 IP 헤더를 붙였으면 그 앞에 MAC 헤더를 붙인다.
MAC 헤더는 이더넷에서 사용하는 헤더로서 수신처와 송신처의 MAC 주소 등이 기록되어 있다.
송신처의 MAC 주소에는 LAN 어댑터를 제조할 때 ROM에 기록된 MAC 주소를 설정한다.
수신처 MAC 주소에는 IP 주소에서 MAC 주소를 조사하는 동작을 실행하여 Gateway 항목에 기록되어 있는 주소를 설정한다.
MAC 주소를 조사할 때는 ARP(Address Resolution Protocol)을 사용한다.
이더넷에는 연결되어 있는 전원에게 패킷을 전달하는 브로드캐스트가 있는데 이를 이용하여 특정 IP 주소를 가지고 있는 기기를 찾을 수 있다.
한 번 조사한 결과는 ARP 캐시를 사용하여 다시 이용한다.
IP 헤더의 수신처는 목적지인 서버인채로 변하지 않으며, MAC 헤더는 라우터가 패킷을 중계할 때마다 다음 라우터 주소로 바꾸어 쓴다.
이더넷
이더넷은 다수의 컴퓨터가 여러 상대와 자유롭게 적은 비용으로 통신하기 위해 고안된 기술이다.
네트워크의 실체는 케이블이라고 할 수 있으며 컴퓨터가 신호를 보내면 케이블을 통해 네트워크 전체에 신호가 흐르고 전원에게 신호가 도착한다.
수신처 주소에 해당하는 기기는 패킷을 수신하고 다른 기기는 패킷을 폐기한다.
현재의 이더넷은 스위칭 허브를 사용하여 수신처 MAC 주소의 기기에만 신호가 흐르고, 다른 곳에는 신호가 흐르지 않게 되었다.
송신
LAN 어댑터는 제조될 때 ROM에 전 세계에서 중복되지 않도록 일원화되어 관리되는 MAC 주소가 기록되어 있다.
LAN 드라이버가 LAN 어댑터의 MAC 회로에 이 MAC 주소를 설정한다.
LAN 드라이버가 IP 담당 부분에서 패킷을 받아 MAC 회로에 명령을 보내면 MAC 회로의 작업이 시작된다.
MAC 회로는 프리앰블과 스타트 프레임 딜리미터라는 두 개의 데이터를 패킷의 앞에 붙이고, 프레임 체크 시퀀스(FCS)라는 오류 검출용 데이터를 패킷의 맨끝에 붙인다.
이렇게 패킷이 완성되면 허브를 향해 패킷을 송신한다.
LAN 어댑터는 디지털 데이터를 전기나 빛의 신호로 변환하여 네트워크의 케이블에 송출하는데, 이것이 송수신 동작의 본질이라고 할 수 있다.
이때 디지털 데이터를 신호로 변환하는 속도가 전송 속도이다.
이더넷도 IP와 마찬가지로 패킷이 잘 도착했는지, 패킷의 내용물이 무엇인지는 보지 않는다.
수신
수신은 송신과 반대로 PHY(MAU) 회로에서 MAC 회로쪽으로 진행된다.
PHY(MAU) 회로에서 신호를 공통 형식으로 변환하여 MAC 회로에 보내고, MAC 회로에서 신호를 맨 앞부터 차례대로 디지털 데이터로 변환하여 버퍼 메모리에 저장한다.
FCS에 문제가 없으면 MAC 헤더의 수신처 MAC 주소를 조사하여 LAN 어댑터를 초기화할 때 설정한 자체 MAC 주소와 비교한 후 이것이 자신에게 오는 것인지 판단한다.
다른 곳에 갈 패킷은 수신할 필요가 없으므로 폐기하고, 수신처 MAC 주소가 자신인 경우에만 패킷을 받아 버퍼 메모리에 저장한다.
이렇게 MAC 회로가 할 일이 끝나면 패킷을 수신한 사실을 IP 담당 부분을 거쳐 TCP 담당 부분으로 넘긴다.