ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 제대로 알아보자 - 두번째 이야기
    CS(Computer Science)/Network 2023. 10. 30. 21:03

     

    들어가기 전에

    지난 번 `첫 번째 이야기` 포스팅에 이어 Chapter 2 내용을 정리해보려고 한다.

     

     

    Chapter 2. TCP/IP의 데이터를 전기 신호로 만들어 보낸다_프로토콜 스택과 LAN 어댑터의 탐험

     

    TCP/IP 계층구조

     

    • 브라우저나 메일 등의 일반적인 애플리케이션이 데이터를 송·수신할 경우에는 TCP
    • DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송·수신할 경우에는 UDP

     

    인터넷에서 데이터를 운반할 때는 데이터를 작게 나누어 `패킷`이라는 형태로 운반한다.

    `패킷`은 분할된 데이터의 덩어리이고, 네트워크에서 데이터는 수십 바이트에서 수천 바이트 정도의 작은 덩어리로 분할되어 운반된다.

     

    `IP` 안에는 ICMP와 ARP라는 프로토콜을 다루는 부분이 포함되어 있다.

     

    `ICMP`는 패킷을 운반할 때 발생하는 오류를 통지하거나 제어용 메시지를 통지할 때 사용한다.

     

    `ARP`는 IP주소에 대응하는 이더넷의 MAC 주소를 조사할 때 사용한다.

     

    `LAN 드라이버`는 LAN 어댑터의 하드웨어를 제어한다.

     

    `LAN 어댑터`가 실제 송·수신 동작. 즉, 케이블에 대해 신호를 송·수신하는 동작을 수행한다.

     

    TCP 헤더의 포맷

     

    TCP 헤더의 송신처와 수신처의 포트번호로 접속하는 소켓을 지정하고 컨트롤 비트인 SYN 비트를 1로 만든다.

    이렇게 해서 송신 동작 후 응답을 돌려보낼 때 ACK 라는 컨트롤 비트를 1로 만든다.

     

    네트워크에는 오류가 있을 수 있으므로 패킷이 없어지는 경우에는 패킷이 도착한 것을 확인하면서 동작을 진행하는데, 이것을 확인하기 위해 ACK 를 1로 만든다.

     

    MTU와 MSS

     

    • MTU는 패킷 한개로 운반할 수 있는 디지털 데이터의 최대 길이, 이더넷에서는 1,500바이트
    • MSS는 헤더를 제외하고 한 개의 패킷으로 운반할 수 있는 TCP의 데이터 최대길이

     

    애플리케이션의 송신속도가 느려지는 경우 송신 동작이 지연되므로 버퍼에 데이터가 모이지 않아도 송신 동작을 수행해야 한다.

    따라서, 프로토콜 스택은 내부에 타이머가 있어서 이것으로 일정시간 이상 경과하면 패킷을 송신한다.

     

    데이터 분할

     

    데이터가 클 때는 애플리케이션의 데이터를 분할해서 보낸다.

     

    시퀀스 번호와 ACK 번호의 사용

     

    수신측에서 패킷이 누락 되었는지 확인할 수 있다.

    예를 들어, 1,460번째 바이트까지 수신 완료한 상태에서 시퀀스 번호가 1,461인 패킷이 도착하면 누락이 없다는 것을 알 수 있고 시퀀스 번호가 2921인 패킷이 도착하면 누락된 것을 알 수 있다.

     

    몇 번째 바이트까지 수신한 것인지를 TCP 헤더의 ACK 번호에 기록하고 이 ACK 번호를 되돌려주는 동작을 수신 확인 응답이라고 부른다.

     

    패킷을 보내고 ACK 번호가 돌아올 때 까지 아무일도 하지 않고 기다리는 것은 시간 낭비이다. 이러한 낭비를 줄이기 위해 TCP는 윈도우 제어방식을 이용해 낭비를 줄인다.

     

    핑퐁방식과 윈도우 제어 방식

     

    윈도우 제어방식은 낭비를 어떻게 없앨 수 있을까?

    • 수신측의 능력을 초과한다면 오류가 발생한다.
    • 수신 가능한 데이터 양을 통지하고 초과하지 않도록 송신 동작을 실행하는 것이 윈도우 제어 방식의 개념이다.

     

    윈도우 제어와 수신용 메모리

     

    수신 버퍼에 빈 부분이 생길 때 TCP 헤더의 윈도우 필드에서 송신측에 알린다. 또한, 수신 가능한 데이터 양의 최대값을 윈도우 사이즈라고 부른다.

     

    IP 헤더 포맷

     

    IP 헤더를 만든 후 그 앞에 MAC 헤더를 붙인다. MAC 헤더는 이더넷에서 사용하는 헤더이다.

     

    경로표 예시

     

    MAC 헤더 항목

     

    MAC 주소를 조사할 때 ARP를 사용한다.

     

    ARP로 MAC 주소를 조사

     

    패킷을 보낼 때마다 이 동작을 하면 ARP의 패킷이 불어나기 때문에 한번 조사한 결과는 ARP 캐시라는 메모리 영역에 보존하여 다시 이용한다. ARP 캐시를 사용해서 ARP 패킷을 줄일 수 있지만 주소가 고쳐진 경우 사용하면 안된다. 이것을 막기위해 OS 종류에 따라 해당 시간이 다르지만 보통 몇분 후 삭제된다.

     

    ARP 캐시 내용

     

    MAC 주소

     

    LAN 어댑터 내부 구조

     

    • LAN 어댑터의 ROM에는 전세계에서 중복되지 않도록 일원화되어 관리되는 MAC 주소가 제조할 때 기록되어 있다.
    • LAN 어댑터에 기록된 MAC 주소는 LAN 드라이버가 MAC 회로에 설정한다.

     

    LAN 어댑터에서 송출하는 패킷

     

    MAC 회로는 먼저 송신 패킷을 버퍼 메모리에서 추출하고 맨앞에는 프리앰블과 스타트 프레임 딜리미터라는 두개의 데이터를, 맨 끝에는 프레임 체크 시퀀스라는 오류 검출용 데이터를 추가한다.

    • 프리앰블: 패킷을 읽을 때 타이밍을 잡는 것
    • 스타트 프레임 딜리미터: 패킷의 개시 위치 판단

     

    패킷이 완성된 후 허브를 향해 패킷을 송신하는 동작은 `리피터 허브`를 사용했을 때 반이중 모드와 `스위칭 허브`를 사용한 전이중 모드 두가지가 있다.

     

    반이중 모드의 동작은 먼저 케이블에 다른 기기가 송신한 신호가 흐르고 있는지 조사하고 신호가 흐르고 있다면 끝날 때까지 기다린다.

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

    이더넷이 혼잡해지면 충돌 현상이 발생하고 이 사실을 알리기 위해 `재밍신호(잼신호)`라는 특수한 신호를 흘리고 나서 송신 동작을 멈추고 잠시 기다렸다가 다시 한번 송신 동작을 시도한다.

     

    전이중 모드는 송신과 수신을 동시에 실행 하면서 충돌이 발생하지 않는다. 반이중 모드일 때와 같은 번거로운 일은 생각할 필요 없다.

     

    LAN 어댑터가 패킷 송·수신 동작을 실행하고 있는 사이에 컴퓨터 본체는 LAN 어댑터 움직임을 감시하지 않고 다른 작업을 실행하고 있다. 그러므로 LAN 어댑터 측에서 알려주지 않으면 컴퓨터 본체는 패킷의 도착을 알지 못한다. 이러한 상태일 때, 컴퓨터 본체가 실행하고 있는 작업에 끼어들어 LAN 어댑터 쪽에 주의시키는 것이 `인터럽트`이다.

     

    패킷이 도착하지 않는 것과 같은 오류가 발생했을 때 ICMP 메시지를 사용하여 통신 상대에게 오류를 통지한다.

     

    주요 ICMP 메시지

     

    제어용 짧은 데이터 또는 음성 및 동영상 데이터를 보낼 때 UDP를 사용한다.

     

    UDP 헤더에 기록하는 제어 정보

     

    TCP와 같이 수신 확인 응답에 의해 오류를 검출하여 다시 보내면 시간이 걸리므로 재생 타이밍이 맞지 않을 수 있다. 음성이나 영상에는 데이터가 다소 없어도 치명적인 문제가 되지 않는다는 성질이 있다.

    여기까지 Chapter 2를 마무리하고 다음 포스팅은 Chapter 3 로 이어진다.

     

Designed by Tistory.