두 번의 이직을 거쳐 다시 서비스 기획자로 돌아왔다.
이제 놓았던 공부를 다시 시작할 때가 왔다!
흥미를 잃지 않기 위해 산만하더라도 여러 주제를 TIL에 다 때려넣을 계획이다.
그러다 특정 주제의 내용이 모이면 따로 발행을 하려고 한다.
(이러다 파이썬 다 까먹겠는데...)
우선 하다가 필요한 거 생기면 거기로 넘어가자 😅
일단 오늘은 네트워크!
LAN (Local Area Network) | WAN (Wide Area Network) | |
---|---|---|
범위 | 좁은 지역 (예: 집, 사무실) | 넓은 지역 (예: 도시) |
속도 | 빠름 | 느림 |
접속 방식 | 유선 랜 (컴퓨터에 꽂는 그 선) 혹은 무선 랜 (공유기) | ISP (인터넷 서비스 공급자)의 모뎀, 라우터 |
OSI는 7계층, TCP/IP는 4계층으로 구성되어 있다.
각 계층을 배우기 전에... '그래서 이걸 왜 알아야 하나?' 하는 의문이 들었다.
정리해보면 다음과 같다.
이미지 출처: https://ming9mon.tistory.com/2
감을 잡기 위해 각 계층의 챕터 제목만 가져왔다.
계층 | 설명 | 관련 키워드 |
---|---|---|
물리 | 데이터를 전기 신호로 변환 | 랜 케이블, 리피터, 허브 |
데이터 링크 | 랜에서 데이터 전송 | 이더넷, MAC, 스위치 |
네트워크 | 목적지에 데이터 전달 | IP, 라우터, 서브넷 |
전송 | 신뢰할 수 있는 데이터 전송 | 연결/비연결형 통신, TCP, UDP |
응용 | 애플리케이션에 데이터 전송 | 웹 서버, DNS |
데이터 송신측과 수신측은 둘 다 위의 계층을 거쳐서 데이터를 보내고 받는다.
위 계층을 지나기 위해서는 각각 맞는 헤더를 붙이거나 (송신 측) 떼야 (수신 측) 한다. 이 과정을 캡슐화/역캡슐화 라고 부른다.
참고로 데이터 링크 계층에서는 데이터 앞에 붙는 헤더, 뒤에 붙는 트레일러 둘 다가 붙거나 떨어진다.
(하드웨어 제품 할 때 들어본 용어가 나온다 ㅎ... 반갑네 😇)
물리적 매체를 통해 디지털 신호를 광학/전기 신호로 변환하는 계층.
주요한 장비는 아래와 같다.
네트워크 장비 간에 신호를 주고받는 규칙을 정하는 계층. 대표적인 규칙이 랜에서 사용하는 이더넷.
(다른 사람들은 이 설명만 보고 이해를 할 수 있는건가?...)
비유를 하자면 편지 (데이터)를 우체국을 통해 보낼 때, 봉투의 역할을 하는 게 데이터 링크 계층이다.
랜 통신망에서 케이블을 통해 데이터를 주고 받는 규칙인 이더넷을 예시로 들어 설명하면 아래와 같다.
MAC 주소
1.1 MAC 주소란?
- 물리 계층에서 언급한 '랜 카드'는 제조 당시에 고유한 MAC 주소를 받는다.
1.2 그걸 왜 지금 다루나?
- 데이터 링크 계층에서 MAC 주소를 다루는 이유는 랜에서 데이터를 전송할 때 이 주소를 기준으로 전송하기 때문이다.
1.3 이더넷 헤더/트레일러
- 위의 캡슐화 과정을 보면 데이터 링크 계층에서 데이터의 앞뒤로 '링크 헤더'와 '링크 트레일러'가 붙는다. 이더넷 통신을 예로 들면 '이더넷 헤더'와 '트레일러'이다.
이 때 이더넷 헤더에 목적지의 MAC 주소, 출발지의 MAC 주소 정보가 붙는다. (여기에 추가로 IPv4...같은 프로토콜 번호도 붙는데 이건 몰라도 된대서 패스)
프레임
전에 '프레이밍'을 편지를 봉투에 넣는 과정으로 비유했다. 위의 이더넷 헤더와 트레일러를 추가하는 과정을 '프레이밍'이라고 할 수 있다. 이 둘이 추가된 데이터를 '프레임'이라고 부른다.
프레임의 전송
허브는 들어온 데이터를 모든 포트로 내보내지만, 포트를 구별해서 보낼 수는 없다. 이 때 프레임을 이용하면 원하는 곳으로만 보낼 수 있다.
(1) 전송자가 목적지 MAC 주소를 이용해서 데이터를 프레임으로 만든다. (캡슐화)
(2) 이 프레임이 물리 계층을 통해 전기 신호로 바뀐다.
(3) 허브는 모든 포트로 신호를 전송한다.
(4) 그 중 목적지가 아닌 컴퓨터는 자신의 MAC 주소로 온 게 아닌 프레임을 파기한다.
(5) 목적지인 컴퓨너는 반대로 전기 신호를 프레임으로, 프레임을 데이터로 만든다. (역캡슐화)
증권 1도 모르는 인간이 거래소에 들어온 🍯잼 실화
'호가'를 알고 난 뒤로 다른 용어를 익히기가 더 수월해졌다.
그래서 오늘은 호가와 관련 용어 시리즈!
스위치도 허브와 동일하게 여러 장비를 포트로 연결하는 장비이다. 요즘은 아래 장점 때문에 허브보다 스위치를 많이 쓴다.
허브 | 스위치 | |
---|---|---|
MAC 인식 | 포트별 MAC을 알 수 없어 들어온 데이터를 모든 포트로 전송한다. | 포트별 MAC 주소를 기록하는 'MAC 주소 테이블'을 가지고 있어 지정한 포트에만 데이터를 전송한다. |
통신 방식 | 반이중 통신 (회선 하나에서 송신/수신 번갈아) | 전이중 통신 (송신/수신 회선 따로) |
데이터 충돌 | 반이중 통신 때문에 동시에 데이터를 보내면 충돌 발생 | 전이중 통신 때문에 동시에 데이터를 보내도 충돌 없음 |
충돌 도메인 (데이터 충돌이 미치는 범위) | 허브에 연결된 모든 컴퓨터 | 충돌이 일어난 컴퓨터 |
라우터를 통해 서로 다른 네트워크 간의 통신을 하는 계층.
설명만 보면 데이터 계층과 네트워크 계층이 무슨 차이인지 감이 잘 안 온다.
둘을 비교하면 다음과 같다.
2단계 데이터 (링크) 계층 | 3단계 네트워크 계층 | |
---|---|---|
통신 대상 | 하나의 네트워크 안에서 네트워크 장비 간의 통신 | 여러 개의 네트워크 간의 통신 |
장비 | 허브, 스위치 | 라우터 |
주소 | MAC 주소 (어느 컴퓨터) | IP 주소 (어느 네트워크의 어느 컴퓨터) |
캡슐화 | 이더넷 헤더를 붙인 프레임 | IP 헤더를 붙인 IP 패킷 |
여기서 IP는 Internet Protocol의 약자로, 어느 네트워크의 어느 컴퓨터인지를 지정하는 주소이다.
데이터 계층에서 MAC 주소를 넣은 '이더넷 헤더'를 붙여 '프레임'을 만든 것처럼, 네트워크 계층에서도 IP 주소를 넣은 'IP 헤더'를 붙여 'IP 패킷'을 만든다.
IP 주소는 '공인 IP 주소'와 '사설 IP 주소'로 나뉜다.
공인 IP 주소는 인터넷 서비스 제공자 (ISP)가 인터넷에 직접 연결되는 라우터/컴퓨터에 할당하는 주소이고,
사설 IP 주소는 라우터에 연결된 랜 내부에서 랜 네트워크 관리자가 할당하는 주소이다. 라우터의 DHCP (Dynamic Host Configuration Protocol)를 이용해서 자동으로 할당하기도 한다.
워낙 컴퓨터가 많다보니 IP 주소가 모자라서 이렇게 한 것. 참고로 모자란 건 IPv4 기준이고, (32비트, 만들 수 있는 주소 43억 개) 그걸 보완하려고 IPv6를 만들었다. 이건 128비트라서 340조의 1조 배의 1조 배...라고 한다.
IP 주소는 왜 192.168.X.XX... 이렇게 생겼을까?
32비트의 IPv4 주소를 여덟 자리씩 끊어 총 네 개의 십진수로 표현해서 그렇다. 예를 들어 IP 주소가 1100000010101000.... 이런 모양이면 이걸 여덟 자리씩 끊는다. 11000000/10101000/... 이렇게 끊은 구간을 십진수로 변환해서 192.168.1.10 이런 식으로 표현하는 것.
네트워크 ID, 호스트 ID
IP 주소는 네트워크 ID와 호스트 ID 두 개로 구성이 된다. 위에서 IP 주소를 여덟 자리씩 끊어 총 네 개의 구간으로 나눈다고 했는데, 이 때 앞의 일부는 네트워크 ID, 나머지는 호스트 ID가 된다.
이 때 몇 개를 나누어 가지느냐에 따라 '클래스'가 정해진다. 네트워크 ID가 앞의 하나이면 A 클래스, 두 개이면 B 클래스, 세 개이면 C 클래스.
네트워크 주소, 브로드캐스트 주소
네트워크 주소는 일종의 대표 주소이고, 브로드캐스트 주소는 해당 대표 주소 하위에 있는 모든 호스트에게 전송하기 위한 주소이다.
네트워크 주소는 호스트 ID가 0이고, 브로드캐스트 주소는 호스트 ID가 255이다.
예를 들어 192.168.1.1, 192.168.1.2,... 주소를 가진 컴퓨터는 모두 192.168.1.0 이라는 네트워크 하위에 속한다. 그리고 만약 누군가 192.168.1.255 브로드캐스트 주소로 데이터를 보내면 192.168.1.0 하위에 있는 모든 컴퓨터에 데이터가 전송이 된다.
그래서 개별 컴퓨터는 자신의 호스트 ID를 0이나 255로 설정하지 않는다.
서브넷
서브넷은 네트워크를 더 작은 규모로 분할하는 것을 말한다. 무슨 소리이냐면...
C 클래스는 네트워크 ID가 24비트, 호스트 ID가 8비트이다. 즉 호스트를 총 2^8=256개를 설정할 수 있다는 뜻이다. 하지만 그 공간에 컴퓨터가 256개보다 적으면 그만큼 호스트 ID를 낭비하게 된다.
그래서 이 낭비를 막기 위해 호스트 ID에서 일부 비트를 빌려 네트워크 ID로 사용하고, 이렇게 빌려온 비트로 만든 네트워크를 '서브넷'이라고 한다.
위의 경우에서 호스트 ID에서 3비트를 빌리면 2^3=8개의 작은 서브넷을 구성할 수 있게 되고, 각 서브넷은 남은 5비트를 이용해 2^5=32개의 호스트를 가질 수 있다.
이런 식으로 사용자의 상황에 맞게 네트워크를 서브넷으로 만들어 효율적으로 IP 주소를 쓸 수 있다. (어떻게든 방법을 찾는 저 발상... 대단하다)
서브넷 마스크
다만 이렇게 분할하면 어디부터 어디까지가 네트워크 ID이고 호스트 ID인지 분간하기가 어려워진다. 그래서 이걸 알려주는 게 서브넷 마스크.
말 그대로 네트워크면 1, 호스트면 0으로 마스킹한다. 예를 들어 32비트 중 첫 25비트가 네트워크/뒤의 7비트가 호스트이면 →11111111.11111111.11111111.10000000
이렇게 표현하는 것이다. 이걸 십진수로 바꾸면255.255.255.128
.
라우터는 네트워크 간 통신을 가능하게 한다. 3단계 설명이 '라우터를 통해 서로 다른 네트워크 간의 통신을 하는 계층'이었던 만큼 가장 중요한 장비이다.
왜 라우터는 내부 IP와 외부 IP를 구분하나?
1) IPv4가 모자라서 주소를 아끼려고
2) 내부 네트워크 구조를 숨겨서 (외부에는 내부 IP가 안 보임) 보안을 강화하려고
라우터 하나에 연결하는 대신 하위 라우터로 나누는 이유는?
1) 라우터 하나가 큰 네트워크를 관리하면 성능이 떨어져서
2) 라우터에 장애가 났을 때 위험을 분산하려고
3) 라우터 하나만 털리면 다 털릴 수도 있으니 보안을 강화하려고
오늘은 UX 특강 듣는 날!
데이터를 올바르게 전달하였는지, 오류가 없는지 점검하는 계층
데이터를 전송하는 1~3 단계와 달리, 4단계는 이렇게 전송된 데이터가 올바르게 도착하는지를 확인한다. 크게 두 가지를 점검한다.
전송 계층은 위를 점검할 때 상황에 맞게 연결형 통신과 비연결형 통신 중 하나를 선택한다.
연결형 통신 | 비연결형 통신 | |
---|---|---|
프로토콜 | TCP | UDP |
우선 순위 | 정확성 | 효율성 |
예시 | 전화 (쌍방) | 문자 (일방) |
통신 방식 | 시작 → "지금 통화 되나요?" → "네" → "XXX 입니다" → "네 이해했습니다" → "네 확인했습니다" → 종료 | 시작 → "XXX 입니다" → 종료 |
TCP는 정확도를 중시하는 연결형 통신 프로토콜이다. 데이터 통신 전에 연결이 잘 되었는지, 데이터가 잘 전달되었는지, 통신이 끝나면 연결이 잘 끊어졌는지 확인하는 절차를 거친다.
왜 4-way까지 하나? FIN 보내면 바로 끊으면 되잖아
아직 보낼 데이터가 남아있을 수 있기 때문이다.
"다 보냈으니까 FIN 보낸 거 아니야?" 라고 생각할 수도 있지만, 여기서 '발신자'와 '수신자'라고 써서 그렇지 실제로는 둘 다 데이터를 보낼 수 있기 때문이다.
그래서 A가 "나 다 보냈어. 끊어도 돼." 라고 할 때 B는 "알았어... 근데 나는 아직 덜 보냈어." 같은 상황 때문에 서로 FIN 요청을 보내는 것.
위에서 TCP 헤더를 붙인 데이터 패킷을 '세그먼트'라고 언급했다.
TCP 헤더 안에는 여러 숫자가 있는데, 각각 데이터 전송 과정에서 아래의 역할을 한다.
명칭 | 역할 | 비유 |
---|---|---|
일련번호 sequence num | 세그먼트의 순서를 식별하는 번호. 하나의 데이터가 여러 세그먼트로 쪼개져서 보내지기 때문에, 각 세그먼트가 몇 번째인지 알기 위해 사용한다. | 낱장 단위로 보내는 편지의 페이지 번호 |
확인 응답 번호 ack. num | 세그먼트가 올바르게 수신되었는지 확인하는 번호. 수신자가 데이터의 seq. num을 보고, 발신자에게 다음에 받고 싶은 seq. num을 ack. num으로 보낸다. | "편지 1~10 페이지 받았어요. 다음에는 11 페이지부터 보내주세요." |
window size | 수신자가 받을 수 있는 세그먼트의 최대 용량. 매번 세그먼트를 주고 받을 때마다 요청-응답을 하면 너무 오래 걸리기 때문에, 수신자가 최대로 받을 수 세그먼트 용량을 미리 파악한다. 이러면 그 용량을 넘지 않게 여러 세그먼트를 연달아 보낼 수 있다. | 최대 50장까지 받을 수 있는 우편함이 있으면, 1~10페이지, 11~20페이지, ... 41~50페이지는 ack. num을 받기 전에도 연달아 보낼 수 있다. |
port num | 데이터의 목적지 (어플리케이션)를 식별하는 번호. 해당 데이터가 어느 어플리케이션으로 가야 하는지 알려준다. (전송 계층은 이런 역할까지 한다!) | 아파트 (수신자)에 살고 있는 주민의 집 호수 (포트). |