프로토콜 스택과 LAN 어댑터를 통해 디지털 데이터가 전기 신호로 만들어지기까지

김성혁·2023년 1월 21일
0

ICMP

💡 패킷을 운반할 때 발생하는 오류를 통지하거나 제어용 메시지를 통지합니다.

ARP

💡 IP 주소에 대응하는 이더넷의 MAC 주소를 조사할 때 사용합니다.

LAN 드라이버

💡 LAN 어댑터의 하드웨어를 제어하며, LAN 어댑터가 실제 송/수신 동작, 즉 케이블에 대해 신호를 송/수신하는 동작을 실행합니다.

소켓은 통신 동작을 제어하기 위한 여러 가지 제어 정보가 기록되어 있습니다. 그 예로는, 통신 상대의 IP 주소, 포트 번호, 통신 동작의 진행 상태, 데이터 송신 후 경과 시간 등

MAC OS의 경우 터미널에 명령어 lsof를 통해 소켓의 내용을 확인할 수 있습니다.

접속 동작의 첫 번째 동작(Connect)

: 통신 상대와의 사이에 제어 정보를 주고받아 소켓에 필요한 정보를 기록하고 데이터 송/수신이 가능한 상태로 만드는 것

패킷의 맨 앞 부분에 헤더, 즉 제어 정보를 추가합니다.

3 Way HandShake

connect 동작을 3 way handshake로 설명할 수 있습니다.

프로토콜 스택이 받은 데이터는 바로 송신되는 것이 아닌 송신용 버퍼 메모리 영역에 우선 저장합니다. 프로토콜 스택에 건네주는 데이터의 길이는 애플리케이션의 종류나 만드는 방법에 따라 다르기 때문에 이를 우선 버퍼 메모리에 저장한 후 송신 동작을 수행합니다. (프로토콜 스택에 전해지는 데이터를 곧바로 송신한다면 네트워크 이용 효율이 떨어지기 때문에 그렇게 수행하지 않습니다.)

송신 동작을 지정할 때의 판단 기준

MTU

  • 한 패킷으로 운반할 수 있는 디지털 데이터의 최대 길이

MSS

  • 헤더를 제외하고 한 개의 패킷으로 운반할 수 있는 TCP의 데이터의 최대 길이

MSS의 길이를 가지고 데이터 전송 여부를 판단하기도 하지만 애플리케이션의 송신 속도가 느려지는 경우 MSS에 가깝게 데이터가 저장되면 송신하기도 합니다.

시퀀스 번호

  • 데이터 조각을 송신할 때 조각이 통신 개시부터 따져서 몇 번째 바이트인지

수신측에서는 시퀀스 번호를 통해 패킷의 누락 여부를 확인할 수 있습니다. 누락이 없다는 것을 확인했다면 수신측은 그 이전에 수신한 데이터와 합쳐서 데이터를 몇 번째 바이트까지 수신한 것인지 계산하고, 그 값을 TCP 헤더의 ACK 번호에 기록하여 송신측에 알려줍니다. (수신 확인 응답)

💡 제어 비트로써의 ACK 비트와 SYN 비트의 역할은 각각 ACK 번호 필드가 유효하다, 시퀀스 번호의 초기값을 통지한다를 알리는 것입니다.

초기 3 단계는 3 way handshake 과정입니다. 클라이언트에서 시퀀스 번호의 초기값을 서버로 보내고, 서버는 초기값으로부터 ACK 번호를 산출하여 클라이언트에게 반송하는데 이때 클라이언트에 보내는 데이터에 관한 시퀀스 번호의 초기값을 함께 통지합니다. 그러면 클라이언트에서도 서버로부터 받은 시퀀스 번호로부터 ACK 번호를 산출하여 서버에 반송합니다.

💡 ACK가 돌아오는 시간인 타임아웃 값을 통해 패킷의 재전송 여부를 결정합니다.

윈도우 제어 방식

💡 한 패킷을 보내고 ACK 번호를 기다리는 타임아웃 시간 동안의 시간 낭비를 막기 위해 ACK 번호를 기다리지 않고 연속해서 복수의 패킷을 보내는 방법
  • 수신 버퍼가 존재하여 애플리케이션에 건네주는 속도보다 빠른 속도로 패킷이 도착하여 패킷 오버플로우가 되지 않는 방식으로 수신 버퍼의 크기를 설정해야 합니다. → 수신 버퍼의 크기를 송신측에 통지하여 데이터 송신 속도를 조절
  • 수신 가능한 데이터 양의 최대값을 윈도우 사이즈라고 부릅니다.
  • 윈도우 통지 타이밍은 애플리케이션측에 데이터를 건네주고 수신 버퍼의 빈 영역이 늘어났을 때 이를 통지합니다.

연결 끊기 과정


IP와 이더넷의 패킷 송/수신 동작

허브

  • 이더넷의 규칙에 따라 패킷을 운반
  • MAC 헤더를 수신처 판단 구조로 사용합니다.

라우터

  • IP의 규칙에 따라 패킷을 운반
  • IP 헤더를 통해

💡 이더넷은 IP의 신뢰 받아 패킷을 운반할 수 있는 무선 LAN, ADSL, FTTH 등으로 대체될 수 있습니다.

이더넷과 같은 거대한 네트워크를 이동하기 위해서는 MAC 헤더를 통해 다음 수신지를 정하고 해당 수신지에 도착하면 새로운 MAC 헤더를 통해 다음 수신지를 정하는 것을 반복합니다.

IP 헤더

  • IP 프로토콜에 규정된 규칙에 따라 IP 주소로 표시된 목적지까지 패킷을 전달할 때 사용하는 제어 정보를 기록한 것

MAC 헤더

  • 이더넷 등의 LAN을 사용하여 가장 가까운 라우터까지 패킷을 운반할 때 사용하는 제어 정보를 기록한 것

LAN 어댑터에 패킷을 전해줄 때의 모습은 0과 1로 이루어진 이진 디지털 데이터이고, 이것이 LAN 어댑터에 의해 전기나 빛의 신호 상태로 바뀌어 케이블에 송출됩니다.

IP 헤더

라우팅 테이블을 확인하여 다음 라우터를 결정합니다.

MAC OS에서는 netstat -nr 명령을 통해 라우팅 테이블을 확인할 수 있습니다.

  • Network Destination : 수신처의 IP 주소
  • Interface : LAN 어댑터 등의 네트워크 인터페이스 주소
  • Gateway : 다음 라우터의 IP 주소
  • 넷마스크가 0.0.0.0인 경우 라우팅 테이블에 일치하는 주소가 없을 경우 해당 행이 해당하는 것으로 간주합니다.

수신처 라우터의 MAC 주소는 ARP를 통해 조사합니다. 이더넷에는 연결되어 있는 전원에게 패킷을 전달하는 브로드캐스트라는 구조가 있으며, 브로드캐스트를 활용하여 수신처 라우터의 MAC 주소를 알아냅니다. ARP에도 캐시가 존재하여 한 번 조사한 값은 캐시를 통해 조회해서 사용합니다.

IP 담당 부분에서 MAC 헤더 제조의 역할까지 수행한 후 LAN 어댑터로 데이터를 전송합니다. (이는 IP 이외의 다양한 패킷에도 LAN 어댑터가 대응할 수 있도록 하기 위함 입니다)

이더넷 패킷의 송/수신 동작

이더넷 패킷의 송/수신 동작은 LAN 어댑터에 의해 실행되는데, LAN 어댑터는 LAN 드라이버에 의해 제어됩니다.

이더넷

  • 다수의 컴퓨터가 여러 상대와 자유롭게 적은 비용으로 통신하기 위해 고안된 통신 기술

이더넷의 성질

  • MAC 헤더의 수신처 MAC 주소에 기억된 상대에게 패킷을 전달하고,
  • 송신처 MAC 주소로 송신처를 나타낸 후
  • 이더 타입으로 패킷의 내용물을 나타낸다

LAN 어댑터의 구조

디지털 데이터를 전기나 빛 신호로 변환하여 네트워크의 케이블에 송출

LAN 어댑터의 초기화 (MAC 회로에 MAC 주소를 설정이 가장 중요한 동작)

프리앰블

  • 송신하는 패킷을 읽을 때의 타이밍을 잡기 위한 것
  • 수신측에서 신호 수신시 이 파형에서 타이밍을 판단

스타트 프레임 딜리미터

  • 스타트 프레임 딜리미터는 끝이 11이라는 비트 패턴 → 갑자기 파형이 변하는 구간
  • 이것을 패킷의 개시 위치로 간주함

FCS

  • 패킷을 운반하는 도중에 잡음 등의 영향으로 파형이 흐트러져 데이터가 변한 경우 이것을 검출하기 위해 사용합니다. (오류 검출용 데이터)

LAN 어댑터의 디지털 신호 → 전기 신호 변환 과정의 자세한 내용은 생략하도록 하겠습니다.

💡 LAN 어댑터의 MAC 회로가 공통 형식의 신호를 만들고 PHY(MAU) 회로가 케이블에 송출하는 형식으로 변환하여 케이블에 송신합니다.

이더넷 통신 방식은 송신 신호가 상대에게 완전히 도착했는지 확인하지 않습니다. 오류가 발생한다면 이는 TCP가 검출합니다.

LAN 어댑터의 패킷 수신 시 컴퓨터는 다른 할 일을 하고 있기 때문에 이를 알리기 위해 확장 버스 슬롯 부분에 있는 인터럽트용 신호선에 신호를 보냅니다.

서버에서 응답으로 오는 패킷

LAN 드라이버는 패킷의 프로토콜 타입을 검사하여 해당 프로토콜 스택에 패킷을 전달합니다. TCP/IP의 경우 0800

  • 수신처 IP 주소가 자신의 주소와 다르면 ICMP라는 메시지를 통해 통신 상대에게 오류를 통지합니다.
  • IP 프로토콜은 LAN 회선을 통해 운반된 패킷을
    • 플래그를 통해 조각난 패킷인지를 판별하고
    • 조각난 패킷이라면 메모리에 일시적으로 보관
    • IP 헤더에 있는 ID 정보를 통해 하나의 패킷인지를 검사하고 조각 모음
    • 프래그먼트 오프셋을 통해 패킷이 원래 패킷의 어느 위치에 있었는지를 판별
    • 분할된 패킷을 원래의 패킷으로 되돌리는 리어셈블링 과정을 거칩니다
  • TCP 헤더를 통해 해당하는 소켓을 찾습니다.

UDP : 수정 송신이 필요없는 데이터의 송신(효율을 위해 설계된)

  • 수신 확인이나 윈도우가 없어서 데이터 송/수신 전에 제어 정보를 주고 받을 필요가 없고, 접속이나 연결 끊기의 단계가 없습니다.
  • 오류 발생이나 패킷 손실에 대해서 감지하지 않습니다.
  • 음성이나 영상과 같이 신뢰성보다는 빠른 전송이 요구되는 애플리케이션에서 사용합니다.

0개의 댓글