네트워크

프로토콜(규약)

프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.

역사

  • 네트워크 전쟁 중 정보 교환을 위해 미국에서 ARPAnet 을 만들었다. IMP(Interface Message Processor)에 host와 전화선을 연결, 아파넷은 NCP(Network Control Program)라는 전송 통신규약(프로토콜)을 사용하였으나, 1983년 TCP/IP가 이를 대체하며 지금의 인터넷으로 진화하게 되었다.

OSI 7계층, TCP/IP 5계층

OSI 7계층 TCP/IP 5계층
애플리케이션 계층  
프레젠테이션 계층 애플리케이션 계층
세션 계층  
트랜스포트 계층 트랜스포트 계층
네트워크 계층 네트워크 계층
데이터 링크 계층 데이터 링크 계층
피지컬 계층 피지컬 계층

네트워크 토폴로지

토폴로지 : 네트워크의 다양한 형태

  • 버스 토폴로지
  • 스타 토폴로지
  • 링 토폴로지
  • 트리 토폴로지
  • 메쉬 토폴로지

네트워크 통신 방식

  • 유니캐스트
  • 브로드캐스트
  • 멀티캐스트
  • 애니캐스트

단방향, 반이중, 전이중 통신

  • 단방향 : TV, 라디오 등 한 방향으로만 송수신 가능
  • 반이중 : 무전기 등 송신 중 수신 불가, 수신 중 송신 불가
  • 전이중 : 전화 등 동시 송수신 가능

물리 계층과 데이터 링크 계층(L1, L2)

물리계층과 데이터 링크 계층

물리계층 물리신호 : 전기 신호 & 전자기파

  • 전기
  • 전자기파

디지털 기계가 이해하려면 물리신호를 디지털 신호로 바꿔줘야한다. 물리 계층에서는 물리신호(아날로그 신호)를 디지털 신호로, 디지털 신호를 물리신호로 바꾼다.

데이터 링크 계층
데이터 링크 계층에서는 MAC 주소로 기기를 구분한다.

케이블

두 대 이상 컴퓨터가 통신하려면 둘을 연결해주는 케이블이나 전파 신호가 필요하다. 케이블 종류는 UTP, 동축, 광케이블이 있다.

  1. UTP 케이블(Unshielded Twisted Pairs)
    랜선이라고 부른다. 수신, 송신을 위한 구리선이 각각 2쌍이 있어 전이중 통신 가능하다.
  2. 동축 자기장 간섭이 적어 더 멀리 보낼 수 있다. 선이 1개여서 반이중 통신을 한다. 요즘 인터넷 연결에는 안쓰고 TV나 안테나 선으로 이용한다.
  3. 광케이블 유리, 플라스틱으로 만든다. 빛을 이용해 간섭이 적고 더 빨리, 더 많이 전송가능하다. 하지만 충격에 약하고 트랜시버가 필요하다.

이더넷

이더넷은 컴퓨터 네트워크 기술의 하나로, 일반적으로 LAN, MAN, WAN에서 가장 많이 활용되는 기술 규격이다. ‘이더넷’이라는 명칭(이름)은 빛의 매질로 여겨졌던 에테르(ether)에서 유래되었다. 이더넷은 OSI 모델의 물리 계층에서 신호와 배선, 데이터 링크 계층에서 MAC 패킷과 프로토콜의 형식을 정의한다.

이더넷은 네트워크에 연결된 각 기기들이 48비트 길이의 고유의 MAC 주소를 가지고 이 주소를 이용해 상호간에 데이터를 주고 받을 수 있도록 만들어졌다. 전송 매체로는 BNC 케이블 또는 UTPSTP 케이블을 사용하며, 각 기기를 상호 연결시키는 데에는 허브네트워크 스위치리피터 등의 장치를 이용한다.

랜카드(NIC: Network Interface Card)

데이터 링크 계층에서 이용한다. 물리 계층 기능도 수행한다. 아날로그 신호를 디지털 신호로 바꿔주고 MAC 주소를 가지고 있어, 신호를 받았을 때 자신에게 온 신호인지 구분한다. 유선랜카드는 전기 <-> 디지털, 무선랜카드는 전파 <-> 디지털 변환을 한다.

허브

여러 단말을 연결하고 연결된 단말들에게 신호를 전달한다. 허브 없이 단말들 끼리 직접 연결을 하려면 하나의 단말(컴퓨터라고 생각해보자)에 여러 랜카드가 필요해지게 된다. 도착한 신호를 바로 전달해주는 역할만 하기 때문에 신호끼리 충돌이 생길 수 있다. 허브로 연결되어 충돌이 발생할 가능성이 있는 영역을 콜리전 도메인이라고 한다. 충돌을 피하기 위해 CSMA/CD(carrier sence multi access / collision detection)기술을 이용해 반이중 통신을 한다. -> 반이중 통신을 하기 때문에 허브에 연결된 단말이 많아질 수록 엄청 느려진다.
![[hub-to-switch.png]]

CSMA/CD(carrier sence multi access / collision detection)

반송파 감지 다중 접속 및 충돌 탐지 기술. 어떤 컴퓨터가 이더넷 네트워크를 사용하는 경우 다음과 같은 과정을 거친다.

  • 네트워크를 사용하려는 컴퓨터는 먼저 현재 네트워크 위에 흐르고 있는 데이터가 있는지를 감지한다.
  • 만약 현재 다른 데이터가 전송 중이면 사용할 수 있을 때까지 기다리고 아니면 전송을 시작한다.
  • 여러 군데에서 동시에 전송을 시작해 충돌이 발생하면 최소 패킷 시간 동안 전송을 계속해, 다른 컴퓨터가 충돌을 탐지할 수 있도록 한다.
  • 그 뒤, 임의 시간 동안 기다린 뒤에 다시 신호(반송파)를 감지하고, 네트워크 사용자가 없으면 전송을 다시 시작한다.
  • 전송을 마치면, 상위 계층에 전송이 끝났음을 알리고 끝마친다.
  • 여러 번 다시 시도했음에도 전송에 실패하면 이를 상위 계층에 알리고 끝마친다.
    => 요즘은 스위치 방식의 네트워크를 구성해서, 충돌이 일어나지 않음

브릿지

신호가 동시에 들어오면 기억했다가 차례로 보내주면 좋겠어 => 허브 + 메모리, CPU
프로세서와 메모리가 있으면 허브처럼 모든 연결 포트로 브로트캐스팅 안해도 된다. 목적지 MAC 주소를 기억해두었다가 신호가 들어오면 목적지에만 신호를 보내주면 된다.

스위치

브릿지보다 좋은 성능을 가진다.

  • LEARNING : 처음 보는 MAC 주소와 PORT를 등록
  • FLOODING : MAC 주소가 등록되어 있지 않아 모든 포트에 신호를 보냄
  • FILTERING : 등록된 MAC 주소로만 신호 보냄
  • AGING : 일정 기간이 지나면 메모리에서 MAC, PORT 삭제(보통 5분)

스패닝 패스 프로토콜 : 스위치끼리 사이클 없이 연결하는 구조, 보통 최소 스패닝 트리 구해서 논리적으로 연결한다.

스위치의 한계 : 스위치도 MAC 주소 모를 때 FLOODING으로 전체 신호를 보낸다. 스위치를 이용하는 경우도 대량의 브로드캐스팅이나 스위치의 처리용량을 초과하는 데이터 흐름에 대해서는 취약할 수밖에 없으므로 커다란 네트워크의 경우는 VLAN 스위치나 라우터 등을 사용한다.

네트워크 계층(L3)

IP

2계층에서는 물리 주소인 MAC 주소를 이용, 3계층에서는 논리 주소인 IP를 이용한다. IP는 네트워크 주소와 호스트 주소 두 부분으로 나눌 수 있다. IP주소를 관리하는 방법으로 4개의 클래스가 있었다.

앞 부분이 네트워크 주소, 밑줄 친 부분이 호스트 주소를 나타낸다. x.x.x.x/(네트워크 주소 비트 수)로 나타내기도 한다.
클래스 A) 00000000.00000000.00000000.00000000 -> x.x.x.x/8
클래스 B) 10000000.00000000.00000000.00000000 -> x.x.x.x/16
클래스 C) 11000000.00000000.00000000.00000000 -> x.x.x.x/24
클래스 D) 11100000.00000000.00000000.00000000 -> x.x.x.x/36

IP 주소는 총 약 43억개가 나올 수 있으나, 클래스로 관리하는 경우 실제 활용가능한 IP 주소가 현저하게 줄어든다. 또한 네트워크 주소 별로 그룹에 할당을 해주는데, 너무 크게 할당된 경우 호스트 주소가 낭비되는 일도 빈번했다.

서브넷 마스크
IP 주소를 더 효율적으로 관리하기 위해 서브넷 마스크가 나왔고, 8, 16, 24, 36 비트로만 나누어서 네트워크 주소를 할당하던 것을, 1비트 단위로 관리하기 시작했다. x.x.x.x/23 이런 것이 가능해졌다.

NAT 그리고 외부와 통신하는 곳에만 진짜 IP를 할당하고, 내부에서만 쓰는 것은 가상 IP로 해결하자는 전략이 나왔는데 NAT에 대해서는 뒤에서 다시 살펴보자.

IPv6 IP 주소가 부족한 것에 대한 마지막 차세대 대응책으로 나온 것이 IPv6 주소 체계이다. (현재 쓰는 것은 IPv4)

IP 헤더(패킷)

라우터

라우터는 컴퓨터 네트워크 간에 데이터 패킷을 전송하는 네트워크 장치이다. 패킷의 위치(IP를 통해?) 를 추출하여, 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 데이터 패킷을 다음 장치로 전달한다. 최적의 경로는 라우팅 프로토콜을 이용한다.

라우팅 프로토콜

라우터는 하나의 컴퓨터로 내부에 라우팅 테이블을 가지고 있다. 네트워크 -> 네트워크 이동할 때 어떤 인터페이스(포트)로 이동할지 적힌 표이다.
static : 사람이 직접 지정
- 10.0.0.0/8 via 20.0.0.1 이런식으로 지정
- 장점 : CPU 처리 부담 적음, 메모리 사용 적음, 네트워크 대역폭 절약, 보안에 좋음
- 단점 : 특정 라우터가 고장나면 통신이 안된다. 대규모 네트워크에 설정 불가(에 가깝다)

dynamic : 라우터끼리 정보를 주고 받아서 업데이트
하나의 큰 조직이 많은 라우터를 연결해 만든 네트워크를 autonomous system(AS)라고 하는데, AS 안에서 라우팅하는 방법을 Interior Routing Protocol(RIP, OSPF), 밖으로 라우팅하는 방법을 Exterior Routing Protocol(BGP) 이라고 한다.
1) RIP - 목적지 까지 거리와 가기 위한 인접 라우터 정보를 30 초마다 인접 라우터와 공유한다.
- 간단하지만 neighbor 끼리만 정보 공유하기 때문에 모두 공유되기 까지 오래걸리고 소규모 네트워크에만 적용가능하다.
2) OSPF(open shortest path first)
- 모든 라우터가 자신의 정보(연결된 라우터, 비용)을 서로 다른 모든 라우터에게 전달한다. 최단 거리 계싼은 다익스트라 알고리즘을 이용한다.
- 모두 공유되는데 시간이 적게 걸리고 네트워크 낭비 적지만, CPU, 메모리 사용량 높고 복잡하다.
3) BGP

ICMP(Internet Control Message Protocol)

네트워크에서 해당 목적지까지 데이터가 도달할 수 있는지, 없다면 그 원인이 무엇인지 알아내기 위한 프로토콜

ARP(Address Resolution Protocol)

IP 주소로 MAC 주소를 알아내는 프로토콜
목적지의 MAC 주소를 모르면 목적지 맥주소에 FF:FF… 를 적는다. 그럼 스위치가 연결된 모든 포트에 브로드 캐스팅해주고, 목적지 맥주소 혹은 목적지 까지 보내줄 수 있는 인접한 라우터의 맥주소를 반환해준다. 한 번 브로드 캐스팅해서 얻은 정보는 PC에 IP와 MAC 주소를 저장(캐시한다)하여 다음 번 요청때는 ARP가 일어나지 않는다.

NAT & PAT

NAT : network address translation
PAT : Port address translation
1) static NAT
- 관리자가 직접 Private IP에 Public IP를 매핑한다.
- 라우터에서 변환된다.
- 1:1 매핑으로 IP 절약을 위해 사용되지는 않고, 보안용으로 사용한다.
2) dynamic NAT
- 관리자가 여러개 Public IP 준비해두고 요청한 호스트에게 여분의 Public IP를 빌려준다.
- 단말이 Public IP를 반납할 때까지 다른 단말에게 빌려줄 수 없어서 효율성이 떨어진다.
3) static PAT
- 트랜스포트 계층의 포트까지 이용해서 IP를 빌려준다.
4) dynamic PAT
- 포트 자동 할당하여 IP를 빌려준다
=> 단방향 통신만 가능하다. 다른 기계가 나에게 데이터를 보내려면 PAT table에 내 정보가 없어서 취소된다. 포트 포워딩을 이용해야한다.

트랜스포트 계층(L4)

트랜스포트 계층은 호스트로 도착한 데이터(패킷)를 목적지 애플리케이션으로 정확히 전달하는 역할을 한다. 애플리케이션(프로세스)은 포트 번호로 구분한다.

TCP(transport control protocol)

TCP (전송 제어 프로토콜)은 두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜이다. TCP는 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장해준다. Vint CERF와 Bob Kahn (당시 DARPA 과학자)는 TCP를 1970년 대에 설계하였다.

TCP의 역할은 에러가 없이 패킷이 신뢰할 수 있게 전달 되었는지 보증해 주는 것이다. TCP는 동시제어가 가능하다. 이는 초기 요청이 작게 시작해도 컴퓨터들과 서버들의 대역폭의 깊이가 증가해도 네트워크가 지원할 수 있다는 것을 뜻한다.

TCP는 안전한 통신을 시작하기 위해 3 way handshake과정을 거친다.

  1. 가장 먼저 3way handshake를 위해 클라이언트에서 서버쪽으로 SYN패킷을 보냅니다.(4-3-2-1)
  2. 그리고 서버에서 클라이언트로 SYN/ACK 패킷을 보냅니다.(4-3-2-1)
  3. 마지막으로 클라이언트에서 서버로 ACK 패킷을 보내 3way handshake를 끝냅니다.(4-3-2-1)
  4. image

끊을 때는 4 way handshake
<- FIN -> ACK -> FIN <- 끝

TCP 헤더

TCP 흐름제어

  • 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
  • Flow Control은 receiver가 packet을 지나치게 많이 받지 않도록 조절하는 것
  • 기본 개념은 receiver가 sender에게 현재 자신의 상태를 feedback 한다는 점

TCP 혼잡제어

  • 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
    윈도우 크기가 클 수록 통신 속도 빨라지겠지만, 수신 쪽 네트워크 혼잡하면 큰 데이터를 받는데 무리일 수 있다.
    먼저 윈도우 사이즈 N 만큼 보내보고, 잘 받으면 늘려가고, 수신쪽에서 많다고 신호주면 절반으로 줄여가는 식으로 윈도우 사이즈를 결정한다.

    TCP 흐름제어/혼잡제어 참고

UDP(User Datagram Protocol)

트랜스포트 계층에서 사용한다. 신뢰성을 보장하지 않아 단순하고 빠르다. 신뢰성을 보장하고 싶다면 프로그래머가 직접 구현하면 된다. 실시간 전달이 중요한 화상 채팅, 음성, 게임 등에 주로 사용된다.

애플리케이션 계층(L5)

DHCP(Dynamic Host Configuration Protocol)

DNS

Telnet and SSH

FTP(File Transfer Protocol)

SMTP, POP, EFS

HTTP(Hypertext Transfer Protocol)

Proxy Server