반응형

혼공단 13기 참여 예고 글을 올린 게 엊그제 같은데 벌써 2달 전이라죠
6주가 쏜살같이 지났습니다
다행히 예고한 대로 책 1권 뿌시기에 성공했어요
일단 냅다 박수~!~!

그럼 혼공단 13기 활동 회고 시작해 볼까요
시작은 상큼하게 족장님이 응원의 글로 올려주셨던 복리 효과 짤
하루하루를 보내다 보면 아무것도 안 한 것 같지만
그 작은 하루들이 1년 뒤에는 꽤나 큰 차이를 만들어낸다.
뭐든 꾸준히 하다 보면 언젠가 성장한다는 이런 내용이다.
비단 돈에만 적용되지 않는
인생에도 충분히 적용될 수 있는 재테크 공식이라죠. 

혼공단 하길 진짜 잘했다고 생각한 점은요

일단 네트워크 이론을 한 바퀴 돌리면서 공부를 할 수 있었다!

아무도 시키지 않은 이전 내용 복습하기 콘텐츠까지 하면서 정리했는데,
기억에 얼마나 남을지는 모르겠지만
전공 지식을 다시 쌓아 올리는 시간이었던 거 같아요
단어로는 알고 있지만 누군가 갑자기 설명해 봐! 그래서 그게 뭔데! 하면
어버버 했을... 그런 익숙한 듯 친숙한 듯 하지만 그렇지 않은…
항상 거리감 느껴지던 개념들과 조금은 가까워진 느낌이에요
나 다시 도비 될 때까지 친하게 지내자 친구들^^
내 최애기업은 서술형 시험을 봐…
전공시험처럼 뇌에서 냅다 뽑아서 줄줄줄 적어야 해…
잘 부탁해…

말이 조금 샜는데
책 1권을 공부하면서 네트워크 기초 지식을 다시 습득했고
연관된 개념들도 찾아보며 추가 공부도 하는 유익한 시간이었다~

잘했다고 생각하게 된 두 번째는

다른 사람들 공부하는 걸 볼 수 있다! (자극과 추가공부)

족장님이 숙제 검사하고 나면
각자 공부한 내용의 장점만 부각해서 소개해주거든요.
사람마다 공부하고 정리하는 스타일이 진짜 다 달라서
심심할 때 다른 사람들 꺼 구경하면 또 재밌어요
그 김에 개념들도 한 번 더 상기할 수 있고 일석이조~!

어떤 분은 혼공 책과 전공서적을 같이 보기도 했대요
아무래도 혼공 책이 기본기에 충실한 책이다 보니
철저한 심화학습을 추구하신 것 같은데 좋은 아이디어…!
많은 노력이 들어가겠지만
6주간 책 2권을 병행한 사람이잔아 개이득이잔아?

벤치마킹하려고요^^7
14기에는 컴퓨터구조+운영체제 하고 싶은데…
전공서적이랑 병행 가능한 분량인가 근데?
내 기억상 엄청나게 많았는데...?!
혼공단 전에 혼공컴운 혼자 읽어본 사람임

한빛미디어 책으로 전공 공부 커리를 짠다면, 이렇게 추천

아 여담으로 요새는 아예 비전공자 분들도 컴퓨터 공학 공부 많이 하기도 하고
잃어버린 전공 지식을 되살리려는 저 같은 사람들도 많은데요
초장부터 정보처리기사 같은 재미없는 자격증 책으로 공부하기 어렵잖아요?
이렇게 해보시는 거 어떤가요

[1안 세세 to 구조 잡기]
혼공네트랑 혼공컴운을 개별로 하나씩 보면서 세세하게 공부를 하고
마지막 정리하는 느낌으로 이것이 컴퓨터 과학이다를 보는 루트구요,

[2안 구조 잡기 to 세세]
반대로 이것이 컴퓨터 과학이다를 먼저 보면서 전체 개괄을 잡고
개별 도서를 하나씩 세세하게 파는 루트도 괜찮을 거 같아요.

전공자인 제가 세 책 모두 읽어보고 남기는 의견입니다
여기서 부족하다 하시면
SQL과 각자 공부하는 개발 언어책 하나 추가하면 베스트!

사실 저는 저 책들 읽어보다가 혼공학습단을 알게 되었고
첫 활동이니까 제일 만만한 네트워크를 먼저 고르게 되었거든요
근데 혼공단 뿌듯하고 재밌어서 계속 해나가려구요

글애서 말인데 족장님 도서 이름이 혼공은 아니지만
'이것이 시리즈'도 혼공단 같은 콘텐츠 해주세요,,,
혼공 시리즈 내용을 총망라 또는 심화학습 하는 느낌의 책들이자나요~!

잘했다고 생각하게 된 세 번째 장점은

혼공단은 지치지 않게 계속 격려받을 수 있다! (누군가의 따순 응원)

족장님이 매주 숙제 검사를 빙자한 무한 칭찬을 뚱댓으로 해주고요,
가끔씩 잘했다고 간식도 주고요, 운 좋으면 책도 줘요.
공부 다 하잔아?
그럼 다른 책 공부할 수 있게 책 사라고 마일리지도 줌.
진짜 안 할 이유가 없다…🫡

다들 이 사이트 즐겨찾기 해두세요.
https://hongong.hanbit.co.kr

 

[한빛미디어] 혼공학습단: 혼공족의 스터디 공간

혼공학습단에 오신 것을 환영합니다! 개발하고 싶은 것을 개발하세요. 혼공시리즈와 함께라면 무엇이든 할 수 있습니다. 여러분은 성공할 운명이니까요. 자신을 한번 믿고 프로그래밍 공부를

hongong.hanbit.co.kr

혼공단 활동 끝나는 게 너무 아쉬운데
보통 혼공단이 반기에 1번 열리는 것 같더라구요
그래서 혼공단 비수기(?)에는
개인적으로 다른 책들 공부하고 정리하는 시간을 가져볼까 해요
또 블로그 특으로 계획만 거창해지는 중

혼공단 성공적으로 마치면 주시는 마일리지로
책을 사서 보면 어떨까 생각만 하고 있는데요.
제 후보군은 이 셋입니다
어느 게 나을지 누군가 이 글을 보고 계시다면 추천 환영

책 찾다 보니 한빛 공홈에서 ebook으로도 구매 가능하네?
패드로 모든 걸 하는 전자인간에게 완전 딱 맞춤이네...

아무튼 작년 12월에 돌아온 도비 시즌을 맞이해
이것저것 계획을 엄청 세우고 포부가 가득한 인간이었는데요,,,
혼공단이라도 끝낸 기념으로 중간 점검을 해보자면요

첫째, ⭐️혼공단 성공⭐️

둘째, 사회조사분석사는 필기 합격(실기 남음)
셋째, 정보보안기사(발등에 불 떨어짐^_^ 할 수 있다 아좌아ㅈㅏ)
넷째, 블로그에 썼던 코테풀이 챌린지는 거의 작심삼일 하고
지금은 스파르타 코딩클럽에서 알고리즘 스터디로 대체 중…
이거 끝나면 다시 진행시켜 보기로 했어요
다섯째, AI 공부는 교양서들 독서 끝내고
생성형 AI와 친해지고자 부스트코스 통해 스터디 진행 중
내용 공유가 불가한 스터디라 나중에 후기만 찔 예정
여섯째, 언어 공부 어플 꾸준히 사용하기는 성공 중

그 외 개인적인 취미와 자기만족용 활동들도 킵고잉 중입니다
나 집 도비가 천성에 맞는데 평생 하고 싶다

마지막으로 지금 새롭게 고민 중인 활동이 하나가 있는데요
요즘 핫한 Cursor AI 공부하는 2주짜리 챌린지인데
내가 신청해 둔 정보보안기사 일정이랑 너무 겹쳐서
고민이 깊어지는 순간입니다

흠 적어놓고 보니 포스팅 초반에 했던 말처럼
일상에서 소소하게 무언가를 계속하고는 있네요.
어쩌면 (1.01)^365식 인생 재테크 순항중일지도...
이것저것 셀프고문 콘텐츠 만들어두길 잘했다는 생각이 드네요
맨날 속으로 과거의 나 새끼😡 이러면서 살기는 하지만
글애도 집 도비라 너무 나태해질까 봐 걱정했는데
이 정도면 부지런한 집 도비가 된 것 같구만

사실 재취업에 초점을 놓고 본다면
컴퓨터 일반 같은 수험서랑 NCS, 코딩테스트만 냅다 조져야 하지만
그러기엔 재밌어 보이는 것도 해보고 싶은 것도
너무나도 많은 탐욕 인간인지라^^ㅋ
뭐 그래도 지금까지 살면서 이렇게 하나둘 욕심으로 시작한 게
다 언젠가는 도움이 되었어요 쓸모도 있었고
혼공단만 봐도 네트워크 공부 해냈자나 최고자나

그러니 내 방식대로 킵고잉~
다만 코테 공부는 조금만 더 힘줘서 노력합시다🙏🏻


이상 혼공단 활동 후기를 빙자한
정신없던 을사년 두 달 돌아보기였습니다

결론은 혼공단 왜안해 추천해 족장님짱

반응형
반응형

혼공네트의 마지막 주차 공부 시간입니다.
도서관 반납을 위해 오늘도 달려보게씀니다ㅏㅏ
근데 바깥에 눈이 진짜 많이 오네요
입춘도 지났는데 지구야 이것 뭐예요...?
우리가 잘못했어,,, 미안해,,, ㅠㅠ

아무튼 마지막 6주 차에 할 공부는요

<목차>
Chapter 1. 컴퓨터 네트워크 시작하기
Chapter 2. 물리 계층과 데이터 링크 계층
Chapter 3. 네트워크 계층
Chapter 4. 전송 계층
Chapter 5. 응용 계층
Chapter 6. 실습으로 복습하는 네트워크
Chapter 7. 네트워크 심화

네트워크 패킷을 직접 보면서 지금까지 배운 내용을 복습하고(챕터 6),
네트워크의 중요 요소 중 하나인 안정성을 알아보는(챕터 7) 시간을 가진대요

혼공단 마지막 숙제는요
와이어샤크란 프로그램을 이용해 실제 TCP/UDP 패킷을 확인하기입니다

지난 내용 복습하기

어제 또 많은 걸 공부했으니 천천히 복습부터 시작
너무 몰아서 공부해서 과부하 오는 거 아닌가 몰라 ^^;;

계층명 지난 핵심 다 합쳐서 복습하기
응용 DNS
(계층적, 레코드,
재귀/반복적 질의),
HTTP 특징,
캐시,
쿠키
- OSI 참조 모델 최상단에 있는 계층
- 사용자 및 사용자들이 이용하는 응용 프로그램과 가장 밀접한 계층

(DNS) 호스트 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보인 도메인 네임을 관리하기 위한 체계
- 도메인 네임과 마찬가지로 계층적이며, 루트 > TLD(최상위) > 책임 > 로컬 네임 서버 순
- 도메인 네임으로 IP를 알아내는 과정을 리졸빙이라 하고, 재귀적 질의와 반복적 질의 방식이 있음
  >> 재귀적 질의 : 로컬 네임 서버는 루트 네임 서버에게 1번만 물어보고, 루트 네임 서버부터 책임 네임 서버까지 순차적으로 내려가며 질의를 반복하고 응답 결과를 역순으로 전달받는 방식
  >> 반복적 질의 : 로컬 네임 서버가 루트~책임 네임 서버까지 직접 질의해서 응답 결과를 얻는 방식
- 네임 서버는 DNS 레코드 정보를 저장하고 관리함. 레코드 타입에는 A, AAAA, CNAME, NS, MX 등

(HTTP) 요청-응답 기반 + 미디어 독립적 + 스테이트리스 + 지속 연결형 응용 계층 프로토콜
- HTTP 메세지 구조는 시작 라인, 필드라인, 메시지 본문으로 구성
- HTTP 메서드에는 GET, POST, HEAD, PUT, PATCH, DELETE 등
- HTTP 상태 코드는 요청에 대한 결과를 나타내는 세자리 정수로, 백의 자리를 기준으로 유형 구분
  >> 200 OK, 201 Created, 301 Moved Permanently, 308 Permanent Redirect, 400 Bad Request, 403 Forbidden, 404 Not Found, 500 Internal Server Error, 502 Bad Gateway, 503 Service unavailable

(인증 Authentication) 자신이 누구인지 증명하는 것. 주체 신원 검증을 위한 사용 증명 활동 LIKE 암호
(인가=권한 부여 Authorization) 인증된 주체에게 작업을 허용하는 것 LIKE 접근제어목록, 보안등급

(캐시 Cache) 불필요한 대역폭 낭비와 응답 지연 방지를 위해 정보 사본을 임시로 저장하는 기술 또는 저장된 데이터 자체. 유효기간을 설정하고, 유효기간 만료시 캐시의 신선도를 재검사함
(쿠키 Cookie) 서버에서 생성되어 클라이언트측에 저장되는 데이터로 스테이트리스 프로토콜인 HTTP의 특성을 보완, 두 개의 요청이 같은 클라이언트에서 온 것인지 확인하는 세션 인증 등에 활용 
전송 연결/신뢰형 통신 프로토콜 TCP
(연결 수립 및 종료 방식인 핸드셰이크
+오류/흐름/혼잡 제어)

비연결/비신뢰형 통신 프로토콜 UDP
(속도 빠른
실시간성 서비스)
- 연결형 통신, 신뢰성 있고 안전성 있는 통신을 해야 할 때 필요한 계층 
- OSI 7계층 중 하위 3계층과 상위 3계층간 인터페이스 담당
- 재전송을 통한 오류 제어, 흐름 제어 혼잡 제어 수행
- 전송 단위는 세그먼트
- 장비는 게이트웨이
- 관련 프로토콜로는 TCP, UDP

(포트) 특정 애플리케이션까지 패킷을 전달하기 위해 사용하는 식별정보
- 16비트(2바이트)로 표현하며, 번호 범위에 따라 잘 알려진 포트(0~1023), 등록된 포트(1024~49151), 동적 포트(49152~65535)로 구분함
- 전송 계층에서는 패킷 내 송/수신지 포트 번호를 통해 송/수신지 호스트의 애플리케이션을 식별함
- NAPT는 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하여, 공인 IP 주소 수 부족 문제를 개선하는 NAT 기술

(TCP) 신뢰성, 연결지향적, TCP 상태 사용. 오류/흐름/혼잡 제어
- 가상회선 방식으로, 패킷 전송 순서를 보장하고 수신 여부도 확인함
   >> TCP 연결 수립은 3 웨이 핸드셰이크, 연결 종료는 4 웨이 핸드셰이크를 사용함
- 데이터 신뢰성이 높은 대신 속도가 느림
- (오류 제어) 데이터 오류/유실 발생시 재전송을 통해 신뢰성을 보장하려는 방식
  중복된 ACK 수신 혹은 타임아웃 발생시 재전송을 하는데, Stop-and-Wait, Go-Back-N, Selective Repeat ARQ가 가장 대표적인 방식
- (흐름 제어) 데이터 송수신측간 데이터 처리 속도 차이로 인한 데이터 손실을 방지하려는 방식으로, 수신측이 주체. 파이프라이닝과 슬라이딩 윈도우 활용
- (혼잡 제어) 데이터 송신 측의 전달 속도와 네트워크의 속도 차이로 인한 데이터 손실을 방지하려는 목적. 송신 측이 주체.
    혼잡 윈도우를 통해 네트워크 혼잡도를 판단, 혼잡한 정도에 따라 전송량을 유동적으로 조절하는 방식
    대표적인 혼잡 제어 알고리즘으로 AIMD, 느린 시작, 혼잡 회피, 빠른 회복 등이 있으며, 네트워크 상황에 따라 각 방식을 함께 이어서 사용

(UDP) 비신뢰성, 비연결성, 스테이트리스 프로토콜
- 데이터그램 패킷 교환 방식으로, 패킷 순서 보장이나 수신 여부 확인을 하지 않음
- 데이터 신뢰성이 낮은 대신 속도가 빨라 실시간 서비스에 적합
 네트워크 인터넷 프로토콜 IP
IP 주소(IPv4, IPv6)
ARP(IP to MAC)
네트워크 클래스
NAT(공인/사설IP)
DHCP(IP 동적할당)
라우팅 프로토콜
(내부 RIP&OSPF,
외부 BGP)
- 메시지를 다른 네트워크에 속한 수신지까지 전달하는 계층 = 네트워크 간 통신 계층
- IP는 데이터그램 기반 비신뢰성, 비연결성 서비스로, IP 단편화(패킷의 분해 및 조립), IP 주소 지정, 경로 선택 기능을 가짐
- 개방 시스템 들 간 네트워크 연결 설정/유지/관리 기능, 데이터의 교환/중계 기능, 경로 제어, 패킷 교환, 트래픽 제어 등의 기능을 수행함
- 전송 단위는 패킷
- 장비로는 라우터
- 관련 프로토콜로는 IP, ICMP, IGMP, ARP, RARP 등

- IPv4는 4바이트(32비트)+10진수 표현, 클래스 단위로 비순차적으로 할당함. 보안 기능이 없으며, 패킷 크기에 제한(64바이트)이 있음. 유니캐스트/브로드캐스트/멀티캐스트 방식을 사용함 
- IPv6는 16바이트(128비트)+16진수 표현, 네트워크/단말 순서로 순차적으로 할당함. 확장 헤더를 사용해 인증/보안 기능을 포함하며, 패킷 크기에 제한이 없음. 유니캐스트/멀티캐스트/애니캐스트 방식을 사용함

- 하나의 IP 주소는 네트워크 주소와 호스트 주소로 구성된
- (클래스 풀 주소 체계) 네트워크 크기에 따라 IP 주소를 분류하는 걸 클래스라 함. 클래스는 A~E까지 5개 존재. 클래스 풀 주소는 네트워크 크기가 고정이라는 한계가 존재함
- (클래스리스 주소 체계) 네트워크 주소는 1로, 호스트 주소는 0으로 표기하여 임의로 나누는 방식을 서브넷 마스크라 함. IP 주소와 서브넷 마스크를 비트 AND 연산하면 네트워크 주소가 나온다. 서브넷 마스크는 10진수로 표기하거나, IP 주소/서브넷 마스크 상 1의 개수 형식으로 표현하는 CIDR 표기법을 사용함

- ARP 프로토콜은 "동일 네트워크 내에서" IP 주소를 통해 MAC 주소를 알아내는 과정. ARP 요청(브로드캐스트) > ARP 응답(유니캐스트) > ARP 테이블 갱신 순으로 동작한다.
- NAT는 공인 IP와 사설 IP를 상호 변환해주는 기술
- DHCP는 네트워크 안의 호스트들에게 IP와 DNS 서버, 서브넷 마스크 주소를 동적으로 할당하는 프로토콜. DHCP 할당은 DISCOVER, OFFER, REQUEST, ACK 4단계로 구성됨(모두 브로드캐스트). 

- 라우팅 프로토콜은 라우터끼리 자신들의 정보를 교환하며 패킷이 이동할 최적의 경로를 찾고자 사용. AS 내부에서 수행되면 IGP로 RIP와 OSPF가 있고, 외부에서 수행되면 EGP로 BGP가 있음
- IGP는 거리 벡터를 사용하는 RIP와 링크 상태를 사용하는 OSPF/IS-IS로 나뉨
데이터 링크 NIC
스위치
(전이중 통신+VLAN)
- 네트워크 내 주변장치 간 정보를 올바르게 주고받기 위한 계층
- MAC 주소 체계를 통해 네트워크 내 송수신지를 특정
- 물리적으로 연결된 인접한 개방 시스템들 간 신뢰/효율적 정보 전송을 위해 시스템 간 연결 설정과 유지 및 종료 담당
- 오류 검출 및 회복을 위한 오류 제어, 송수신측 속도 차이 해결을 위한 흐름 제어, 프레임 순서적 전송을 위한 순서 제어 기능을 가짐
- 전송 단위인 프레임에 물리적 주소를 부여함
- 장비로는 랜카드, 브리지, 스위치 등
- 관련 프로토콜로는 HDLC, LAPB, LLC, MAC, LAPD, PPP, 이더넷 등

- 스위치는 전이중 통신을 한다. MAC 주소 학습과 테이블을 이용해, 특정 MAC 주소를 가진 호스트에만 프레임을 전달할 수 있다. MAC 주소 학습은 플러딩, 포워딩과 필터링, 에이징을 통해 이루어진다.
- 스위치는 또한 가상의 LAN을 만드는 VLAN 기능을 지원한다. 
물리 트위스티드 페어 케이블
광섬유 케이블
허브(반이중 통신+CSMA/CD)
- OSI 모델 최하단 계층
- 0과 1로 표현되는 비트 신호를 주고 받음 (전송단위가 Bit)
통신 케이블로 데이터를 전송하는 물리적 장비에 필요한 기계/전기/기능/절차적 특성에 대한 규칙을 정의
- 장비로는 통신 케이블, 리피터, 허브 등
- 관련 프로토콜로는 RS-232C, X.21 등

- 허브는 반이중 통신을 해서 무전기처럼 송수신을 번갈아 가면서 한다.
다른 호스트가 기다리지 않고 신호를 보낼시 충돌 위험이 있는데 이를 방지하는 프로토콜이 CSMA/CD이다. Carrier Sense(캐리어를 감지하고) Multiple Access(다중 접근시에) Collision Detection(충돌을 검출)한다.

그럼 본격적으로 마지막 공부 시작해 볼게요

와이어샤크 활용 패킷 관찰

패킷 캡처 프로그램은 네트워크에서 송수신되는 패킷을 모니터링하고 분석할 수 있는 프로그램으로, 대표적으로 와이어샤크(Wireshark)라는 프로그램이 있다. 와이어샤크는 패킷 캡처, 패킷 필터링과 같이 패킷 내용을 분석하는데 필요한 기능을 제공한다 (다운로드는 여기서)

화면 보니 예전에 보안 회사에서 인턴 하던 거 갑자기 생각난다...
거기서 악성코드 분석부터 시작해서 웹 해킹 이런 거 조금 맛봤는데
악성코드 분석은 2진수 보면서 패턴 찾기 보고 바로 나의 길이 아니다 했다죠
내 동기는 재밌다고 맨날 보던데... 그게 억덕케 재밌는 건데... 신기...

아무튼 와이어 샤크는 직접 써보면 되는 거라 프로그램 소개만 하고 넘어갑니다
어떤 패킷을 봐야 할지 모르겠다면 저자 깃헙에 제공되는 학습용 예시 파일을 활용하세요.

안정성을 위한 기술 : 가용성, 이중화/다중화, 로드 밸런싱

# 가용성 availability

안전성은 특정 기능을 언제든 균일한 성능으로 수행할 수 있는 특성을 말한다. 웹 서버가 안정적이라면 언제든 응답 메시지를 제공할 수 있다. 안정성을 수치화하여, 안정성의 정도를 나타내는 용어가 가용성이다. 가용성이란 컴퓨터 시스템이 특정 기능을 실제로 수행할 수 있는 시간의 비율을 의미한다. 수식으로 나타내면 가용성 = 업타임 / (업타임+다운타임)이라고 표현한다. 이 값이 크면 전체 사용 시간 중 대부분이 사용가능하다는 의미로, 가용성이 높다고 표현한다. 가용성이 높은 성질은 고가용성(HA, High Availability)로 표현하기도 한다.

가용성을 높이려면 다운타임을 낮추어야 한다. 다운타임은 과도한 트래픽, 예기치 못한 소프트웨어상 오류, 하드웨어 장애, 혹은 보안 공격이나 자연재해 등 다양한 원인으로 발생한다. 현실적으로 문제 발생의 모든 원인을 찾아내 차단하기는 어렵기에, 대신 문제가 발생하더라도 계속 동작할 수 있도록 설계하는 전략을 취한다. 문제가 발생하더라도 계속 기능할 수 있는 능력을 결함 감내 fault tolerance라 한다. 

# 이중화와 다중화

결함을 감내하여 가용성을 높이기 위한 가장 기본 방법은 이중화이다. 무언가를 이중으로 두어 예비(백업)을 마련하는 방법이다. 이중화할 수 있는 대상은 '문제가 발생할 경우 시스템 전체가 중단될 수 있는 대상'인 단일 장애점(SPOF, Single Point of Failure)으로, 서버부터 라우터, 데이터베이스까지 거의 무엇이든 될 수 있다.

이중화 구성에는 크게 액티브/스탠바이 active-standby(passive)와 액티브/액티브 active-active가 있다. 액티브는 가동 상태를 의미하며, 스탠바이는 액티브의 백업으로 대기하는 상태를 의미한다. 참고로 액티브 시스템에 문제가 생겼을 때 예비 스탠바이로 자동 전환되는 기능을 페일오버 failover 라 한다.

액티브/스탠바이 active-standby 액티브/액티브 active-active
한 시스템만 가동하고,
다른 시스템은 스탠바이(백업 용도로 대기)

안전한 구성이나 성능상 이점은 없음
두 시스템 모두 가동 상태로 두는 구성 방식

부하 분산 및 성능상 이점이 있으나,
한 시스템 문제 발생시 다른 시스템에 부하 발생 가능성 높아짐
[스탠바이 종류 3가지]
1) 핫(Hot) : 스탠바이 가동 후 즉시 이용 가능
2) 웜(Warm) : 스탠바이 가동 후 이용까지 약간의 준비가 필요한 구성
3) 콜드(Cold) : 스탠바이를 정지시켜 두는 구성

출처 : 티스토리 블로그 akku-dev님

만약 장비를 2개가 아니라 3개 이상으로 두어 관리하면 더욱 안정적인데, 이를 다중화라고 한다. 이중화/다중화 사례로 티밍 teaming과 본딩 bonding이 있다. 전자는 윈도우, 후자는 리눅스에서 주로 사용하는 용어인데, 여러 개의 네트워크 인터페이스 NIC를 이중화/다중화하여 마치 더 뛰어나고 안정적인 성능을 보유한 하나의 인터페이스처럼 보이게 하는 기술이다.

# 로드 밸런싱 load balancing

서버 다중화만으로 가용성 문제가 모두 해결되지는 않는다. 서버의 가용성에 큰 영향을 끼치는 요소인 트래픽도 고려해야 한다. 서버에 과도한 트래픽이 몰리면 다양한 문제가 발생할 수 있기 때문이다. 그래서 트래픽의 고른 분배를 위해 로드 밸런싱 기술을 사용한다. 부하를 의미하는 로드 load와 균형 유지를 나타내는 밸런싱 balancing이 합쳐진 단어이다. 로드 밸런싱은 로드 밸런서에 의해 수행된다. 로드 밸런서는 L4/L7 스위치와 같이 네트워크 장비일 수도 있고, HAProxy, Envoy 또는 Nginx와 같이 소프트웨어일 수도 있다.

출처 : https://www.cloudv.kr/etc/lb.html

# HTTP의 중간 서버, 프록시와 게이트웨이

클라이언트와 서버 사이에는 수없이 많은 서버들이 존재한다. 그래서 클라이언트가 최종적으로 메시지를 주고받는 대상을 오리진 서버라고 하기도 한다. 클라이언트와 오리진 서버 사이에 놓인 수많은 중간 서버들을 프록시와 게이트웨이라 한다.

프록시 proxy는 클라이언트가 선택한 메시지 전달 대리자로 포워드 프록시라 하기도 한다. 프록시는 주로 캐시 저장, 클라이언트 암호화 및 접근 제한 등의 기능을 제공하며, 일반적으로 클라이언트와 더 가까이에 위치해 있다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

게이트웨이 gateway는 일반적으로 네트워크 간 통신을 가능하게 하는 입구 역할을 하는 소프트웨어 또는 하드웨어라는 의미를 가진다. 하지만 HTTP 중간 서버라는 맥락에서는 아웃바운드 연결에 대해 오리진 서버 역할을 하지만, 수신된 요청을 변환하여 다른 인바운드 서버들로 전달하는 중개자 역할을 한다. 여기서 아웃바운드는 클라이언트를 향하는 메시지, 인바운드는 오리진 서버를 향하는 메시지를 의미한다. 

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

안전성을 위한 기술 : 대칭/공개 키 암호화, SSL/TLS

# 대칭 키와 공개 키 암호화 방식

대칭 키 암호화 symmetric key cryptography 방식은 암호화와 복호화에 동일한 키를 사용한다. 메시지를 암호화하고 복호화하는 데 사용하는 키가 동일하다. 키가 중요하기 때문에 유출되면 안 되고, 키 또한 안전하게 전달해야 한다는 단점이 존재한다.

출처 : www.sinsiway.com/kr/pr/blog/view/412/page/9

키를 안전하게 전달할 방법을 찾을 바엔 그 방법으로 메시지를 보내는 게 맞지 않나란 생각에서 등장한 것이 공개키 암호화 public key crytography 방식이다. 비대칭키 암호화 asymmetric key cryptography 방식이라고 부르기도 한다. 암호화와 복호화를 위한 키가 각각 다른 방식이고, 이 한 쌍의 키를 각각 공개 키와 개인 키라고 부른다. 공개 키로는 개인 키를 유추할 수 없고, 그 반대도 불가하다. 공개 키로는 암호화를 하고 개인 키로 복호화하는 방식이라, 공개 키는 누구에게든 공개해도 무방하다.

출처 : www.sinsiway.com/kr/pr/blog/view/412/page/9

대칭 키는 키를 안전하게 전송하기 어렵지만, 부하가 적어 암/복호화가 빠르다. 반대로 공개 키 암호화는 암/복호화가 느린 대신 키를 안전하게 공유할 수 있다. 이러한 장단점을 고려해 두 방식을 함께 사용하기도 한다. 대칭 키를 상대에게 안전하게 전달하고자 공개 키로 암호화하고, 개인 키로는 암호화된 대칭 키를 복호화 하는 것이다. 이렇게 하면 대칭 키를 안전하게 공유할 수 있고, 대칭 키로 원하는 내용을 빠르게 암/복호화도 할 수 있게 된다. 이렇게 사용하는 방식을 세션 키 session key라고 한다.

출처 : 티스토리 블로그 skogkatt님

⭐️⭐️ 시험에 진짜 맨날 나오는 부분이라 표로 정리하고 넘어가 보자 ⭐️⭐️

내용 대칭 키 공개 키(비대칭 키)
키의 관계 암호화 키 = 복호화 키 암호화 키 != 복호화 키
암호키 공개여부 비공개 공개
복호키 공개여부 비공개 비공개
키의 개수 n(n-1)/2개 2n개
1인당 키 n-1개 n개
암/복호화 속도 빠름 + 효율적 느림 + 비효율적
인증 키 공유자 누구나 가능
장점 키의 길이가 짧음
암/복호화 속도가 빠름
키 분배가 용이함
사용자 수에 따라 관리할 키 개수가 적은 편
여러 분야에 활용 가능
단점 사용자 수에 따라 관리할 키 개수가 많은 편
키 변화의 빈도가 잦음
키의 길이가 김
암/복호화 속도가 느림
종류 DES, AES, SEED, ARIA, Twofish RSA(Rivest, Shamir, Adleman),
ElGamal, 타원 곡선 암호, 배낭 암호

파란색으로 표시한 건 안 외워져서 내 나름대로 외우는 방법이다^^
ES가 들어가거나 앞뒤가 A로 끝나면 대칭 키,,,ㅋ

# 인증서와 디지털 서명

네트워크에서 말하는 인증서는 보통 공개 키 인증서를 의미하는데, 공개 키와 공개 키의 유효성을 입증하기 위한 전자문서를 가리킨다. 이러한 인증서는 인증 기관(CA, certification Authority)라는 제3의 기관에서 발급한다. 인증 기관은 인증서의 발급, 검증, 저장과 같은 역할을 수행하는 공인기관으로, 대표적으로 IdenTrust, DigiCert, GlobalSign 등이 있다. CA가 발급한 인증서에는, 공개 키 인증서가 진짜라는 보증을 담은 서명 값 signature가 있다. 클라이언트는 이 서명 값을 바탕으로 인증서를 검증할 수 있다.

서명 값은 1) 인증서 내용에 대한 해시 값(지문 fingerprint)을, 2) CA의 개인 키로 암호화하는 방식으로 만들어진다. CA는 이렇게 얻어낸 정보를 서명 값으로 삼아 클라이언트에게 인증서와 함께 전송한다.

클라이언트는 인증서 검증을 위해 1) 서명 값과 인증서를 분리하고, 2) 서명 값을 CA의 공개키로 복호화해 해시 값을 얻는다. 클라이언트는 이렇게 얻은 해시값을, 인증서 데이터에 대해 구한 해시 값과 비교하는 절차를 거친다. 이렇게 개인 키로 암호화된 메시지를 공개 키로 복호화하여 신원을 증명하는 절차를 디지털 서명 digital signature 이라 부른다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함 (좌 CA 암호화, 우 클라이언트 복호화)

# HTTPS: SSL과 TLS

지금까지 공부한 대칭/공개키 암호화 방식을 기반으로 동작하는 SSL(Secure Sockets Layer)와 TLS(Transport Layer Security)라는 프로토콜이 있다. 둘 다 인증과 암호화를 수행하는 프로토콜로, TLS는 SSL을 계승한 프로토콜이다.

SSL/TLS를 사용하는 대표적인 프로토콜이 HTTPS(HTTP over TLS)이다. HTTPS는 HTTP 메시지의 안전한 송수신을 위해 개발되었다. 오늘날 주로 사용되는 TLS 1.3을 기반으로 HTTPS가 어떻게 동작하는지 확인해 보자. HTTPS 메시지는 크게 아래와 같은 세 단계를 거쳐 송수신한다.

1) TCP 쓰리 웨이 핸드셰이크
2) TLS 핸드셰이크 : 암호화 통신을 위한 키를 교환함 + 인증서 송수신과 검증이 이루어짐
  - ClientHello : (클라이언트 >> 서버) 암호화된 통신을 위해 서로 합의할 정보들을 제시하는 메시지. 지원되는 TLS 버전, 사용 가능한 암호화 방식과 해시 함수(암호 스위트 cipher suite), 클라이언트 난수 등이 포함되어 있음
  - ServerHello : (서버 >> 클라이언트) 제시된 정보들을 선택하는 메시지. 선택된 TLS 버전, 암호 스위트 정보, 서버 난수 등이 포함
  >> 두 메시지를 주고받고 나면 암호화된 통신을 위해 사전 협의해야 할 정보들이 모두 결정됨
3) 암호화된 메시지 송수신

출처 : https://brunch.co.kr/@growthminder/79

무선 네트워크

# 전파와 주파수, 와이파이와 802.11

전파 radio wave는 약 3kHz부터 3THz 사이의 진동수를 갖는 전자기파이다. 수많은 무선 통신 기기가 전자기파를 이용하여 통신하고, 이를 위해 통신에 사용되는 전파는 주파수 대역이 미리 정해져 있다. 아래와 같이 분배도표가 있는데 신기해서 가져와 봤다...!

출처 : 한국전파진흥협회 https://www.spectrum.or.kr/

무선 통신 네트워크는 IEEE 802.11로 표준화되어 있고, 802.11 뒤의 알파벳으로 다양한 규격을 표현한다. 그리고 IEEE 802.11 표준은 대부분 2.4 또는 5 GHz 대역을 사용한다. 와이파이 선택할 때 2.4G나 5G가 자주 보이는 건 이 때문이라고(참고로 5G가 속도는 빠르지만 장애물이 많은 환경에는 부적합하다). 버전에 따라 주파수뿐만 아니라 전송 속도, 대역폭, 전송 가능 거리, 변조 방식 등이 다양하게 바뀐다.

2주 차에 IEEE 802 표준 정리했던 거 기억나서 다시 읽어볼 겸 가져와봤다. 

와이파이 Wi-Fi는 IEEE 802.11 표준을 따르는 무선 LAN 기술을 가리키는 말로도 많이 사용되지만, 본래는 와이파이 얼라이언스라는 브랜드 네임이다. 그래서 와이파이는 일종의 인증 마크 역할을 한다. 아래와 같이 인증 마크가 붙어 있다면, 그 제품은 특정 IEEE 802.11 규격을 지켰기에 타 제품과도 호환된다는 점을 알 수 있는 것이다.

출처 : https://www.wi-fi.org/ko/certification

마지막으로 무선 네트워크를 생성하기 위해서는 무선 액세스 포인트(AP)라는 네트워크 장비가 필요하다. 우리가 흔히 공유기라고 부르는 장비다. 무선 LAN의 기기들은 AP를 경유해 인터넷에 접속하거나 서로 메시지를 주고받을 수 있다. 이렇게 AP를 경유하여 통신이 이루어지는 무선 네트워크 통신 방식을 인프라스트럭처 모드라고 한다. 무선 네트워크를 이루는 AP와 여러 장치들의 집합을 서비스 셋이라 하는데, 여러 서비스 셋을 구분할 때 서비스 셋 식별자(SSID)를 사용한다. 무선 네트워크를 지칭하는 고유한 이름인데, 보통 우리가 접하는 와이파이 이름에 해당한다.

📚 기본 숙제

# (p379) 확인문제 1번 "다음은 호스트 A와 B 간의 쓰리 웨이 핸드셰이크 과정에서 호스트 A가 호스트 B에게 전송한 첫 번째 SYN 세그먼트의 일부입니다. 쓰리 웨이 핸드셰이크상에서 호스트 B가 호스트 A에게 전송할 다음 세그먼트의 ACK NUM(raw)는 무엇일까요?"
>> 문제에 적힌 SEQ NUM(raw)에 1을 더한 값이 답이다. 즉 3588415412+1이 답이다.

# (p407) 확인문제 2번 "다음 그림은 두 호스트가 TLS 1.3 핸드셰이크를 수행하는 과정을 나타낸 그림의 일부입니다. 괄호 안에 들어갈 TLS 관련 메시지로 알맞은 말을 골라 보세요"
 >> 답은 3번 ServerHello이다. 클라이언트가 암호화 통신을 위해 합의해야 할 내용들을 ClientHello에 담아 보냈기에, 서버는 그중에서 원하는 걸 선택해 ServerHello에 담아 보낸다.

🦈 추가 숙제 : 와이어샤크로 TCP/UDP  패킷 확인해 보기

순서대로 TCP와 UDP로 필터링을 걸어서 조회해 본 결과이다. 왼쪽은 TCP라서 FIN이나 ACK 같은 글자도 보이고, SEQ NUM이나 ACK NUM도 볼 수 있다. 반대로 오른쪽은 UDP라서 더 간단하고, 송/수신지 포트나 체크썸 같은 값들도 볼 수 있다.

이렇게 해서 진짜 찐으로 혼공단 13기 혼공네트를 마칩니다.
할 수 있을까 걱정했는데 나름 알차게,
그리고 벼락치기로^^7 성공

반응형
반응형

지난해 너무 놀고먹고 한 죄를 청산하고자
의지를 체면과 돈으로 사서 겨우겨우 공부하고 있는데요
(참여 예고까지 한 혼공단 완주는 내 블로그 체면이 되)

2-3월에 할 일 디지게 많아요^ㅁ^
너무 무리했나바요...
차근차근 정리+계획해 보려다가 때려치우고 걍 일단 하자!! 마인드로 가봅니다

우선 혼공네트 책을 도서관에 가져다 드려야 할 날이 임박하여
일정표와 달리 예습하는 콘텐츠로 준비했어요

벌써 5주 차인 오늘 할 공부는요

<목차>
Chapter 1. 컴퓨터 네트워크 시작하기
Chapter 2. 물리 계층과 데이터 링크 계층
Chapter 3. 네트워크 계층
Chapter 4. 전송 계층
Chapter 5. 응용 계층
Chapter 6. 실습으로 복습하는 네트워크
Chapter 7. 네트워크 심화

네트워크 모델의 최상단 응용 계층이라죠
OSI 7 모델 기준으로는 응용/표현/세션 계층이었는데요
이 구조 기억하는 새럼~?!

출처 : velog @funnysunny08님

혼공단 숙제는요 HTTP 요청 메시지 확인해 보는 거라죠

지난 내용 복습하기

빠지면 서운한 복습부터 가보겠습니다
포스팅한 지 이틀 밖에 안 지났는데 벌써 기억 안나고요 ㅎ

계층명 지난 주 핵심 다 합쳐서 복습하기
전송 연결/신뢰형 통신 프로토콜 TCP
(연결 수립 및 종료 방식인 핸드셰이크
+오류/흐름/혼잡 제어)

비연결/비신뢰형 통신 프로토콜 UDP
(속도 빠른
실시간성 서비스)
- 연결형 통신, 신뢰성 있고 안전성 있는 통신을 해야 할 때 필요한 계층 
- OSI 7계층 중 하위 3계층과 상위 3계층간 인터페이스 담당
- 재전송을 통한 오류 제어, 흐름 제어 혼잡 제어 수행
- 전송 단위는 세그먼트
- 장비는 게이트웨이
- 관련 프로토콜로는 TCP, UDP

(포트) 특정 애플리케이션까지 패킷을 전달하기 위해 사용하는 식별정보
- 16비트(2바이트)로 표현하며, 번호 범위에 따라 잘 알려진 포트(0~1023), 등록된 포트(1024~49151), 동적 포트(49152~65535)로 구분함
- 전송 계층에서는 패킷 내 송/수신지 포트 번호를 통해 송/수신지 호스트의 애플리케이션을 식별함
- NAPT는 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하여, 공인 IP 주소 수 부족 문제를 개선하는 NAT 기술

(TCP) 신뢰성, 연결지향적, TCP 상태 사용. 오류/흐름/혼잡 제어
- 가상회선 방식으로, 패킷 전송 순서를 보장하고 수신 여부도 확인함
   >> TCP 연결 수립은 3 웨이 핸드셰이크, 연결 종료는 4 웨이 핸드셰이크를 사용함
- 데이터 신뢰성이 높은 대신 속도가 느림
- (오류 제어) 데이터 오류/유실 발생시 재전송을 통해 신뢰성을 보장하려는 방식
  중복된 ACK 수신 혹은 타임아웃 발생시 재전송을 하는데, Stop-and-Wait, Go-Back-N, Selective Repeat ARQ가 가장 대표적인 방식
- (흐름 제어) 데이터 송수신측간 데이터 처리 속도 차이로 인한 데이터 손실을 방지하려는 방식으로, 수신측이 주체. 파이프라이닝과 슬라이딩 윈도우 활용
- (혼잡 제어) 데이터 송신 측의 전달 속도와 네트워크의 속도 차이로 인한 데이터 손실을 방지하려는 목적. 송신 측이 주체.
    혼잡 윈도우를 통해 네트워크 혼잡도를 판단, 혼잡한 정도에 따라 전송량을 유동적으로 조절하는 방식
    대표적인 혼잡 제어 알고리즘으로 AIMD, 느린 시작, 혼잡 회피, 빠른 회복 등이 있으며, 네트워크 상황에 따라 각 방식을 함께 이어서 사용

(UDP) 비신뢰성, 비연결성, 스테이트리스 프로토콜
- 데이터그램 패킷 교환 방식으로, 패킷 순서 보장이나 수신 여부 확인을 하지 않음
- 데이터 신뢰성이 낮은 대신 속도가 빨라 실시간 서비스에 적합
 네트워크 인터넷 프로토콜 IP
IP 주소(IPv4, IPv6)
ARP(IP to MAC)
네트워크 클래스
NAT(공인/사설IP)
DHCP(IP 동적할당)
라우팅 프로토콜
(내부 RIP&OSPF,
외부 BGP)
- 메시지를 다른 네트워크에 속한 수신지까지 전달하는 계층 = 네트워크 간 통신 계층
- IP는 데이터그램 기반 비신뢰성, 비연결성 서비스로, IP 단편화(패킷의 분해 및 조립), IP 주소 지정, 경로 선택 기능을 가짐
- 개방 시스템 들 간 네트워크 연결 설정/유지/관리 기능, 데이터의 교환/중계 기능, 경로 제어, 패킷 교환, 트래픽 제어 등의 기능을 수행함
- 전송 단위는 패킷
- 장비로는 라우터
- 관련 프로토콜로는 IP, ICMP, IGMP, ARP, RARP 등

- IPv4는 4바이트(32비트)+10진수 표현, 클래스 단위로 비순차적으로 할당함. 보안 기능이 없으며, 패킷 크기에 제한(64바이트)이 있음. 유니캐스트/브로드캐스트/멀티캐스트 방식을 사용함 
- IPv6는 16바이트(128비트)+16진수 표현, 네트워크/단말 순서로 순차적으로 할당함. 확장 헤더를 사용해 인증/보안 기능을 포함하며, 패킷 크기에 제한이 없음. 유니캐스트/멀티캐스트/애니캐스트 방식을 사용함

- 하나의 IP 주소는 네트워크 주소와 호스트 주소로 구성된
- (클래스 풀 주소 체계) 네트워크 크기에 따라 IP 주소를 분류하는 걸 클래스라 함. 클래스는 A~E까지 5개 존재. 클래스 풀 주소는 네트워크 크기가 고정이라는 한계가 존재함
- (클래스리스 주소 체계) 네트워크 주소는 1로, 호스트 주소는 0으로 표기하여 임의로 나누는 방식을 서브넷 마스크라 함. IP 주소와 서브넷 마스크를 비트 AND 연산하면 네트워크 주소가 나온다. 서브넷 마스크는 10진수로 표기하거나, IP 주소/서브넷 마스크 상 1의 개수 형식으로 표현하는 CIDR 표기법을 사용함

- ARP 프로토콜은 "동일 네트워크 내에서" IP 주소를 통해 MAC 주소를 알아내는 과정. ARP 요청(브로드캐스트) > ARP 응답(유니캐스트) > ARP 테이블 갱신 순으로 동작한다.
- NAT는 공인 IP와 사설 IP를 상호 변환해주는 기술
- DHCP는 네트워크 안의 호스트들에게 IP와 DNS 서버, 서브넷 마스크 주소를 동적으로 할당하는 프로토콜. DHCP 할당은 DISCOVER, OFFER, REQUEST, ACK 4단계로 구성됨(모두 브로드캐스트). 

- 라우팅 프로토콜은 라우터끼리 자신들의 정보를 교환하며 패킷이 이동할 최적의 경로를 찾고자 사용. AS 내부에서 수행되면 IGP로 RIP와 OSPF가 있고, 외부에서 수행되면 EGP로 BGP가 있음
- IGP는 거리 벡터를 사용하는 RIP와 링크 상태를 사용하는 OSPF/IS-IS로 나뉨
데이터 링크 NIC
스위치
(전이중 통신+VLAN)
- 네트워크 내 주변장치 간 정보를 올바르게 주고받기 위한 계층
- MAC 주소 체계를 통해 네트워크 내 송수신지를 특정
- 물리적으로 연결된 인접한 개방 시스템들 간 신뢰/효율적 정보 전송을 위해 시스템 간 연결 설정과 유지 및 종료 담당
- 오류 검출 및 회복을 위한 오류 제어, 송수신측 속도 차이 해결을 위한 흐름 제어, 프레임 순서적 전송을 위한 순서 제어 기능을 가짐
- 전송 단위인 프레임에 물리적 주소를 부여함
- 장비로는 랜카드, 브리지, 스위치 등
- 관련 프로토콜로는 HDLC, LAPB, LLC, MAC, LAPD, PPP, 이더넷 등

- 스위치는 전이중 통신을 한다. MAC 주소 학습과 테이블을 이용해, 특정 MAC 주소를 가진 호스트에만 프레임을 전달할 수 있다. MAC 주소 학습은 플러딩, 포워딩과 필터링, 에이징을 통해 이루어진다.
- 스위치는 또한 가상의 LAN을 만드는 VLAN 기능을 지원한다. 
물리 트위스티드 페어 케이블
광섬유 케이블
허브(반이중 통신+CSMA/CD)
- OSI 모델 최하단 계층
- 0과 1로 표현되는 비트 신호를 주고 받음 (전송단위가 Bit)
통신 케이블로 데이터를 전송하는 물리적 장비에 필요한 기계/전기/기능/절차적 특성에 대한 규칙을 정의
- 장비로는 통신 케이블, 리피터, 허브 등
- 관련 프로토콜로는 RS-232C, X.21 등

- 허브는 반이중 통신을 해서 무전기처럼 송수신을 번갈아 가면서 한다.
다른 호스트가 기다리지 않고 신호를 보낼시 충돌 위험이 있는데 이를 방지하는 프로토콜이 CSMA/CD이다. Carrier Sense(캐리어를 감지하고) Multiple Access(다중 접근시에) Collision Detection(충돌을 검출)한다.

그럼 본격적으로 5주 차 공부 시작해 볼게요

도메인 네임과 (도메인) 네임 서버

우리가 브라우저에 특정 URL을 입력하면 웹 페이지가 뜬다. 뒷단에서 클라이언트와 서버가 요청-응답 메시지를 송수신하고 있기 때문인데, 이때 서버와 클라이언트는 '메시지를 주고받고자 하는 대상'과 '주고받고자 하는 정보'를 알아야 한다.

앞서 공부하면서 '메시지를 주고 받고자 하는 대상'을 알기 위해서는 IP 주소를 사용한다고 배웠다. 하지만 숫자를 언제 다 외워요...? 요즘은 가족 휴대폰 번호도 가끔 헷갈리는 지경인데 말이죠^^ 그래서 우리는 IP 주소 대신 tistory.com과 같은 문자열을 활용해 웹 페이지에 접속하는데요. 이렇게 호스트 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보를 도메인 네임 Domain name이라고 한다.

도메인 네임과 IP 주소는 네임서버 Name server 에서 관리한다. DNS 서버라고도 부르는데, 인터넷 세계의 공용 전화번호부 같은 개념이라고 보면 된다. 아래 그림처럼, 도메인 네임을 네임 서버에 질의하면 해당 도메인 네임에 대한 IP 주소를 알려주는 방식으로 동작한다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

# 도메인 네임 구조

도메인 네임은 점(.)을 기준으로 계층적으로 분류한다. 최상단에 루트 도메인이 있고, 최상위 도메인, 2단계 도메인, 3단계 도메인 이렇게 순차적으로 내려가는 형태다. 이렇게 생겼는데,

출처 : 한국인터넷정보센터 - 그림으로 보는 도메인 체계

- 루트 도메인 : 점(.)으로 표현되는, (실제) 도메인 네임의 마지막 부분. 일반적으로 생략하고 표기함
- 최상위 도메인(TLD) : 일반적으로 생각하는 도메인 네임의 마지막 부분. com, org, net과 같은 일반TLD와 kr, us, cn과 같은 국가코드TLD로 나뉨
- 2단계 도메인 : 최상위 도메인 하부 도메인으로, www.tistory.com에서 tistory에 해당하는 부분 
- 3단계 도메인 : www.tistory.com에서 www에 해당하는 부분 (일반적으로 3~5단계 정도까지만 사용)

www.tistory.com와 같이 도메인 네임을 모두 포함하는 도메인 네임을 전체 주소 도메인 네임(FQDN)이라 한다. 분석해 보면 아래와 같은데,

3단계   2단계   최상위 루트
www . tistory . com .

여기서 FQDN의 첫 번째 부분을 호스트 네임이라고 부르기도 한다. 뒷부분이 tistory.com으로 끝나는 수많은 도메인 주소 중에서, www.tistory.com이라는 호스트를 식별할 수 있는 하나밖에 없는 애이기 때문이다. 반대로 lv27.tistory.com, notice.tistory.com으로 끝나는 애들은, 다른 도메인이 포함된 도메인이라 서브 도메인 subdomain 이라 한다.

# 계층적 네임 서버

계층적인 도메인 네임을 효율적으로 관리하기 위해 네임 서버 또한 계층적인 형태를 이룬다. 계층 서버는 전 세계에 널리 퍼져 있는데, 이렇게 분산된 도메인 네임에 대한 관리 체계를 도메인 네임 시스템, DNS라 부른다. DNS는 호스트가 도메인 네임 시스템을 이용할 수 있게 하는 애플리케이션 계층 프로토콜을 지칭하기도 한다. 우리가 IP 주소를 모르는 상태에서 도메인 네임에 대응하는 IP 주소를 알아내는 과정을 '도메인 네임을 풀이resolve한다' 또는 '리졸빙'이라고 표현한다. 이 과정에는 로컬 네임 서버, 루트 네임 서버, TLD 네임 서버, 책임 네임 서버와 같이 다양한 네임 서버들이 필요하다.

- 로컬 네임 서버 : 클라이언트와 맞닿아 있는 네임 서버로, 클라이언트가 도메인 네임을 통해 IP 주소를 알아내고자 할 때 가장 먼저 찾게 되는 네임 서버. 로컬 네임 서버의 주소는 보통 ISP에서 할당해 주지만, 필요하다면 공개 DNS 서버를 이용할 수도 있음(구글 공개 DNS 서버는 8.8.8.8과 8.8.4.4
- 루트 네임 서버 : 루트 도메인을 관장하는 네임 서버로, 로컬 네임 서버의 질의에 대해 TLD 네임 서버의 IP 주소를 반환함
- TLD 네임 서버 : TLD를 관리하는 네임 서버로, 질의에 대해 TLD 하위 도메인 네임을 관리하는 서버 주소를 반환함
- 책임 네임 서버 authoritative name server : 특정 도메인 영역zone을 관리하는 네임 서버로, 자신이 관리하는 도메인 영역의 질의에 대해서는 곧바로 대답이 가능함 = 로컬 네임 서버가 마지막으로 질의하는 네임 서버임  

출처 : 컴퓨터 네트워크 하향식 접근 6판 원서

# 도메인 네임을 리졸빙하는 과정 = ⭐️ 재귀적 질의와 반복적 질의 ⭐️

재귀적 질의 recursive query 반복적 질의 iterative query
클라이언트가 로컬 네임 서버에게 도메인 네임을 질의하면,
로컬 네임 서버가 루트 네임 서버에게 질의하고,
루트 네임 서버가 TLD 서버에게 질의하고,
TLD 네임 서버가 다음 단계에 질의하는 과정을 반복해
최종 응답 결과를 역순으로 전달받는 방식
클라이언트가 로컬 네임 서버에게 도메인 네임을 질의하면,
로컬 네임 서버는 루트 도메인 서버에게 질의해서 응답받고,
다시 로컬 네임 서버가 TLD 서버에게 질의해서 응답받고,
다시 로컬 네임 서버가 다음 서버에게 질의하는 과정을 반복해
최종 응답 결과를 클라이언트에게 알려주는 방식
로컬 네임 서버는 루트 네임 서버에게 1번만 물어봄
각 서버가 단계별로 내려가면서 물어보고,
자신이 받은 답변을 위로 올려줌
로컬 네임 서버가 루트~책임 서버까지 다 물어봄

근데 매번 이렇게 물어보면 시간도 오래 걸리고 네트워크에 부담이 많이 간다죠. 그래서 기존에 응답받은 결과를 저장해 두었다가, 나중에 같은 질의가 또 오면 대답해주기도 한다. 이를 DNS 캐시라고 하는데요, 저장된 값은 일정 시간(TTL)이 지나고 나면 폐기한다.

# DNS 레코드 타입

네임 서버는 DNS (자원) 레코드라 불리는 정보를 저장하고 관리한다. 도메인 네임을 구입한 뒤에, 웹 사이트에 도메인 네임을 적용시킬 때 사용하게 된다. 도메인 네임이 특정 IP에 대응된다는 사실을 네임 서버에게 알리기 위해 추가하는 작업을 해줘야 하는 것이다. 보통 가비아 같은 곳에서 설정할 수 있다. 아래처럼 생겼는데,

출처 : 가비아 유튜브 내 DNS 레코드 설정 매뉴얼 영상

DNS 레코드에는 이름(호스트)과 값/위치, TTL, 타입이 있다.
각 레코드에는 유형이 정해져 있는데, 자주 접하는 ⭐️레코드 유형은 아래와 같다.

레코드 유형 설명
A
(host record)
특정 호스트에 대한 도메인 네임과 IPv4 주소와의 대응 관계
호스트 이름이 정의된 주 영역이라고 보기도 함
AAAA 특정 호스트에 대한 도메인 네임과 IPv6 주소와의 대응 관계
CNAME 호스트 네임에 대한 별칭 지정
NS 특정 호스트의 IP 주소를 찾을 수 있는 네임 서버
MX 해당 도메인과 연동되어 있는 메일 서버

짧게 정리하고 넘어가자면 DNS의 주요 기능은 네임 공간(구조) 생성, 네임 등록 관리, 네임을 IP로 변환 정도라고 보면 될 듯

시험에 자주 나오는 개념들은 이제 ⭐️을 달기로 했다
근데 가비아 홈페이지 보니까 또... 회사 생각나네
시스템 기획/운영 업무하면 도메인 사고 레코드 설정도 하고 그렇답니다^ㅁ^

# 자원을 식별하는 URl

이제까지 서버와 클라이언트가 알아야 하는 정보 중 '메시지를 주고받고자 하는 대상'과 관련된 개념을 공부했다. 그렇다면 '주고받고자 하는 정보'는 어떻게 알 수 있을까? 우선 이렇게 네트워크상에서 메시지를 통해 주고받고자 하는 정보를 자원이라고 부른다. 자원은 HTML 파일부터 이미지, 동영상, 텍스트 파일과 같이 정말 다양하다.

네트워크 상에서 자원을 주고받으려면 자원을 식별할 수 있어야 한다. 자원을 식별할 수 있는 정보를 URI, Uniform Resource Identifier라고 부른다. 이름 뜻 그대로 자원을 식별하는 통일된 방식이다. URI에는 위치를 이용해 자원을 식별하는 URL과, 이름을 이용해 자원을 식별하는 URN이 있다.

오늘날 더 많이 쓰이는 방법은 URL, Uniform Resource Locator이다. URL은 보통 이렇게 생겼다.

foo :// www.example.com:8042 /over/there ?name=hongong #hanbit
scheme   authority path query fragment
- scheme (자세한 종류는 여기서)
자원에 접근하는 방법을 의미하며, 일반적으로 사용할 프로토콜을 명시함
http를 사용하면 http://, https를 사용하면 https://
- authority
호스트를 특정할 수 있는 정보로 IP 주소나 도메인 네임을 기재함. 콜론(:) 뒤에 포트 번호 붙이기도 함
- path
자원이 위치한 경로
슬래시(/)를 기준으로 계층적으로 표현하며, 최상위 경로도 /로 표현
- query
복잡한 요구를 포함하는 HTTP 요청 메시지를 보낼 때 사용하며, 쿼리 문자열 또는 쿼리 파라미터라 함
물음표(?)로 시작되는 <키=값> 형태로, 앰퍼샌드(&) 연산자를 사용해 연결해서 쓴다 >>> ?key=value&key2=value2
쿼리 문자열은 서버 개발자가 설계하기 나름이라 매우 다양함
- fragment
자원의 한 조각을 가리키기 위한 정보 >> html 페이지 내 특정 부분을 가리키는 등

응용 계층 대표 프로토콜, HTTP

# HTTP의 특성 4가지

(1) 요청-응답 기반 프로토콜
HTTP는 클라이언트-서버 구조 기반의 요청-응답 프로토콜이다. HTTP는 클라이언트와 서버가 서로 HTTP 요청과 응답 메시지를 주고받는 구조로 동작한다.

(2) 미디어 독립적 프로토콜
HTTP는 클라이언트와 서버가 주고 받는 자원의 특성을 제한하지 않는다. 자원의 특성과 무관하게 그저 자원을 주고 받는 수단(인터페이스)의 역할만을 수행한다.
HTTP에서 메시지로 주고 받는 자원의 종류를 미디어 타입, 또는 MIME 타입(Multipurpose Internet Mail Extensions Type)이라 한다. 미디어 타입은 일종의 웹 세상의 확장자와 같은 개념으로, <타입/서브타입>으로 구성된다. text/html, image/png 같은 형태다.

(3) 스테이트리스 프로토콜
HTTP는 상태를 유지하지 않는 스테이트리스 프로토콜이다. 서버가 HTTP 요청을 보낸 클라이언트와 관련된 상태를 기억하지 않는다는 의미로, 클라이언트의 모든 HTTP 요청은 독립적 요청으로 간주된다.
HTTP 서버는 보통 여러 개가 있고, 많은 클라이언트들과 동시에 상호 작용한다. 이러한 상황에서 클라이언트의 상태 정보를 유지하고 서로 공유하는 일은 쉽지 않다. 그래서 오히려 독립적으로 간주하는 것이 더 효율적이다.
게다가 HTTP의 가장 중요한 설계 목표는 바로 확장성 scalability와 견고성 robustness 이다. 상태를 유지하지 않는 특성으로 인해 필요하다면 언제든 쉽게 서버 추가가 가능하기에 확장성이 높고, 서버 중 하나에 문제가 생겨도 다른 서버로 쉽게 대체가 가능하기에 견고성도 높다고 볼 수 있다.

(4) 지속 연결 프로토콜
최근 대중적으로 사용되는 HTTP 1.1 이상 버전은 지속 연결, 킵 얼라이브 keep-alive라는 기술을 제공한다. 하나의 TCP 연결 상태에서 여러 개의 요청-응답을 주고받을 수 있는 기술이다.

# HTTP 메시지 구조

HTTP 메시지는 시작 라인, 필드 라인, 메시지 본문으로 이루어져 있다. 아래와 같이 생겼는데 내용을 조금 더 자세히 보면

- 시작 라인 start line : HTTP 메시지 종류에 따라 요청/상태 라인으로 구분
 >> 요청 라인 = 메서드 (공백) 요청 대상 (공백) HTTP 버전 (줄 바꿈)
      - 메서드는 클라이언트가 서버의 자원인 요청 대상에 대해 수행할 작업의 종류. GET, POST, PUT 등
      - 요청 대상은 HTTP 요청을 보낼 서버의 자원. 보통 쿼리가 포함된 URI 경로가 명시되고는 함
      - HTTP 버전은 사용하는 HTTP 버전을 표기. HTTP/1.1과 같이 씀
>> 응답 라인 = HTTP 버전 (공백) 상태 코드 (공백) 이유 구문 (줄 바꿈)
      - 상태 코드는 요청에 대한 결과를 나타내는 3자리 정수. LIKE 200, 404. 상태 코드를 통해 요청이 어떻게 처리되었는지 알 수 있음
      - 이유 구문은 선택 사항으로, 상태 코드에 대한 문자열 형태의 설명임
- 필드 라인 = 헤더 라인 : 0개 이상의 HTTP 헤더가 명시되는 곳
  HTTP 헤더는 HTTP 통신에 필요한 부가 정보를 의미하며,
  필드 라인에 명시되는 각 HTTP 헤더는 콜론(:)을 기준으로 헤더 이름과 하나 이상의 헤더 값으로 구성됨. 헤더 이름:헤더 값 형태
- 메시지 본문 : HTTP 요청/응답 메시지에 본문이 필요한 경우에 명시

# HTTP 메서드

메서드는 클라이언트가 서버의 자원인 요청 대상에 대해 수행할 작업의 종류라고 하는데요. 종류가 많으니 표로 정리하고 넘어갑니다.

HTTP 메서드명 설명
GET 자원을 습득하기 위한 메서드로, 특정 자원을 조회할 때 사용
HEAD GET과 동일하나, 헤더만을 응답받는 메서드
POST 서버로 하여금 특정 작업을 처리하게끔 하는 메서드로, 주로 클라이언트가 서버에 새로운 자원을 생성하고자 할 때 사용
PUT 자원을 대체하기 위한 메서드 = 덮어쓰기
요청 자원이 없다면 메세지 본문으로 자원을 새롭게 생성하거나, 존재한다면 메시지 본문으로 자원을 완전히 대체함
PATCH 자원에 대한 부분적 수정을 위한 메서드
DELETE 자원을 삭제하기 위한 메서드
CONNECT 자원에 대한 양방향 연결을 시작하는 메서드
OPTIONS 사용 가능한 메서드 등 통신 옵션을 확인하는 메서드
TRACE 자원에 대한 루프백 테스트를 수행하는 메서드

메서드에 따라 서버가 어떻게 동작할지는 전적으로 개발자가 할 일이다. 그래서 구현하지 않는 메서드가 있을 수도 있다. '어떤 URL로 어떤 요청을 받았을 때 서버가 어떻게 동작할 것인가'는 서버 개발자들의 주된 고민 중 하나이고, 이걸 잘 정리해 둔 문서가 API 문서

# HTTP 상태 코드

상태 코드는 요청에 대한 결과를 나타내는 세 자리 정수로, 백의 자리 수를 기준으로 유형을 구분할 수 있다.
아래 표는 상태 코드 중 일부만 정리한 거다. 실제는 훨씬 많아요. (궁금하면 여기서)
알아두면 좋을 내용이라 책 내용 외에도 더 보려고 검색하다가 족장의 HTTP 상태 코드 전체 요약글도 발견했다죠.
가독성 최고,,, 다들 읽어보세요,,, 츄라이 츄라이

범주 상태코드 이유 구문 설명
100번대
(정보성 상태 코드)
100 Continue 계속 진행
101 Switching Protocols 프로토콜 전환. HTTP 버전을 올려야 할 때 업그레이드 응답 헤더에서 사용
102 Processing 처리 중이니 기달. 서버 처리에 오랜 시간이 걸릴 경우 클라이언트에서 타임 아웃이 발생하지 않도록 이 응답을 보냄
200번대
(성공 상태 코드)
200 OK 서버가 요청을 성공적으로 처리
201 Created 요청이 처리되어 새로운 리소스 생성 완료
202 Accepted 요청 접수되었고 처리는 진행 중
203 Non-Authoritative Info 응답 헤더가 오리지널 서버로부터 제공되지 않음
204 No Content 요청 처리 완료, 클라이언트에게 돌려줄 콘텐츠는 없음
205 Reset Content 처리 성공, 브라우저 화면 리셋해라
300번대
(리다이렉션
상태 코드)
300 Multiple Choices 선택 항목이 여러 개 있음. 서버에서 콘텐츠를 결정하지 못하고 클라이언트에게 복수 개의 링크를 응답할 때 사용
301 Moved Permanently 지정한 리소스가 새로운 URI로 이동.
영구적 리다이렉션. 재요청 메서드 변경 가능

응답 헤더의 Location에 이동할 곳의 새로운 URI를 기재함
302 Found 요청한 리소스를 다른 URI에서 찾음 (사용 미권장)
303 See other 다른 위치로 요청해라. 브라우저의 폼 요청을 POST로 처리하고, 그 결과 화면으로 리다이렉트시킬 때 자주 사용함
304 Not Modified 마지막 요청 이후 요청한 페이지 수정안됨. If-Modified-Since와 같은 조건부 GET 요청에 대한 응답
305 Use Proxy 지정한 리소스 액세스하려면 프록시를 통해야 함
307 Temporary Redirect 임시로 리다이렉션 요청이 필요함
308 Permanent Redirect 지정한 리소스가 새로운 URI로 이동.
영구적 리다이렉션. 재요청 메서드 변경되지 않음
400번대
(클라이언트 에러 상태 코드)
400 Bad Request 요청의 구문이 잘못됨
401 Unauthorized 지정한 리소스에 대한 액세스 권한이 없음
403 Forbidden 지정한 리소스에 대한 액세스가 금지됨. 리소스 존재 자체를 숨기고 싶으면 404로 대체함
404 Not Found 지정한 리소스를 찾을 수 없음
405 Method Not Allowed 요청한 URI가 지정한 메소드를 지원하지 않음. 응답헤더에 URI가 지원하는 메소드 목록을 회신
406 Not Acceptable 클라이언트 Accept 헤더에 지정한 항목에 관해 처리할 수 없음
407 Proxy Authentication
Required 
클라이언트는 프록시 서버에 인증이 필요함
408 Request Timeout 요청을 기다리다 서버에서 타임아웃함
500번대
(서버 에러
상태 코드)
500 Internal Server Error 서버에 에러가 발생함
501 Not Implemented 요청한 URI의 메소드는 서버에 구현되어 있지 않음
502 Bad Gateway 게이트웨이나 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 수신함 = 중간 서버 통신 오류
503 Service Unavailable 현재 서버에서 서비스를 제공할 수 없음.
서버 과부하 또는 서비스 점검 등 일시적 상태
504 Gateway Timeout 게이트웨이나 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 응답을 기다리다 타임아웃
505 HTTP Ver
Not Supported
클라이언트가 요청한 HTTP를 서버가 미지원함

# 추가 학습 : 인증과 인가

인증 Authentication은 자신이 누구인지 증명하는 것이고, 인가(권한 부여) Authorization은 인증된 주체에게 작업을 허용하는 것을 의미한다. 적절하지 못한 접근을 차단하기 위한 방법과 규칙을 정의하는 접근통제에서 자주 나오는 개념이다. 접근통제는 식별, 인증, 인가 이렇게 3단계로 구성되어 있다. 정보보안 개념에서 살펴보자면,

단계 설명 접근 매체
식별 - 본인이 누구라는 것을 시스템에 밝히는 것
- 인증 서비스에 스스로를 확인시키기 위하여 정보를 공급하는 주체의 활동
- 식별자는 각 개인의 신원을 나타내기에 사용자 책임추적성 분석에 중요한 자료
- 사용자 이름
- 계정명, 계정 번호
인증 - 자신이 누구인지 증명하는 것
- 주체의 신원을 검증하기 위한 사용 증명(verify or prove) 활동
- 본인임을 주장하는 사용자가 진짜 그 사람이 맞다는 걸 시스템이 인정해주는 것
- 암호, PIN 번호
- 생체인증
- 토큰이나 스마트 카드 등
인가 - 인증된 주체에게 작업을 허용하는 것
- 인증된 주체에게 접근을 허용하고 특정 업무를 수행할 권리를 부여하는 과정
- 알 필요성과 관련. 주체에게 어떤 정보가 유용할지 여부와 관계 있는 공인된 형식상의 접근수준
- 접근제어목록(ACL)
- 보안 등급

🤓 (기타) HTTP의 발전사
HTTP는 초창기 HTTP/0.9를 시작으로 1.0, 1.1, 2.0을 거쳐 3.0까지 발전했다. 간단하게 공부하자면,
(HTTP/0.9) GET 메서드만 사용 가능
(HTTP/1.0) HEAD/POST 같은 다른 메서드 도입 + 헤더 지원하나, HTTP 메시지 주고받을 때마다 연결 수립 종료 반복
(HTTP/1.1) 지속 연결 공식 지원
(HTTP/2.0) 헤더 압축 및 바이너리 데이터 기반 메시지 송수신(이전에는 텍스트 기반), 서버 푸시 기능 제공 및 멀티플렉싱 기법을 활용해 HOL 블로킹 문제 완화함. 멀티플렉싱은 여러 스트림을 이용해 병렬적으로 메시지를 주고받는 기술을 의미함.
(HTTP/3.0) UDP를 기반으로 하는 QUIC 프로토콜을 활용하여 동작, 속도 개선(이전 버전은 모두 TCP 사용)

HTTP 헤더와 기반 기술(캐시, 쿠키, 콘텐츠 협상)

# 요청에 활용하는 HTTP 헤더

1) Host
요청을 보낼 호스트를 나타내는 헤더로 주로 도메인 네임으로 명시됨
2) User-Agent
웹 브라우저와 같이 HTTP 요청을 시작하는 클라이언트 측의 프로그램을 의미
웹 브라우저의 Mozilla 호환 여부, 운영체제 및 아키텍처 정보, 렌더링 엔진 관련 정보, 브라우저와 버전 정보 등이 들어감
3) Referer
클라이언트가 요청을 보낼 때 머무르고 있던 URL이 명시됨
4) Authorization
클라이언트의 인증 정보를 담는 헤더. 인증 타입과 인증을 위한 정보credentials를 차례로 명시함
더보기

예전에 공부할 때부터 웹 브라우저의 Mozilla 호환 여부가 뭔지 좀 궁금했는데, 공부하다 보니 또 나왔길래 챗지피티한테 물어봤다.

아래는 지피티가 답변해준 내용이다. 요약하자면 초기 웹 브라우저들끼리 호환하기 위해 쓰이던 문구였는데 관습적으로 이어져 내려와 지금은 "현대적인 웹 표준을 잘 지원한다"는 의미로 쓰인다 정도?

# 응답에 활용하는 HTTP 헤더

1) Server
요청을 처리하는 서버 측 소프트웨어와 관련된 정보를 명시
2) Allow
클라이언트에게 허용된 HTTP 메서드 목록을 알려주기 위해 사용됨. 상태코드 405 Method Not Allowed와 함께 사용됨
3) Retry-After
자원을 사용할 수 있는 날짜 또는 시각을 나타냄. 상태코드 503 Service Unavailable과 함께 사용됨 
4) Location
클라이언트에게 자원의 위치를 알려주기 위해 사용되는 헤더. 주로 리다이렉션 발생이나 새로운 자원 생성 시 사용됨
5) WWW-Authenticate
자원에 접근하기 위한 인증 방식을 설명하는 헤더. 상태코드 401 Unauthorized와 함께 사용됨

# 요청과 응답에 모두 활용하는 HTTP 헤더

1) Date
메시지가 생성된 날짜와 시각에 관련된 정보를 담은 헤더
2) Connection
클라이언트의 요청과 응답 간 연결 방식을 설정하는 헤더. keep-alive, close가 가장 대표적으로 사용되는 값
3) Content-Length
본문의 바이트 단위 크기(길이)
4) Content-Type, Content-Language, Content-Encoding 
전송하려는 메시지 본문의 표현 방식을 설명하는 헤더로 표현 헤더라고도 부름
순서대로 본문에 사용된 미디어 타입, 자연어, 그리고 본문을 압축하거나 변환한 방식을 명시함

# 캐시

불필요한 대역폭 낭비와 응답 지연 방지를 위해 정보의 사본을 임시로 저장하는 기술이자, 이렇게 저장된 데이터 자체를 의미한다.
캐시는 웹 브라우저에 저장(개인 전용 캐시)되거나, 클라이언트와 서버 사이에 위치한 중간 서버(공용 캐시)에 저장되기도 한다.
캐시는 사본 데이터이기 때문에, 최신 원본 데이터와 얼마나 유사한지를 확인하는 캐시 신선도cache freshness라는 개념을 사용한다.
캐시 신선도를 유지하는 가장 기본적인 방법은 캐시된 데이터에 유효 기간을 설정하는 것이다. 기간이 만료되었다면 원본 데이터를 다시 요청해야 하니 캐시 신선도를 유지할 수 있게 된다.
유효기간이 만료된 캐시의 신선도를 재검사하는 방법에는 1) 날짜를 기반으로 서버에게 물어보는 If-Modified-Since 헤더 방식과 2) 엔티티 태그(자원의 버전 식별 정보)를 기반으로 서버에게 물어보는 If-None-match 헤더 방식이 있다.

# 쿠키

서버에서 생성되어 클라이언트 측에 저장되는 데이터로, 상태를 유지하지 않는 HTTP의 특성을 보완하기 위한 수단이다.
쿠키는 기본적으로 <이름, 값> 쌍의 형태를 띠고 있고, 필요시 적용 범위와 만료 기간과 같은 다양한 속성을 추가할 수 있다.
서버는 쿠키를 생성해 클라이언트에게 전송하고, 클라이언트는 추후 동일한 서버에 보내는 요청 메시지에 이 쿠키를 포함하여 전송한다. 서버는 쿠키 정보를 참고해 두 개의 요청이 같은 클라이언트에서 온 것인지(세션 인증), 로그인 상태를 유지하고 있는지 등을 알 수 있게 된다.

쿠키는 정보가 쉽게 노출되거나 조작될 수 있어 보안 위험이 있다. 이를 보완하기 위해 Secure와 HttpOnly라는 속성이 있다. Secure는 HTTPS 프로토콜이 사용되는 경우에만 쿠키가 전송되도록 하는 속성이고, HttpOnly는 HTTP 송수신을 통해서만 쿠키를 이용하도록 제한하는 속성이다. 악의적인 방식으로 쿠키를 중간에 가로채거나 위변조 할 위험이 있어, 이런 상황을 방지하기 위해 자바스크립트와 같이 다른 방식으로는 쿠키에 접근하지 못하게 하는 속성이다.

# 콘텐츠 협상과 표현

같은 URI에 대해 가장 적합한 자원의 형태를 제공하는 메커니즘을 의미한다. 같은 URI로 식별 가능한 HTML 문서라 해도, 영어로 요청하는지 한국어로 요청하는지에 따라 알맞은 형태로 제공해 주는 것이다. 지역이나 언어 설정에 따라 구글과 같은 사이트들이 다른 페이지를 보여주는 이유기도 하다. 이때 송수신 가능한 자원의 형태를 자원의 표현representation이라고 한다. 그래서 콘텐츠 협상은 클라이언트에게 가장 적합한 자원의 표현을 제공하는 메커니즘을 뜻한다.


📚 혼공단 기본 숙제

# (p271) 확인문제 1번 "도메인 네임과 네임 서버에 대한 설명으로 옳지 않은 것을 골라 보세요"
>> 답은 4번이다.  www.example.com에서  루트 도메인은 com이 아니라 가장 마지막에 생략된 점(.)에 해당한다.

# (p307) 확인문제 2번 "HTTP 상태 코드에 대한 설명으로 옳지 않은 것을 골라 보세요"
>> 답은 1번이다. 300번대 상태 코드는 리다이렉션에 관련된 코드이다.
      요청한 자원이 존재하지 않는, 자원을 찾을 수 없다는 응답은 404 Not Found에 더 가깝다.

📚 혼공단 추가 숙제 : HTTP 요청 메시지 확인해 보기

한빛미디어 사이트 중 하나에 들어가 보았다. 왼쪽 그림을 통해 css, js 등 페이지 접근 과정에서 주고받은 자원들의 목록이 쭉 나오는 걸 볼 수 있다. 그중 하나를 열어 더 자세히 들어가 보자. 헤더 부분을 클릭했더니 간단한 요약과 요청/응답헤더 내용을 보여준다. 아까 배운 상태 코드가 200 OK로 나오는 것도 볼 수 있고, GET 메서드를 사용해 요청한 것도 볼 수 있다. 이런 식으로 웹이 어떻게 동작하는지 살펴보는 건 사이트에 에러가 났을 때 원인 찾기에도 도움이 된다. 오래간만에 보니까 재밌고 좋네,,,

이렇게 해서 미리 하는 5주 차 예습도 마치겠읍니다.
사실 DNS며 쿠키며 개념들 다 들어는 본거잔아요.
대학 다니며 공부했는데 기억은 사라지고 단어 껍데기만 남아버렸을 뿐...
그래서 자세히 뜯어보면 사실은 모른다에 가까운 개념들을 복습도 하고
또 미처 몰랐던 세세한 부분까지 알게 된 것 같아 뿌듯하내요^^7

반응형
반응형

연휴 잘 보내셨나요?
혼공단 방학인 김에 다른 공부들 더 하려고 했는데요
역시 개같이 실패^^하고 2월이 되었읍니다
지난달에 혼공단이라도 해서 다행이지 뭐예요
아니었음 아무것도 못 이룬 사람 될 뻔
하지만 벌써 혼공단 절반이나 잘 마친 사람이 되었다
(혼공단 짱 자주 해조요)
아무튼 다시 돌아온 혼자 공부하는 네트워크 4주 차에 할 일은요
네 번째 챕터인 전송 계층을 공부하고

<목차>
Chapter 1. 컴퓨터 네트워크 시작하기
Chapter 2. 물리 계층과 데이터 링크 계층
Chapter 3. 네트워크 계층
Chapter 4. 전송 계층
Chapter 5. 응용 계층
Chapter 6. 실습으로 복습하는 네트워크
Chapter 7. 네트워크 심화

혼공단 숙제로 작업 관리자에서 프로세스별 PID 확인해 보는 거라죠

지난 내용 복습하기

저번에도 말했지만 제가 혼공단을 하는 목적은 뇌에 뭐라도 남기기입니다
본격적인 전송 계층 공부에 앞서 네트워크 계층까지 복습부터 해볼게요

계층명지난 주 핵심다 합쳐서 복습하기
네트워크인터넷 프로토콜 IP
IP 주소(IPv4, IPv6)
ARP(IP to MAC)
네트워크 클래스
NAT(공인/사설IP)
DHCP(IP 동적할당)
라우팅 프로토콜
(내부 RIP&OSPF,
외부 BGP)
- 메시지를 다른 네트워크에 속한 수신지까지 전달하는 계층 = 네트워크 간 통신 계층
- IP는 데이터그램 기반 비신뢰성, 비연결성 서비스로, IP 단편화(패킷의 분해 및 조립), IP 주소 지정, 경로 선택 기능을 가짐
- 개방 시스템 들 간 네트워크 연결 설정/유지/관리 기능, 데이터의 교환/중계 기능, 경로 제어, 패킷 교환, 트래픽 제어 등의 기능을 수행함
- 전송 단위는 패킷
- 장비로는 라우터
- 관련 프로토콜로는 IP, ICMP, IGMP, ARP, RARP 등

- IPv4는 4바이트(32비트)+10진수 표현, 클래스 단위로 비순차적으로 할당함. 보안 기능이 없으며, 패킷 크기에 제한(64바이트)이 있음. 유니캐스트/브로드캐스트/멀티캐스트 방식을 사용함 
- IPv6는 16바이트(128비트)+16진수 표현, 네트워크/단말 순서로 순차적으로 할당함. 확장 헤더를 사용해 인증/보안 기능을 포함하며, 패킷 크기에 제한이 없음. 유니캐스트/멀티캐스트/애니캐스트 방식을 사용함

- 하나의 IP 주소는 네트워크 주소와 호스트 주소로 구성된
- (클래스 풀 주소 체계) 네트워크 크기에 따라 IP 주소를 분류하는 걸 클래스라 함. 클래스는 A~E까지 5개 존재. 클래스 풀 주소는 네트워크 크기가 고정이라는 한계가 존재함
- (클래스리스 주소 체계) 네트워크 주소는 1로, 호스트 주소는 0으로 표기하여 임의로 나누는 방식을 서브넷 마스크라 함. IP 주소와 서브넷 마스크를 비트 AND 연산하면 네트워크 주소가 나온다. 서브넷 마스크는 10진수로 표기하거나, IP 주소/서브넷 마스크 상 1의 개수 형식으로 표현하는 CIDR 표기법을 사용함

- ARP 프로토콜은 "동일 네트워크 내에서" IP 주소를 통해 MAC 주소를 알아내는 과정. ARP 요청(브로드캐스트) > ARP 응답(유니캐스트) > ARP 테이블 갱신 순으로 동작한다.
- NAT는 공인 IP와 사설 IP를 상호 변환해주는 기술
- DHCP는 네트워크 안의 호스트들에게 IP와 DNS 서버, 서브넷 마스크 주소를 동적으로 할당하는 프로토콜. DHCP 할당은 DISCOVER, OFFER, REQUEST, ACK 4단계로 구성됨(모두 브로드캐스트). 

- 라우팅 프로토콜은 라우터끼리 자신들의 정보를 교환하며 패킷이 이동할 최적의 경로를 찾고자 사용. AS 내부에서 수행되면 IGP로 RIP와 OSPF가 있고, 외부에서 수행되면 EGP로 BGP가 있음
- IGP는 거리 벡터를 사용하는 RIP와 링크 상태를 사용하는 OSPF/IS-IS로 나뉨
데이터 링크NIC
스위치
(전이중 통신+VLAN)
- 네트워크 내 주변장치 간 정보를 올바르게 주고받기 위한 계층
- MAC 주소 체계를 통해 네트워크 내 송수신지를 특정
- 물리적으로 연결된 인접한 개방 시스템들 간 신뢰/효율적 정보 전송을 위해 시스템 간 연결 설정과 유지 및 종료 담당
- 오류 검출 및 회복을 위한 오류 제어, 송수신측 속도 차이 해결을 위한 흐름 제어, 프레임 순서적 전송을 위한 순서 제어 기능을 가짐
- 전송 단위인 프레임에 물리적 주소를 부여함
- 장비로는 랜카드, 브리지, 스위치 등
- 관련 프로토콜로는 HDLC, LAPB, LLC, MAC, LAPD, PPP, 이더넷 등

- 스위치는 전이중 통신을 한다. MAC 주소 학습과 테이블을 이용해, 특정 MAC 주소를 가진 호스트에만 프레임을 전달할 수 있다. MAC 주소 학습은 플러딩, 포워딩과 필터링, 에이징을 통해 이루어진다.
- 스위치는 또한 가상의 LAN을 만드는 VLAN 기능을 지원한다. 
물리트위스티드 페어 케이블
광섬유 케이블
허브(반이중 통신+CSMA/CD)
- OSI 모델 최하단 계층
- 0과 1로 표현되는 비트 신호를 주고 받음 (전송단위가 Bit)
통신 케이블로 데이터를 전송하는 물리적 장비에 필요한 기계/전기/기능/절차적 특성에 대한 규칙을 정의
- 장비로는 통신 케이블, 리피터, 허브 등
- 관련 프로토콜로는 RS-232C, X.21 등

- 허브는 반이중 통신을 해서 무전기처럼 송수신을 번갈아 가면서 한다.
다른 호스트가 기다리지 않고 신호를 보낼시 충돌 위험이 있는데 이를 방지하는 프로토콜이 CSMA/CD이다. Carrier Sense(캐리어를 감지하고) Multiple Access(다중 접근시에) Collision Detection(충돌을 검출)한다.

이것 뭐예요...? 정리하고 보니 3주 차 네트워크 계층에서 공부한 게 엄청 많네?
네트워크 계층의 가장 큰 특징이자 한계는 신뢰할 수 없는 비신뢰성이자 비연결형 프로토콜이라는 점인데요. IP 프로토콜은 패킷을 전달할 때, 패킷이 수신지까지 제대로 전송되었다는 보장을 해주지 않기 때문이에요. 다른 말로 최선형 전달 best effort delivery 라고도 한다는데요. 최선을 다해 전송은 해보겠지만, 그 결과는 보장하지 못한다는 의미래요. 약간 역설적인데,,,
또한, 송수신 호스트 간에 사전에 연결 작업을 하지 않아요. 성능이 더 중요하기에 수신지를 향해 패킷을 전송만 합니다.

연결형 통신 + 신뢰성 있는 통신 = 전송 계층 

이 두 한계를 보완하는 계층이 오늘 배우게 될 전송 계층이에요. 전송 계층에는 가상의 회선을 설정하듯 연결을 수립하고, 송수신하는 동안에는 계속 유지하는 연결형 프로토콜인 TCP가 있어요. 그리고 패킷이 수신지까지 올바른 순서대로 확실히 전달되는 것을 보장하고자, 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어와 같은 기능도 제공합니다. 또한, 성능이 더 중요한 경우를 지원하고자 비연결형 통신 프로토콜인 UDP도 있어요.
여기에 더해 상위 계층인 응용 계층과의 연결 다리 역할을 하기도 한다고 하는데요. 실행 중인 특정 애플리케이션까지 패킷이 전달되기 위해서는 패킷에 특정 어플리케이션을 식별할 수 있는 정보가 있어야 해요. 이를 포트라 하는데요, 전송 계층에서는 패킷 내의 송/수신지 포트 번호를 통해 송/수신지 호스트의 어플리케이션을 식별합니다.

# 포트 port

포트 번호는 16비트로 표현 가능하며, 사용가능한 포트의 수는 2^16 = 65,536개이다.
즉, 할당 가능한 포트 번호는 0번부터 65,535번까지이다. 포트 번호는 번호 범위에 따라 세 종류로 나눈다.

포트 종류포트 번호 범위잘 알려진 포트 번호들
잘 알려진 포트
well known or system port
0-102320/21(FTP), 22(SSH), 23(TELNET), 25(SMTP), 53(DNS), 67/68(DHCP S/C), 80(HTTP), 443(HTTPS)
등록된 포트
registered port
1024-491511433(MS SQL 서버DB), 3306(MySQL DB), 6379(Redis), 8080(HTTPS 대체)
동적 or 사설 포트
dynamic or private port
49152-65535주로 클라이언트에서 동작하는 프로그램들

잘 알려진 포트와 등록된 포트는 인터넷 할당 번호 관리 기관(IANA)에서 할당하고 관리한다. 자세한 목록을 보고 싶다면 IANA 홈페이지에서 확인 가능하다. 하지만 여기의 포트 번호는 권고일 뿐 강제는 아니다.

IP 주소와 포트 번호가 함께 제공되면, 특정 호스트에서 실행 중인 특정 어플리케이션 프로세스를 식별할 수 있게 된다.
그래서 포트 번호는 IP 주소:포트 번호 형식으로 사용되는 경우가 많다.

IP 주소:포트 번호
호스트 식별 어플리케이션 프로세스 식별

# 포트 기반 NAT, NAPT

NAT는 IP 주소를 변환하는 기술로, 주로 네트워크 내부의 사설 IP 주소와 네트워크 외부의 공인 IP 주소를 변환하는 데 사용된다. 하지만 만약 1:1로 매핑해서 사용한다면, 공인 IP 주소 수가 부족하여 수없이 많은 사설 주소를 모두 변환해서 사용하기가 어렵다. 그래서 요즘의 NAT 기술은 변환하고자 하는 다수의 사설 IP 주소를 그보다 적은 수의 공인 IP 주소로 변환할 수 있게 하는데, 이때 포트를 활용한다.
포트 기반의 NAT를 NAPT(Network Address Port Translation)이라 한다. NAPT는 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하는 NAT의 일종이다. NAT 테이블에 변환할 IP 주소 쌍과 함께 포트 번호를 기록하고, 변환 시에 참고하는 방법이다. 포트 번호를 통해 네트워크 내부 호스트를 특정할 수 있기에, 다수의 사설 IP 주소를 그보다 적은 수의 공인 IP 주소로 변환할 수 있게 된다. N:1로 매핑할 수 있어 공인 IP 주소 수 부족 문제를 개선하는 것이다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

# 추가 학습 from 네트워크 계층, ICMP

추가 학습 내용으로 IP의 비신뢰성/비연결성 전송 특성을 보완하기 위한 네트워크 계층의 프로토콜을 알아보자
전송 계층의 내용은 아니라 헷갈림 방지를 위해, 오늘도 접어두기 기능을 적극 활용합니다^^

더보기

💡 ICMP(Internet Control Message Protocol)
- IP 패킷의 전송 과정에 대한 피드백 메시지를 얻기 위해 사용하는 프로토콜
- 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류 처리와 전송 경로의 변경 및 파악을 위한 프로토콜임
- IP 데이터그램을 사용하지만, 메시지는 TCP/IP 소프트웨어에 의해 처리되는 특징을 가짐


- ICMP 메시지 종류로는 크게
  1) (오류 보고) 전송 과정에서 발생한 문제 상황에 대한 오류 보고
  2) (질       의) 네트워크에 대한 진단 정보 = 네트워크상의 정보 제공
- ICMP 메시지는 ICMP 패킷 헤더에 포함되어 있는 타입과 코드 정보로 정의한다.
   ICMP 패킷 헤더의 타입 필드에는 ICMP 메시지의 유형을 번호로, 코드 필드에는 구체적인 메시지 내용을 번호로 명시한다.

[ICMP 오류 보고 메시지의 특징]
- 어떠한 ICMP 오류 메시지도 ICMP 오류를 운반하는 데이터그램의 응답으로 생성되지 않음
- 어떠한 ICMP 오류 메시지도 처음 단편이 아닌 단편 데이터그램을 위해 생성되지 않음
- 어떠한 ICMP 오류 메시지도 멀티캐스트 주소를 가진 데이터그램을 위해 생성되지 않음
- 어떠한 ICMP 오류 메시지도 127.0.0.0, 0.0.0.0과 같이 특수 주소를 가진 데이터그램을 위해 생성되지 않음

[ICMP 오류 보고 메시지 종류]
- (Type 3) 목적지 도달 불가, Destination Unreachable
   데이터그램이 최종 목적지에 왜 도착하지 못했는지에 대한 오류를 정의, 0~15까지의 다른 코드를 사용함
   (코드 0) 네트워크 도달 불가, (코드 1) 호스트 도달 불가, (코드 2) 프로토콜 도달 불가, (코드 3) 포트 도달 불가, (코드 4) 단편화가 필요하나 DF가 1이라 단편화 불가
- (Type 4) 근원지 억제, Source Quench
   네트워크 충돌이 발생해서 데이터그램이 폐기되었음을 송신자에게 알림. 메시지를 받은 송신자(근원지)는 데이터그램 송신 과정을 천천히 억제하여 수행한다. 이를 통해 IP 프로토콜에 혼잡제어 메커니즘을 추가하는 셈
- (Type 5) 재지정 메시지, Redirection
   발신자가 메시지 전송에 잘못된 라우터를 사용할 때 이용됨. 라우터는 발신자에게 향후 디폴트 라우터로 변경하라고 알리는 메시지를 보낸다. 그래서 메시지 안에 디폴트 라우터의 IP 주소가 포함됨
- (Type 11) 시간 경과, Time Exceeded
   타임아웃 발생으로 IP 패킷이 폐기되었음을 알림. 타임아웃 사유는 코드를 통해 확인함
   (코드 0) TTL 만료. 최종 목적지 도달 전에 TTL값이 0이 되어 폐기됨
   (코드 1) 패킷 재조합 타임 만료. 보통 IP 데이터그램 일부 단편이 전송과정에서 손실되어 재조합에 실패할 시 발생. 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알림
- (Type 12) 매개변수 문제, Prameter Problem
   (코드 0) 데이터그램의 헤더에 문제, (코드 1) 어떤 옵션에 문제(옵션 없음/의미 파악 불가 등)가 있을 때 사용

[ICMP 질의 메시지 종류]
인터넷에서 호스트/라우터가 활성화되었는지, 두 장치 사이 IP 데이터그램이 단/양방향인지 확인할 때 주로 사용함
- (Type 8) 에코 요청, Echo Request
- (Type 0) 에코 요청 응답, Echo Reply
- (Type 9) 라우터 광고
   라우터가 호스트에게 자신을 알릴 때 사용

* ping은 네트워크 상태를 진단하는 가장 기본적인 명령어로, ICMP 에코 요청과 에코 응답 메시지를 기반으로 구현됨
  그 외에도 traceroute/tracert도 ICMP 메시지를 기반으로 동작함. 참고하시라~

전송 계층 프로토콜, TCP와 UDP

# TCP 통신 단계와 세그먼트 구조

TCP는 데이터를 송수신하기 전에 연결을 수립하고, 통신이 끝나면 연결을 종료한다.
그리고 데이터 송수신 과정에서 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공한다.

1단계 2단계 3단계
연결 수립>>>데이터 송수신
(재전송을 통한 오류/흐름/혼잡 제어)
>>>연결 종료

MSS(Max Segment Size)는 TCP로 전송할 수 있는 최대 페이로드 크기를 의미한다.
MSS 크기 고려 시 TCP 헤더의 크기는 제외한다. 간단하게 그려보자면 아래와 같은 느낌이다.

 IP MTU (헤더 포함) 
이더넷 헤더IP 헤더TCP 헤더페이로드FCS
   TCP MSS 

계속해서 TCP 세그먼트 구조를 살펴보고자 한다. 간단하게 그려보면 아래와 같은데,

0 4 8 12 16     32
송신지 포트 수신지 포트
순서 번호(SEQ NUM)
확인 응답 번호 (ACK NUM)
데이터 오프셋 예약 제어 or 플래그 비트
CWR ECE URG ACK PSH RST SYN FIN
윈도우
체크섬 긴급 포인터
옵션

- 송/수신지 포트 : 송/수신지 애플리케이션을 식별하는 포트 번호가 기재된 필드
- 순서 번호 : 송수신되는 세그먼트의 올바른 순서 보장을 위해 세그먼트 데이터의 첫 바이트에 부여되는 번호
- 확인 응답 번호 : 상대 호스트가 보낸 세그먼트에 대한 응답. 다음으로 수신하기를 기대하는 순서 번호를 명시함
- 제어 or 플래그 비트 : 현재 세그먼트에 대한 부가정보를 나타냄. 기본적으로 8비트로 구성. 각 자리의 비트는 각기 다른 의미를 가짐
   >> ACK : 세그먼트 승인을 나타내는 비트
   >> SYN : 연결을 수립하기 위한 비트
   >> FIN : 연결을 종료하기 위한 비트
- 윈도우 : 한 번에 수신하고자 하는 데이터의 양을 나타내는 수신 윈도우의 크기를 명시
🧐 순서 번호와 확인 응답 번호에 대해 조금 더 알아보자
만약 전송할 데이터가 1900바이트이고, MSS가 500바이트라고 가정한다면, 이 데이터는 4개의 세그먼트로 나눌 수 있다.
처음 통신을 위해 연결을 수립했다면(제어비트 SYN 플래그가 1이라면), 순서 번호는 무작위값이 된다. 이를 초기 순서 번호(ISN)이라 한다.
연결 수립 이후 데이터를 송신하는 동안 순서 번호는 송신한 바이트를 더해가는 누적 형태가 된다.
즉, 순서 번호는 초기 순서 번호 + 송신한 바이트 수가 되는 셈이다.
만일 초기 순서 번호가 100이라면, 이후 세그먼트들의 순서 번호는 초기 순서번호 +500, +1000, +1500 순으로 증가하게 된다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

확인 응답 번호는 순서 번호에 대한 응답이다. "다음에는 이거 보내조요 or 다음에 받아야 하는 애는 이거임 내놔"하고 알려주는 값이다.
즉, 수신자가 다음에 받기를 기대하는 순서 번호로, 일반적으로 수신한 순서번호 +1로 설정한다.
확인 응답 번호 값을 보낼 때는 제어비트 ACK 플래그 값을 1로 설정하고, 확인 응답 번호에 수신한 순서 번호+1을 설정하면 된다.

# TCP 연결 수립 : 3 웨이 핸드셰이크

TCP의 연결 수립은 3개 단계로 이루어진다. 우선 그림으로 살펴보면 이렇다.

출처 : 도서 용어노트에 추가 필기함

그림만으로는 이해가 안 가니까 단계별로 추가적인 설명을 해보면,

단계TCP 상태송수신 방향세그먼트세그먼트 주요 정보비유
CLOSED / LISTEN : 연결이 수립되지 않은 상태
1단계
액티브 오픈
SYN-SENTA >> BSYN- 호스트 A의 초기 순서 번호
- 1로 설정된 SYN 비트
우리 연결하자
2단계
패시브 오픈
SYN-RECEIVEDB >> ASYN+ACK- 호스트 B의 초기 순서 번호
- 호스트 A 전송 세그먼트에 대한 확인 응답 번호
- 1로 설정된 SYN 비트와 ACK 비트
ㅇㅇ 확인함
연결하자 ㄱㄱ
3단계
연결 확립
ESTABLISHEDA >> BACK- 호스트 A의 다음 순서 번호
- 호스트 B 전송 세그먼트에 대한 확인 응답 번호
- 1로 설정된 ACK 비트
ㅇㅇ 확인함

이렇게 연결이 되고 나면, 필요한 만큼 데이터 송수신을 하면 된다죠.

중요한 개념이라 잘 알아둬야 함... 왜냐?
언제나 그렇듯 시험에 자주 나와요^ㅁ^
이런 식으로...

출처 : 한국은행 전공학술 기출 예시문제

이제 이 문제를 풀 수 있다.
TCP 3-way handshake니까 TCP 연결 수립이다.
HOST B가 패시브 오픈이니까 SYN에 대한 응답으로 ACK =24(23+1)을 보내고,
자신의 SYN 패킷에는 초기 순서 번호로 20(21-1)을 담아 보내면 된다.
일반적으로 수신한 번호+1을 보내기 때문!  
SYN Flooding 공격은... 너무 길어지니까 나중에 공부하자(빈 말)

# TCP 연결 종료 : 4 웨이 핸드셰이크
데이터 송수신이 끝났다면 연결을 종료해야 한다죠. TCP가 연결을 종료하는 과정은 송수신 호스트가 각자 한 번씩 FIN과 ACK를 주고받으면 된다. 그림으로 또 살펴보자면,

출처 : 도서 용어노트에 추가 필기함

이번에도 그림만으로는 이해가 안 가니까 단계별로 추가적인 설명을 해보면,

단계TCP 상태송수신 방향세그먼트세그먼트 주요 정보비유
ESTABLISHED : 열심히 데이터 송수신하는 상태
1단계
액티브 클로즈
FIN-WAIT-1A >> BFIN- 1로 설정된 FIN 비트우리 연결끊자
2단계
패시브 클로즈
CLOSE-WAITB >> AACK- 호스트 A 전송 세그먼트에 대한 확인 응답 번호
- 1로 설정된 ACK 비트
ㅇㅇ 확인함
 FIN-WAIT-2--상대의 FIN 세그먼트를 기다리는 중-
3단계
연결 끊기
LAST-ACKB >> AFIN- 1로 설정된 FIN 비트이제 연결끊어
4단계
확인
TIME-WAITA >> BACK- 호스트 B 전송 세그먼트에 대한 확인 응답 번호
- 1로 설정된 ACK 비트
ㅇㅇ 확인함
B(서버)는 마지막 ACK 패킷을 수신하면 바로 CLOSED로 바뀐다.
하지만 A(클라이언트)는 마지막 ACK 세그먼트가 올바르게 전송되지 않을 가능성을 고려하여
일정 시간 기다리는 TIME-WAIT 상태를 가진 후에 CLOSED로 접어든다.

CLOSED : 두 호스트 모두 연결을 종료한 상태

이러면 제대로 연결 종료된 거다. FIN-ACK을 서로 한 번씩 주고받고, 잠시 대기했다가 샤따 내리기 정도로 기억하면 된다죠.
여기서 잠깐! 연결 확립과 연결 종료 모두 TCP 상태라는 개념이 새롭게 등장한다. TCP는 연결형/신뢰형 통신을 위해 다양한 상태를 유지한다. 상태는 현재 어떤 통신 과정에 있는지를 나타내는 정보다. 그래서 TCP를 스테이트풀 stateful 프로토콜이라고도 한다.
TCP의 상태는 크게 3가지로 나뉜다. 1) 연결이 수립되지 않은 상태, 2) 연결 수립 과정에서 주로 확인할 수 있는 상태, 3) 연결 종료 과정에서 주로 확인할 수 있는 상태라죠. 각 상태와 의미하는 바를 정리해 보자면,

상태 분류상태명설명
연결 수립 XCLOSED아무 연결이 없는 상태
LISTEN일종의 연결 대기 상태 보통 서버로 동작하는 패시브 오픈 호스트는 이 상태를 유지함
연결 수립 중SYN-SENT액티브 오픈 호스트가 SYN 세그먼트를 보내고, 그에 대한 응답으로 SYN+ACK 세그먼트를 기다리는 상태 = 연결 요청 후 대기하는 상태
SYN-RECEIVED패시브 오픈 호스트가 SYN+ACK 세그먼트를 보내고, 그에 대한 응답으로 ACK를 기다리는 상태
ESTABLISHED연결이 확립되었음을 나타내는 상태 = 데이터 송수신 가능한 상태
연결 종료 중FIN-WAIT-1일반적인 TCP 연결 종료의 첫 단계. FIN 세그먼트로 연결 종료 요청을 보낸 후 액티브 클로즈 호스트의 상태 
CLOSE-WAITFIN 세그먼트의 응답으로 ACK 세그먼트를 보내고, 패시브 클로즈 호스트가 대기하는 상태
FIN-WAIT-2FIN-WAIT-1 상태에서 ACK를 받으면 FIN-WAIT-2로 상태가 변경됨. 상대의 FIN 세그먼트를 기다리는 상태
LAST-ACKCLOSE-WAIT 상태에서 FIN 세그먼트를 보내고, 이에 대한 ACK 세그먼트를 기다리는 상태
TIME-WAITFIN 세그먼트를 수신한 액티브 클로즈 호스트가 ACK를 전송한 후의 상태. 일정시간 기다린 후에 CLOSED로 바뀐다 
CLOSING보통 동시에 연결을 종료하고자 할 때 전이되는 상태. 서로가 FIN을 보내고 받은 뒤에 ACK를 보냈지만, 아직 자신의 FIN에 대한 ACK는 받지 못했을 때 접어드는 상태이다. 이 경우 ACK를 수신한다면 각자 TIME-WAIT 상태로 들어갔다가 연결을 종료하게 된다.

# UDP : 비연결형, 비신뢰성, 스테이트리스 프로토콜

UDP는 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜이다. 상태를 유지/활용하지 않기에 스테이트리스 stateless 프로토콜이라고 하기도 한다. 보장하는 내용이 없기에, TCP에 비해 적은 오버헤드로 패킷을 빠르게 처리한다는 장점이 있다. 그래서 실시간 스트리밍 서비스, 인터넷 전화와 같이 패킷이 조금 손실되어도 무방한, 실시간성을 강조하는 상황에서 주로 사용한다. UDP 데이터그램 헤더 구조는 아래와 같다.

016 32
송신지 포트수신지 포트
길이체크섬

- 송/수신지 포트
- 길이 : 헤더를 포함한 UDP 데이터그램의 바이트
- 체크섬 : 데이터그램 전송 과정의 오류 발생 여부 검사를 위한 필드. 수신지는 이 필드 값을 토대로 정보 훼손 여부를 판별하고, 문제가 있다고 판단한 데이터그램은 폐기함
두 프로토콜도 시험에 자주 나오니까 정리하고 넘어가자면,

TCPUDP
- 연결형 서비스
- 가상 회선 방식 (하나의 회선 사용 = 1:1 통신)
- 패킷 전송 순서 보장 및 수신 여부 확인
- 송수신부간 연결 확인
- 데이터의 신뢰성 높음
- 속도 느림
- HTTP 통신, 이메일/파일 전송 등에 사용
- 오류, 흐름, 혼잡 제어 제공
- 비연결형 서비스
- 데이터그램 패킷 교환 방식(서로 다른 회선 활용)
- 패킷 순서 보장 X 및 수신 여부 확인도 X
- 데이터 신뢰성 낮음
- 속도 빠름
- 실시간 서비스
- 체크섬을 활용한 오류 검출 가능

TCP의 오류, 흐름, 혼잡 제어 기능

TCP는 자신의 신뢰성을 보장하기 위해, 재전송을 기반으로 다양한 오류를 제어하고, 흐름 제어를 통해 처리 가능한 양만큼만 데이터를 주고받으며, 혼잡 제어를 통해 네트워크 상태에 따라 전송량을 조절한다. 각각의 기능에 대해 자세히 알아보자.

# TCP 오류 제어 : 재전송 기법

TCP 세그먼트에는 오류 검출용 체크섬 필드가 있다. 하지만 이 체크섬은 수신 호스트가 수행하는 훼손 여부 체크에만 사용될 뿐이다. 송신 호스트가 세그먼트 전송 과정에 문제가 있다는 걸 인지하는데 쓰이지는 않는다. 그런데 TCP가 제 기능을 하려면,
1) 송신 호스트가 자기가 보낸 세그먼트에 문제가 있다는 걸 알아야 하고, (오류 감지)
2) 이 사실을 알게 되면 해당 세그먼트를 다시 보낼 수 있어야 한다 (재전송)
TCP는 오류를 검출/감지하고 세그먼트를 재전송해야 한다고 판단하는 상황은 크게 2가지로 나눈다.

1) 중복된 ACK 세그먼트를 수신했을 때
수신 호스트는 자신이 받은 세그먼트 순서 번호 중 일부가 누락되었다면 중복된 ACK를 보내게 된다. 중복된 ACK가 도착한다는 건, 송신 호스트가 보낸 세그먼트 중 일부가 상대에게 제대로 도착하지 않았음을 의미한다.
2) 타임 아웃이 발생했을 때
TCP 세그먼트 송신 호스트는 모두 재전송 타이머라는 값을 사용한다. 자신이 세그먼트를 전송할 때 이 타이머를 시작하게 되는데, 이 타이머의 정해진 시간이 끝날 때까지(타임아웃) ACK가 오지 않으면, 세그먼트가 상대에게 정상적으로 도착하지 않았다고 간주한다.
출처 : 혼공네트 유튜브 강의 내 장표 쌔비지

이렇게 수신 호스트가 보내온 ACK와 재전송 타이머를 토대로 문제를 인지한 TCP는 오류가 발생한 메시지를 재전송한다.
이를 ARQ(자동 재전송 요구, Automatic Repeat Request)라 한다. ARQ는 종류가 다양한데, 그중 가장 유명한 세 가지는

1) Stop-and-Wait ARQ = 정지-대기
제대로 전달했음을 확인하기 전까지는 새로운 메시지를 보내지 않음. 세그먼트 송신 후 이에 대한 ACK 세그먼트가 와야만 다음 세그먼트를 보내는, 가장 단순하고 높은 신뢰성을 보장하는 방식이다. 하지만 네트워크 이용 효율과 성능이 저하된다는 단점도 있다. 
2) Go-Back-N ARQ
파이프라이닝을 활용해 여러 세그먼트를 전송하고, 도중에 잘못 전송된 세그먼트가 있다면 해당 세그먼트부터 전부 다시 보내는 방식이다. 잘못 전송되었음을 아는 방법은, 타임아웃이 발생했거나 타임아웃 전에 세 번의 동일한 ACK가 수신되는 것이다. 후자의 상황에서 바로 세그먼트를 다시 보내는 걸 빠른 재전송이라 한다.
수신 호스트는 잘못 전송된 세그먼트 이후의 모든 세그먼트는 정상 여부에 관계없이 폐기한다. 송신 호스트에서 잘못 전송된 세그먼트부터 전부 다시 보낼 예정이기 때문이다.
이 방식에서 순서번호 n에 대한 ACK 세그먼트는 n번까지의 확인 응답에 해당한다(누적 확인 응답)
3) Selective Repeat ARQ
동일하게 파이프라이닝을 활용한다. 하지만 제대로 송수신된 세그먼트는 ACK 응답을 보내는 방식이다(개별 확인 응답)
송신 호스트는 ACK 응답이 오지 않은, 잘못 전송된 세그먼트 하나만 다시 보내면 된다.
불필요한 재전송을 피하는 대신 수신 호스트의 처리 절차가 복잡해진다. 잡음이 많은 경우에 효과적
출처 : 컴퓨터 네트워크 하향식 접근 6판 원서

# TCP 흐름 제어 : 슬라이딩 윈도우

파이프라이닝 기반의 Go-Back-N과 Selective Repeat을 활용하면 한 번에 여러 세그먼트를 보내게 된다. 그런데, 수신 호스트가 한 번에 받아서 처리할 수 있는 세그먼트 양은 한정되어 있다. 수신된 세그먼트가 애플리케이션 프로세스에 의해 읽히기 전에 임시로 저장되는 공간을 수신 버퍼라 하는데, 이 공간보다 더 많은 데이터를 보내면 버퍼가 넘쳐 처리가 불가하기 때문이다. 그래서 송신 호스트는 수신 호스트의 처리 속도를 고려하며 송수신 속도를 균일하게 유지하는, 흐름 제어를 사용해야 한다.
흐름 제어에는 슬라이딩 윈도우를 사용한다. 윈도우란 송신 호스트가 파이프라이닝해서 보낼 수 있는 최대량을 의미한다. 윈도우의 크기만큼은 ACK 응답 없이도 한 번에 전송이 가능하다. 윈도우 값은 TCP 세그먼트 내 윈도우 필드를 통해 확인 가능하다.
자세한 건 아래 그림을 보면서 이해해 보자. 만약 수신 호스트가 첫 번째 세그먼트를 올바르게 수신했다면 , ACK를 보내고 수신 윈도우를 오른쪽으로 한 칸 이동한다. ACK를 받은 송신 호스트도 송신 윈도우를 오른쪽으로 한 칸 이동한다. 이렇게 계속 오른쪽으로 미끄러지듯 움직이면서 흐름을 제어해서 슬라이딩 윈도우라고 부른다죠.

출처 : 혼공네트 유튜브 강의 내 장표 쌔비지하고 추가 필기

# TCP 혼잡 제어 : 혼잡 윈도우와 AIMD - 느린 시작, 혼잡 회피, 빠른 회복 

혼잡 congestion 이란 많은 트래픽으로 인해 패킷의 처리 속도가 느려지거나 유실될 우려가 있는 네트워크 상황을 의미한다. 송신 호스트는 네트워크 혼잡도를 판단하고 혼잡한 정도에 맞춰 유동적으로 전송량을 조절하며 혼잡 제어를 수행한다.
혼잡 윈도우는 혼잡 없이 전송할 수 있을 법한 데이터의 양을 의미한다. 요 정도 양이면 혼잡 없이 전송 가능하겠지?! 라고 예측할 때, 요 정도에 해당하는 양을 말한다죠. 혼잡 윈도우가 크면 한 번에 전송할 수 있는 세그먼트의 수가 많다는 의미다.
그런데, 혼잡 윈도우의 크기는 언제나 똑같으면 안된다. 네트워크 상황에 따라 유동적으로 바뀌기 때문. 그래서 혼잡 윈도우 크기로 어느 정도가 적당할지 결정해야 하는데, 이때 사용하는 방법을 혼잡 제어 알고리즘이라 한다.

# 가장 기본적인 혼잡 제어 알고리즘 AIMD

AIMD는 Additive Increase/Multiplicative Decrease 의 약자로, "합으로 증가, 곱으로 감소"라는 의미를 가지고 있다.
혼잡이 감지되지 않을 때는 혼잡 윈도우를 RTT*마다 1씩 선형적으로 증가시키고,
혼잡이 감지된다면 혼잡 윈도우를 절반으로 뚝 떨어뜨리는 동작을 반복하는 알고리즘이다.
그래서 혼잡 윈도우가 톱니 모양으로 변화한다는 특징을 가진다.
초기 전송 속도가 느리다는 단점이 있으나, 시간이 지나면 여러 송신 측이 네트워크 대역폭을 공평하게 사용할 수 있다.
하지만 AIMD 하나로는 혼잡 제어가 어렵기에, 추가적으로 느린 시작, 혼잡 회피, 빠른 회복이라는 세 알고리즘을 같이 사용한다.

1) 느린 시작 Slow start
혼잡 윈도우를 1부터 시작해 문제없이 수신된 세그먼트 하나당 1씩 증가시키는 방법으로, 혼잡 윈도우는 RTT마다 2배씩 지수 증가한다. 혼잡 윈도우 크기 증가가 느린 AIMD에 비해, 초기 전송 속도를 상대적으로 빠르게 확보 가능하다는 장점이 있다.
하지만 계속 지수로 증가하면 혼잡 발생 확률이 높아지기에, 느린 시작 임계치 threshold라는 값을 정한다. 타임아웃이 발생하거나, 세 번의 중복된 ACK 세그먼트가 발생하거나, 혼잡 윈도우 값이 느린 시작 임계치 이상이 되어 혼잡이 감지된다면 각각 이렇게 대응한다.
  >> 타임아웃 발생 : 혼잡 윈도우 값을 1로, 느린 시작 임계치 값은 혼잡 감지 당시의 윈도우 값의 절반으로 초기화하고 느린 시작 재개
  >> 세 번의 중복 ACK 발생 : (빠른 재전송 후) 빠른 회복 수행
  >> 혼잡 윈도우가 느린 시작 임계치 이상 : 느린 시작 종료, 혼잡 윈도우를 절반으로 초기화하고 혼잡 회피 수행

2) 혼잡 회피 Congestion Avoidance
RTT마다 혼잡 윈도우를 1 MSS(Max segment size)씩 증가시키는 방법으로, 혼잡 윈도우가 선형 증가한다. 혼잡 회피 알고리즘에서 혼잡이 감지된다면 각각 이렇게 대응한다.
  >> 타임아웃 발생 : 혼잡 윈도우 값을 1로, 느린 시작 임계치 값은 혼잡 감지 당시의 윈도우 값의 절반으로 초기화하고 다시 느린 시작 수행
  >> 세 번의 중복 ACK 발생 : 혼잡 윈도우와 느린 시작 임계치 값을 대략 절반으로 낮추고 빠른 회복 수행

3) 빠른 회복 Fast Recovery
세 번의 중복 ACK가 발생했을 때 느린 시작은 건너뛰고 혼잡 회피를 수행하는 방법으로, 빠른 전송률 회복을 위해 사용한다.
단, 타임아웃이 발생 시 혼잡 윈도우 값을 1로, 느린 시작 임계치 값은 혼잡 감지 당시의 윈도우 값의 절반으로 초기화하고 다시 느린 시작 수행한다.

그림과 함께 보면 이런 식으로 진행된다죠

출처 : 한국은행 전공학술 기출 예시문제

💡 RTT = Round Trip Time
메시지를 전송한 뒤 그에 대한 답변을 받는 데까지 걸리는 시간을 의미
세그먼트 한 개를 전송하고, 그에 대한 ACK를 수신하는 데까지 걸리는 시간을 RTT라고 보면 된다죠

# 추가 학습:  TCP의 신뢰성 보장

관련해서 공부한 내용이 많으니까 짧게 요약해볼게요

TCP는 데이터의 신뢰성을 보장하기 위해 오류 제어, 흐름 제어, 혼잡 제어를 한다.
[오류 제어] 데이터 오류/유실 발생 시 재전송을 통해 신뢰성을 보장하려는 방식
[흐름 제어] 데이터 송수신측간 데이터 처리 속도 차이로 인한 데이터 손실을 방지하려는 방식. 수신 측이 주체
[혼잡 제어] 데이터 송신 측의 데이터 전달 속도와 네트워크의 속도 차이로 인한 데이터 손실을 방지하려는 방식. 송신 측이 주체

📚 혼공단 기본 숙제 

# (p206) 확인문제 1번 "IP와 연관된 통신 특성으로 알맞은 단어를 보기에서 골라보세요"
  >> 답은 비신뢰성과 비연결형이다. IP 프로토콜은 패킷이 수신지까지 제대로 전달되었다는 보장을 하지 않고(비신뢰), 사전 연결 작업 없이(비연결) 수신지를 향해 패킷을 보내기만 하기 때문이다.
# (p225) 확인문제 2번 "다음은 TCP 쓰리 웨이 핸드셰이크 과정을 나타내는 그림입니다. 괄호 안에 들어갈 말을 보기에서 골라보세요"
  >> 답은 ACK다. 호스트 A가 먼저 SYN을 보냈고, 이에 호스트 B가 응답하는 ACK+연결을 위한 SYN을 보냈다. 호스트 A는 B가 보낸 2번째 SYN에 ACK 세그먼트를 보내 응답해야 하는 상황이다.

📚 혼공단 추가 숙제 : 작업 관리자에서 프로세스별 PID 확인해보기 

나는 맥북이라 작업 관리자 대신 "활성 상태 보기" 메뉴에서 확인해 보았다. 내가 지금 뭐 하는 중인지가 투명하게 나오죠,,,
저는 지금 음악 프로세스(PID 495)로 노래를 들으면서, 사파리(PID 489)로 포스팅을 작성하고 있구요.
궁금한 거 생기면 물어보려고 내 칭구 ChatGPT(PID 930)를 켜놨고요, 숙제하려고 활성 상태 보기(PID 1648)도 켜뒀어요^ㅁ^

이전 회차들과 달리 포스팅을 이틀에 나눠서 했더니
뭔가 내용이 중구난방처럼 느껴진다
다음에는 일필휘지 인간인 척 그냥 하루에 정리해야지
암튼 4주 차도 성공

 

반응형
반응형

돌아온 혼공단 시간입니다.
13기 혼공네트도 벌써 3주 차예요
시간 진짜 빠르다 빨라...
나 이번 한 주 동안 뭐 했지? 하...

아무튼 혼자 공부하는 네트워크 3주 차에 할 일은요
세 번째 챕터인 네트워크 계층을 공부하고

<목차>
Chapter 1. 컴퓨터 네트워크 시작하기
Chapter 2. 물리 계층과 데이터 링크 계층
Chapter 3. 네트워크 계층
Chapter 4. 전송 계층
Chapter 5. 응용 계층
Chapter 6. 실습으로 복습하는 네트워크
Chapter 7. 네트워크 심화

혼공단 숙제로 내 컴퓨터의 IP와 MAC 주소를 알아보는 거라죠

제 혼공단의 목적은 뇌리에 뭐라도 남기기라서요
본격적으로 공부하기에 앞서 이전 계층부터 복습하고 갑니다요

계층명 지난 주 핵심 다 합쳐서 복습하기
데이터 링크 계층 NIC
스위치(전이중 통신+VLAN)
- 네트워크 내 주변장치 간 정보를 올바르게 주고받기 위한 계층
- MAC 주소 체계를 통해 네트워크 내 송수신지를 특정
- 물리적으로 연결된 인접한 개방 시스템들 간 신뢰/효율적 정보 전송을 위해 시스템 간 연결 설정과 유지 및 종료 담당
- 오류 검출 및 회복을 위한 오류 제어, 송수신측 속도 차이 해결을 위한 흐름 제어, 프레임 순서적 전송을 위한 순서 제어 기능을 가짐
- 전송 단위인 프레임에 물리적 주소를 부여함
- 장비로는 랜카드, 브리지, 스위치 
- 관련 프로토콜로는 HDLC, LAPB, LLC, MAC, LAPD, PPP, 이더넷 등

- 스위치는 전이중 통신을 한다. MAC 주소 학습과 테이블을 이용해, 특정 MAC 주소를 가진 호스트에만 프레임을 전달할 수 있다. MAC 주소 학습은 플러딩, 포워딩과 필터링, 에이징을 통해 이루어진다.
- 스위치는 또한 가상의 LAN을 만드는 VLAN 기능을 지원한다. 
물리 계층 트위스티드 페어 케이블
광섬유 케이블
허브(반이중 통신+CSMA/CD)
- OSI 모델 최하단 계층
- 0과 1로 표현되는 비트 신호를 주고 받음 (전송단위가 Bit)
- 통신 케이블로 데이터를 전송하는 물리적 장비에 필요한 기계/전기/기능/절차적 특성에 대한 규칙을 정의
- 장비로는 통신 케이블, 리피터, 허브 
- 관련 프로토콜로는 RS-232C, X.21 등

- 허브는 반이중 통신을 해서 무전기처럼 송수신을 번갈아 가면서 한다.
다른 호스트가 기다리지 않고 신호를 보낼시 충돌 위험이 있는데 이를 방지하는 프로토콜이 CSMA/CD이다. Carrier Sense(캐리어를 감지하고) Multiple Access(다중 접근시에) Collision Detection(충돌을 검출)한다.

그런데! 이 두 계층은 두 가지 한계가 있대요.
첫째, 물리 계층과 데이터링크 계층만으로는 다른 네트워크까지 도달 경로 파악하기가 어렵다. 물리와 데이터 링크 계층은 LAN을 다루는 계층이라 LAN에 속한 호스트들끼리의 통신을 도맡아 처리해요. 하지만 LAN을 넘어서는 통신이 필요하다면? 이 때는 패킷을 송수신하는 역할이 필요한데, 그건 네트워크 계층에서 해야 할 일이에요. 그렇담 다른 말로는 네트워크 계층은 다른 네트워크까지 도달 경로를 파악할 수 있다는 거겠죠?
둘째, MAC 주소만으로는 모든 네트워크에 속한 호스트의 위치 특정하기가 어렵다. 일단 모든 호스트가 모든 네트워크에 속한 모든 호스트의 MAC 주소를 다 알고 있기란 현실적으로 어려워요. 게다가 MAC 주소는 택배로 치면 받는 사람의 개인정보예요. 개인정보만 안다고 택배를 보낼 수는 없어요. 택배를 수신할 장소의 주소도 필요하죠. 그 수신지 역할을 하는 정보를 가지고 있는 게 네트워크 계층의 IP 주소입니다.

그럼 본격적으로 네트워크 계층을 공부해 볼게요! 가보자고! 👊

네트워크 계층의 핵심 프로토콜 : 인터넷 프로토콜 IP

IP는 통신망에서 패킷이 목적지까지 도달할 수 있도록 데이터그램을 기반으로 비신뢰성, 비연결성 서비스를 제공한다.
IP 단편화(패킷의 분해 및 조립), IP 주소 지정, 경로 선택  기능을 가진다.
IP 단편화(IP fragmentation)는 전송하고자 하는 패킷의 크기가 MTU보다 클 경우, 이를 MTU 크기 이하의 여러 패킷으로 나누는 걸 말한다. 여기서 MTU는 Maximum Transmission Unit의 약자로, 한 번에 전송가능한 IP 패킷의 최대 크기를 의미한다. 최대 전송 단위인 셈. 일반적으로 MTU 크기는 1500바이트이다.
IP 주소 지정(IP addressing)은 IP 주소를 바탕으로 송수신 대상을 지정한다.

IP 주소는 4바이트(32비트)로 표현할 수 있고, 숫자당 8비트로 표현되어 0~255 범위 안에 있는 네 개의 10진수로 표기할 수 있다.
각 10진수는 점(.)으로 구분하고, 이렇게 점으로 구분한 8비트를 옥텟 Octet 이라고 한다.
192.168.1.1 과 같은 형태로 나타내는데, 이런 형태는 보통 IPv4에서 사용하는 IP 주소다.

# IPv4

데이터 링크 계층의 이더넷 프레임에 있는 데이터 필드에는 상위 계층에서 전달받거나 전달해야 할 내용이 명시된다.
그래서 IPv4 패킷은 프레임의 페이로드로 데이터 필드에 명시된다.

이더넷 프레임 헤더 페이로드 트레일러
프리앰블 수신지 MAC 주소 송신지 MAC 주소 타입/길이 데이터 FCS

저 페이로드 부분을 확대하면, 이렇게 IPv4 패킷 헤더와 IPv4 패킷 페이로드로 나눠진다.

IPv4 패킷 헤더 페이로드
버전 헤더길이 서비스
유형
패킷
길이
식별자 플래그 단편화
오프셋
TTL 프로토콜 헤더
체크섬
송신지
IP주소
수신지
IP주소
옵션 패딩 데이터

꽤나 뭐가 많은데, 이걸 조금 다시 정리해서 예쁘게 그려보면 이렇대요.
이 중에서 식별자, 플래그, 단편화 오프셋은 IP 단편화 및 재조합 기능과, 송수신지 IP 주소는 IP 주소 지정 기능과 관련이 있어요.

0 4 8 12 16 20 24 28 32
IPv4
패킷 헤더
버전 (4) 헤더길이
(가변)
서비스 유형 패킷 전체 길이
(2^16 -1 = 65,535 바이트가 최대 크기)
식별자 플래그 단편화 오프셋
TTL 프로토콜 헤더 체크섬 (헤더 오류 발생 검사)
송신지 IP 주소
수신지 IP 주소
옵션(필요시)
패딩(필요시)
페이로드 데이터 ...

1) 식별자 Identifier : 패킷에 할당된 번호. 패킷이 단편화되어 전송되었다면, 잘게 쪼개진 패킷이 어떤 메시지에서 나온 것인지 인식하기 위해 사용. 말하자면 내 패킷의 출처는 이 메시지야 정도 되겠네

2) 플래그 flag : 세 개의 비트로 구성.
- 0 (미사용)
- DF = 단편화 수행하지 말라 = Don't fragment = 0으로 설정 시 단편화 가능
- MF = 단편화된 패킷이 더 있다 = More fragment = 0이면 이 패킷이 마지막을 뜻함

3) 단편화 오프셋 : 패킷이 단편화되기 전 패킷의 초기 데이터에서 몇 번째로 떨어진 패킷인지 나타냄. 단편화 후 전송되는 패킷들은 순서대로 도착하지 않기에 순서대로 재조합을 위해 필요함

4) TTL Time to Live : 패킷의 수명. 무의미한 패킷이 구천을 떠도는 유령마냥 네트워크상에 지속적으로 남아 있는 것을 방지하는 용도다.
라우터 또는 호스트를 거치는 홉(hop)마다 TTL은 하나씩 감소하고 0이 되면 폐기된다.

5) 프로토콜 : 상위 계층의 프로토콜이 무엇인지 나타내는 필드 (전송 계층의 TCP는 6, UDP는 17, ICMP 등)

6&7) 송/수신지 IP 주소

이론적으로 할당 가능한 IPv4는 2^32개로 약 43억 개
글로벌 지구촌 세상에는 한참 부족한 숫자
(24년 3월 기준 세계 인구 81억 명)
주소 고갈을 우려해 새롭게 내놓은 것이 바로 IPv6다.

# IPv6

IPv6는 16바이트(128비트)로 주소를 표현하고, 콜론(:)으로 구분한 8개 그룹의 16진수로 표기한다.
이런 식으로 생겼어요. 2001:0230:abcd:ffff:0000:0000:ffff:1111

IPv6 패킷의 기본 헤더 구성은 IPv4에 비해 간단한데요,
IPv4의 헤더 길이, 식별자, 플래그, 분할 오프셋, 헤더 체크셈 같은 5개 필드가 제거되었기 때문이에요. 표로 살펴보면,

0 4 8 12 16 20 24 28 32
헤더 버전 (6) 트래픽 클래스 흐름 라벨 (경로 정보로 라우팅 생략 가능 = 속도 빠름)
페이로드 길이
(= 확장 헤더 + 데이터 필드 / 최대 65,535 바이트)
다음 헤더 홉 제한
송신지 IP 주소(128비트)
수신지 IP 주소(128비트)
페이로드 데이터 ...

1) 다음 헤더 : 상위 계층의 프로토콜을 가리키거나 확장 헤더를 가리킴.
지금 보고 있는 표는 IPv6의 기본 헤더만 표현한 것인데요. 기본 헤더는 40Byte로 고정!
다만 IPv6는 추가적인 헤더 정보가 필요할 경우에는, 기본 헤더와 페이로드 데이터 사이에 확장 헤더라는 추가 헤더를 끼워 넣는다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

대표적인 확장 헤더 종류는 1) 송수신지에 이르는 모든 경로의 네트워크 장비가 패킷을 검사토록 하는 홉 간 옵션, 2) 수신지에서만 패킷을 검사하게 하는 수신지 옵션, 3) 라우팅 관련 정보를 운반하는 라우팅, 4) 단편화를 위한 단편화, 5) 암호화와 인증을 위한 ESP, AH 확장 헤더 등이 있다. 

2) 홉 제한 : 패킷의 수명을 나타내는 필드로 IPv4의 TTL 필드와 유사

3&4) 송수신지 IP 주소

다음 주제로 넘어가기 전에 IPv4와 IPv6를 비교 정리 해보자
왜 하냐구요? 시험에 심심찮게 나와요^^ (필기 집착 광공)

  IPv4 IPv6
주소 형태 192.168.1.1 2001:0230:abcd:ffff:0000:0000:ffff:1111
주소 특징 4바이트 = 32비트
점(.)으로 구분
8비트 4개 그룹, 10진수로 표기

클래스 단위로 비순차적 할당(비효율)
16바이트 = 128비트
콜론(:)으로 구분
16비트 8개 그룹, 16진수로 표기

네트워크, 단말 순서로 순차적 할당(효율적)
할당 가능한 개수 2^32 = 4,294,967,296
(43억개)
2^128 = 3.403×10³⁸
(거의 무한...?)
달라진 점 헤더 크기는 가변(약 20바이트) 헤더 크기는 고정(40 바이트)
IPv4 대비 5개 필드가 사라짐
기타 특징 보안 없음(IPsec 별도 설치해야)

패킷 크기에 제한(64 바이트)

유니캐스트, 브로드캐스트, 멀티캐스트(옵션)
인증 및 보안 기능을 포함, 네트워크 기능 확장 용이
(>> 모두 확장 헤더를 사용하기에 가능한듯)

패킷 크기에 제한 없음

유니캐스트, 멀티캐스트, 애니캐스트 3가지 방식의 주소 체계를 사용

근데 두 가지 주소 체계가 다른데 어떻게 공존할 수 있나요?
변환 방식이 여러 개가 있대요

더보기
듀얼 스택(Dual Stack) IPv6 호스트/라우터들은 IPv6 전용이거나, IPv4와 IPv6를 모두 사용할 수 있는 이중 스택 구조를 가짐
이중 스택 시스템은 통신 상대방에 따라 두 가지 프로토콜 중 적절한 IP 프로토콜을 선택하여 사용함
터널링(Tunneling) 특정 프로토콜을 사용하는 네트워크 사이에 다른 프로토콜을 사용하는 네트워크가 존재할 때,
중간 네트워크에서 사용하는 프로토콜로 캡슐화하여 전송하는 방법
IPv6 >> (캡슐화) >> IPv4 >> (역캡슐화) >> IPv6
헤더 변환
(Header Conversion)
IPv4와 IPv6 게이트웨이에서 서로 간의 헤더 형식을 변환해주는 방법
헤더 변환은IP 계층에서 변환을 의미하며, SIIT(Stateless IP/ICMP Translation)에서 정의
다른 방식에 비해 속도가 빠르다는 장점이 있으나, 응용 프로토콜에 내장된 IP 계층 주소 변환의 어려움, IPv6 헤더 길이가 더 길어서 생기는 단편화 등의 어려움 존재
전송 계층 릴레이 방식 TCP/UDP의 IPv4 세션과 TCP/UDP의 IPv6 세션을 중간에서 릴레이
릴레이 서버에 TCP 요청이 도착 >> 네트워크 계층은 수신지 주소가 아니어도 TCP 요청을 TCP 계층으로 전송 >> 서버는 TCP 패킷을 전송받아 송신지 호스트와 TCP를 연결하고, 릴레이 서버는 실제 수신지로 TCP 연결을 하나 더 생성 (결국 연결 은2개 - 하나는 데이터를 읽고, 다른 하나의 연결에 기록)
전송 계층 정보만 변환하기에 응용 계층 데이터의 세부 정보는 다룰 수 없음
TRT와 SOCKS 게이트웨이 방식이 대표적
응용 계층 게이트웨이 방식 변환 서비스를 위한 ALG(Application Level Gateway, 응용 수준 게이트웨이) 활용
각 서비스는 IPv4와 IPv6에 밀폐되어 있어 응용 프로토콜에 내장된 주소 변환에 용이
IPv4/IPv6 웹 프록시인 SQUID가 대표적

전송 계층 릴레이와 응용 계층 게이트웨이는 뭔 소린지 그림 봐도 잘 모르겠어요
챗지피티랑 같이 추가 학습해서 별도로 포스팅해볼게요(도전)

출처 : 네이버 블로그 별의수다님

근데 IP 주소만 알고 MAC 주소는 모르면 어떠카조? 🧐

#ARP = IP를 MAC으로 변환

ARP(Address Resolution Protocol)은 "동일 내트워크 내에서" IP 주소를 통해 MAC 주소를 알아내는 프로토콜이다.
ARP의 동작 과정은 요청, 응답, 테이블 갱신으로 구성된다.

- ARP 요청
네트워크 내 모든 호스트에게 ARP Request 메시지를 브로드캐스트
호스트 가 : "나 10.0.0.1 이랑 통신해야 하는데 MAC 주소 아시는 분 괌(광역📢)"

- ARP 응답
네트워크 내 모든 호스트가 요청 메시지를 수신한다.
해당하는 호스트는 자신의 MAC 주소를 담은 메시지를 호스트 가에게 유니캐스트
호스트 다 : "님 그거 나임. 내 MAC 주소는 ----임."
나머지 호스트는 요청 메세지를 무시한다

- ARP 테이블 갱신
ARP를 활용할 수 있는 모든 호스트는 ARP 테이블이라는 정보를 유지함
호스트 가는 호스트 다의 MAC 주소를 알게 되면 다음 그림처럼 IP-MAC 주소를 연결하여 ARP 테이블에 추가한다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

반대로 MAC 주소만 알고 IP 주소를 모를 때는 반대로 RARP 프로토콜을 이용하면 된다.
RARP는 디스크처럼 저장장치가 없는 호스트에서 주로 사용한다.

IP주소에 대해 더 자세히

# 하나의 IP 주소는 네트워크 주소와 호스트 주소로 구성

네트워크 주소는 네트워크를 표현하는 부분으로 네트워크 ID, 네트워크 식별자라고도 함
호스트 주소는 호스트를 표현하는 부분으로 호스트 ID, 호스트 식별자라고도 함
네트워크 주소와 호스트 주소를 범위에 따라 한 네트워크를 사용하는 호스트의 수가 결정된다.

# 클래스풀 주소 체계 = A~E 클래스로 고정해서 사용하기

클래스는 네트워크 크기에 따라 IP 주소를 분류하는 기준이다.
클래스를 기반으로 IP 주소를 관리하는 주소 체계를 클래스풀 주소 체계라 한다.
클래스는 A부터 E까지 5개가 있는데, D와 E는 각각 멀티캐스트와 특수 목적을 위해서만 사용한다.
그래서 실제로 네트워크 크기를 나누는 데 사용하는 건 아래와 같이 A, B, C 클래스뿐이다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

좀 더 구체적으로 정리하자면,

클래스 초기 비트 네트워크/호스트 주소 비트 할당 가능한 네트워크 수
(네트워크 비트 수)
할당 가능한 호스트 수* 표현가능한 주소
A 0 7 + 24 2^7 (128) 2^24-2 (16,777,214)  0.0.0.0 ~ 127.255.255.255
B 10 14 + 16 2^14 (16,384) 2^16-2 (65,534) 128.0.0.0 ~ 191.255.255.255
C 110 21 + 8 2^21 (2,097,152) 2^8-2 (254) 192.0.0.0 ~ 223.255.255.255
D 1110 멀티캐스팅 28     224.0.0.0 ~ 239.255.255.255
E 1111 특수 목적 28     240.0.0.0 ~ 255.255.255.255

상기 표에서 할당 가능한 호스트 수를 보면 모두 빼기 2를 하고 있는 모습을 볼 수 있는데요.
호스트 주소가 모두 0인 IP 주소는 해당 네트워크 자체를 의미하는 네트워크 주소로,
호스트 주소가 모두 1인 IP 주소는 브로드캐스트 전용 주소로 사용하고 있기 때문이라죠.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

근데 클래스풀 주소는 네트워크 크기가 고정이라는 한계가 있다.
만약 우리 회사가 255개 호스트만 필요하다면
클래스 B 체계를 택할 수밖에 없는데
그러면 6만 5천 개가량은 미사용으로 낭비되는 셈
그래서 나온 게 조금 더 유동적으로 주소를 관리하는 방법이다.

# 클래스리스 주소 체계 ⭐️ IP 주소와 서브넷 마스크를 비트 AND = 네트워크 주소

클래스리스 주소 체계에서 IP 주소를 네트워크 주소와 호스트 주소로 나누는 임의의 지점은 서브넷 마스크라고 한다.
서브넷 마스크는 IP 주소 상에서 네트워크 주소는 1, 호스트 주소는 0으로 표기한 비트열을 의미한다

서브넷 마스크를 활용해 클래스를 원하는 크기로 나누어 사용하는 기법은 서브네팅 Subnetting 이라고 한다.
서브네팅은 비트 AND 연산을 사용한다. 피연산자가 모두 1인 경우에는 1, 아니면 0이 되는 연산이다.
IP 주소와 서브넷 마스크를 비트 AND 연산하면 네트워크 주소가 나온다.

  10진수 2진수
IP 주소 192.168.219.103 11000000.10101000.11011011.01100111
서브넷 마스크 255.255.255.0 11111111.11111111.11111111.00000000

이 둘을 비트 AND 연산하면,

  8비트 8비트 8비트 8비트
IP 주소 11000000 10101000 11011011 01100111
서브넷 마스크 11111111 11111111 11111111 00000000
비트 AND 연산값
= 네트워크 주소
11000000 10101000 11011011 00000000
10진수로 변환 192 168 219 0

이렇게 해서 네트워크 주소는 192.168.219.0 이 된다.
사용된 서브넷 마스크에서 호스트 주소인 0이 8개이므로, 호스트 주소는 8비트로 표현 가능하다.
그럼 2^8이라 256개 호스트인데, 예약 주소인 네트워크 주소와 브로드 캐스트 주소를 제외하면
192.168.219.1 에서 192.168.219.254 까지가 사용 가능한 호스트의 범위가 된다.

계속해서 서브넷 마스크를 표기하는 방법은 크게 2가지가 있다.
- 서브넷 마스크를 10진수로 직접 표기 LIKE 255.255.255.0
- IP 주소 / 서브넷 마스크상의 1의 개수 형식으로 표기하는 CIDR 표기법 LIKE 192.168.219.103/24

CIDR 표기법으로 하면 슬래시 앞 쪽은 IP 주소이고, 뒤는 서브넷 마스크에서 네트워크 주소인 1의 개수이다.
결국 해석해 보자면 IP 주소는 192.168.219.103이고, 서브넷 마스크는 1 24개에 0 하나로 표현할 수 있다.

이 계산법과 표기법은 정처기며 여기저기 문제로 자주 나오니까 꼭 알아야 한다죠
그래서 제목에 별도 달아놨다.

# 공인 IP와 사설 IP 주소, 그리고 NAT

공인 IP 주소는 전 세계에서 고유한 IP 주소이다. 주로 인터넷 이용 시에 사용된다.
반대로 사설 IP 주소는 사설 네트워크에서 사용하기 위한 주소이다. 회사, 학교와 같이 한정된 공간에서 사용하는, 외부 네트워크에는 공개되지 않은 네트워크에서 사용하는 주소들이다. IP 주소 공간 중에는 사설 IP 주소로 사용하기로 약속한 주소들이 있는데,

- 10.0.0.0/8         >> (10.0.0.0 ~ 10.255.255.255)
- 172.16.0.0/12    >> (172.16.0.0 ~ 172.31.255.255)
- 192.168.0.0/16 >> (192.168.0.0 ~ 192.168.255.255)

이런 사설 IP 주소는 해당 호스트가 속한 사설 네트워크 상에서만 유효하다.
다른 사설 네트워크에 가면 똑같은 주소를 사용하는 다른 호스트가 또 있을 수도 있다.
그래서 이 사설 IP 주소만으로는 외부 네트워크와의 통신이 어렵다. 이럴 때 사용하는 기술이,
공인 IP와 사설 IP 주소를 상호 변환해 주는 NAT(Network Address Translation) 이다.
대부분의 라우터와 (가정용) 공유기에는 NAT 기능이 내장되어 있다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

# 정적 IP와 동적 IP 주소, 호스트에 IP 주소를 할당하는 방법

호스트에 직접 수작업으로 IP를 부여하는 방식을 정적 할당이라고 하고, 이렇게 할당된 주소를 정적 IP 주소라고 한다.
호스트 수가 많아지면 관리가 점점 어려워진다는 단점이 있는데, 이럴 때는

호스트에 IP 주소가 동적으로 할당되는 동적 할당 방식이 있다. 이렇게 할당된 주소를 동적 IP 주소라고 한다.
동적 IP 주소는 사용하지 않으면 회수되고, 할당받을 때마다 다른 주소를 받을 수도 있다.

# 동적 할당과 DHCP(동적 호스트 구성 프로토콜)

DHCP(Dynamic Host Configuration Protocol)는 네트워크 안의 호스트에게 IP를 동적으로 할당하는 대표적인 프로토콜이다.
호스트 IP 뿐만 아니라 DNS 서버 주소와 서브넷 마스크 주소까지 할당한다. DHCP는 OSI 7계층 응용 계층에 속한다.
책에 보니 DHCP는 IPv4/IPv6 중 어느 것을 할당하냐에 따라 DHCPv4와 DHCPv6로 나뉜다고 한다.
중요한 내용은 전혀 아닌데 지금껏 공부하면서 처음 알았서요 신기해

암튼 DHCP 할당 동작은 DISCOVER, OFFER, REQUEST, ACK 4단계로 구성됩니다. 그림으로 보면,

출처 : 한국은행 전공학술 기출 예시문제

- DHCP DISCOVER
클라이언트가 네트워크에 접근하려면 통신을 위해 IP 주소가 필요하다. 하지만 아직 없는 상태
그래서 DHCP DISCOVER 메시지를 보내는데, IP 할당을 위한 DHCP 서버 주소를 모르니까 브로드캐스트 주소로 보낸다.
출발지 IP로 0.0.0.0을 할당하고 목적지 IP에는 255.255.255.255를 할당한다

- DHCP OFFER
DHCP 서버는 IP 풀에서 아직 할당되지 않은 IP를 선정해 패킷을 보낸다.
패킷에는 할당할 IP와 서브넷 마스크, 기본 게이트웨이, IP 주소 대여 시간, DNS 서버 주소 등이 포함된다.
이때도 클라이언트의 IP가 미정이라 모르니까 브로드캐스트 주소로 보낸다.
출발지 IP로 서버 IP를 할당하고 목적지 IP에는 255.255.255.255를 할당한다

- DHCP REQUEST
DHCP OFFER 메시지를 받은 클라이언트는 서버가 보내준 IP를 사용하겠다는 의미로 DHCP REQUEST 메시지를 보낸다
요청 메시지인 이유는 클라이언트가 서버에게 오퍼 받은 IP가 아닌 다른 IP로 요청해서 거부당할 수도 있기 때문이다
또한 IP 할당이 아직 진행 중인 상태라, 클라이언트가 다른 DHCP 서버로부터도 OFFER 메시지를 수신할 수도 있다. 그래서 REQUEST 메시지도 브로드캐스트로 보낸다
출발지 IP로 서버가 할당해 준 IP를 기재하고 목적지 IP에는 255.255.255.255를 할당한다

- DHCP ACK
DHCP 서버는 수신받은 메시지 내에 기록된 IP 주소가 자신이 관리하는 주소인지 확인한 후에,
아직 클라이언트가 IP 주소를 할당받지 못했기 때문에 ACK 메시지를 브로드캐스트로 보낸다
이 메시지가 가야 할당 작업이 완료기에 아직 끝나지 않은 걸로 본다.

ACK 메시지까지 받은 클라이언트는 서버가 보내온 정보를 기반으로 네트워크 환경을 구성하고 인터넷에 접근하게 된다.
IP 주소 사용 기간이 모두 끝나면 원칙적으로는 주소를 반납하고 새로 할당받아 사용해야 한다.
하지만 기간이 만료되기 전에 연장도 가능하다. 이를 임대 갱신이라고 한다.
임대 갱신은 기본적으로 두 차례 자동으로 수행되는데, 두 번 모두 실패하면 그때 IP 주소를 반납한다.

💡기본 게이트웨이 default gateway
>> 호스트가 속한 네트워크 외부로 나가기 위한 기본 경로(첫 번째 홉)
>> 보통 네트워크 외부와 연결된 라우터(공유기)를 의미하는 경우가 많다
>> 목적지의 주소를 알 수 없는 데이터를 송신원 장치를 대신하여 전송하는 기능을 가진다. 특정 목적지로 가는 데이터 패킷이 유입되었는데 목적지를 알지 못한다면, 가장 먼저 기본 게이트웨이로 전달된다. 

더보기

여담인데, 내외부망 구분이나 보안을 중요하게 생각하는 회사에서는 직원들 자리마다 IP 주소가 정해져 있다.
그래서 부서 이동이나 사무실 이전 등으로 인해 자리를 새로 세팅해야 하면 그때부터 무한 기다림의 시간이 시작된다죠.
내 구 회사는 인프라팀에서 방문해서 직원별로 배정된 IP를 윈도우 네트워크 설정 창에 입력해줘야 했다.

출처 : 네이버 블로그 신밧드의모험님

다들 알다시피 그리 어려운 일은 아니지만 우리 팀과 팀원에게 배정된 IP를 알아야만 세팅할 수 있으니 어쩔 수 없었다죠.
간혹 성질 급한 팀원을 만나면,,, 어쩔 수 없이 인프라팀에 전화로 먼저 물어보고 해드리기도 했던 추억...이...^^
이런 거 알면 좋은 점? 한시적 일잘러로 보일 수 있다. 다들 세상과 단절되어 있는데 나만 메신저, 사내망 접속할 수 있다.
반대로 이런 거 알면 나쁜 점? 이런 잡일 담당된다. 남들보다 먼저 일을 시작할 수 있다.
다시 도비 하려고 공부하면서도 도비 하기 싫은 이 감정...🙃

라우팅, 패킷이 이동할 최적의 경로를 찾아 보내기

# 라우터 = 네트워크 계층 대표 장비

라우터는 패킷이 이동할 최적의 경로를 설정하고 그 경로로 패킷을 내보내는 일, 라우팅을 한다.
라우팅 도중 패킷이 호스트와 라우터 간, 라우터와 라우터 간 이동하는 하나의 과정을 홉 hop 이라고 부른다.
패킷은 여러 홉을 거쳐 라우팅 되는 것이다. (홉은 앞서 IPv4의 TTL과도 연관된 개념)

# 라우팅 테이블

라우팅 테이블은 특정 수신지까지 도달하기 위한 정보를 저장하고 관리하는 일종의 표이다.
라우터는 라우팅 테이블을 참고하여 수신지까지의 도달 경로를 판단한다.
라우팅 테이블에 명시되는 대표적인 정보들로는

- 수신지 IP 주소와 서브넷 마스크 : 최종적으로 패킷을 전달할 대상
- 다음 홉 : 최종 수신지까지 가기 위해 다음으로 거쳐야 할 호스트 IP 주소나 인터페이스를 의미. 게이트웨이라고 쓰기도
- 네트워크 인터페이스 : 패킷을 내보낼 통로. 인터페이스 이름을 명시하거나 이에 대응하는 IP 주소를 적기도 함
- 메트릭 metric : 해당 경로로 이동하는데 드는 비용.

라우팅 테이블은 이런 식으로 생겼는데요,

수신지 IP 주소 서브넷 마스크 게이트웨이 인터페이스 메트릭
192.168.2.0 255.255.255.0 192.168.2.1 eth0 30
192.168.0.0 255.255.255.240 192.168.2.2 eth1 30
0.0.0.0 0.0.0.0 192.168.0.1 eth2 30

첫 번째 줄을 해석하자면. 수신지가 192.168.2.0/24, 다시 말해 호스트 IP 주소 범위가 192.168.2.1~192.168.2.254인 패킷은 인터페이스 eth0을 통해 게이트웨이 192.168.2.1로 전송하라는 의미이다.

근데 간혹 라우팅 테이블에 없는 경로로 패킷을 전송해야 하는 상황도 존재한다.
이럴 때 기본적으로 패킷을 내보낼 경로인 디폴트 라우트를 활용하게 된다.
디폴트 라우트는 0.0.0.0/0으로 명시한다. 상기 표에서 세 번째 줄이 바로 디폴트 라우트를 의미한다.
만약 수신지 IP 주소가 1.2.3.4와 같이 라우팅 테이블에 정보가 없는 경우라면, 이 디폴트 라우트를 활용해 인터페이스 eth2를 통해 게이트웨이 192.168.0.1로 전송하게 된다.

# 정적 라우팅과 동적 라우팅

정적 라우팅은 관리자가 수동으로 직접 채워 넣은 라우팅 테이블의 항목을 토대로 하는 고정적인 방식이다.
이런 식으로 라우팅 테이블 항목을 다루는 명령어를 활용한다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

동적 라우팅
- 네트워크 상황 변화에 따라 인접 라우터 간에 경로 정보를 교환하여 자동으로 경로를 설정
- 라우터 경로 정보가 네트워크 상황에 따라 동적으로 변경되어 중개하는 방식
- 구성이 쉽고, 대상 네트워크에 대한 최상의 경로를 선택하고 검색하는데 효과적 >> 대규모 네트워크에 유리
- 다른 장비들과 지속적인 통신이 필요해 많은 대역폭을 소비함
- 정적 라우팅보다는 상대적으로 보안에 취약

동적 라우팅을 위해 라우터끼리 서로 자신의 정보를 교환하는데, 이때 (동적) 라우팅 프로토콜을 사용한다.

# (동적) 라우팅 프로토콜

라우팅 프로토콜은 라우터끼리 자신들의 정보를 교환하며 패킷이 이동할 최적의 경로를 찾기 위해 사용한다.

라우팅 프로토콜은 크게 AS 내부/외부 중 어디에서 수행되는지에 따라 종류를 나눌 수 있다.
- 내부에서 수행되면 IGP(Interior Gateway Protocol) : RIP와 OSFP
- 외부에서 수행되면 EGP(Exterior Gateway Protocol) : BGP

여기서 AS는 동일한 라우팅 정책으로 운용되는 라우터들의 집단 네트워크인 Autonomous System을 의미한다.
한 회사나 기관, 단체에서 관리하는 라우터 집단을 AS라고 봐도 무방하다.

출처 : 네이버 블로그 printf7님

# 동적 내부 라우팅 IGP = RIP와 OSPF

AS 내부에서 수행되는 IGP는 최적 경로 선정 과정에서 거리 벡터와 링크 상태 중 어느 걸 사용하느냐에 따라 나뉜다.
- 거리 벡터를 사용하면 RIP(Routing Information Protocol), RIPv2
- 링크 상태를 사용하면 OSPF(Open Shortest Path First), IS-IS
* 거리 벡터와 링크 상태 성격을 모두 띠는 하이브리드 라우팅 프로토콜로는 EIGRP

# 거리 벡터 알고리즘 distance vector
- 인접 라우터끼리 경로 정보를 공유하며 목적지까지의 거리와 방향을 결정하는 라우팅 프로토콜 알고리즘
- 네트워크의 거리 distance 값(홉의 수)에 대한 정보만 가져 라우터 간 최적 경로만 교환
   홉 수가 적을수록 라우팅 테이블상 메트릭 값도 작아짐
- 각 라우터가 업데이트될 때마다 주기적으로 전체 라우팅 테이블을 보내라고 요청하나, 수신된 경로 비용 정보는 이웃 라우터에게만 보내짐
- 간단하나, 규모가 커지면 처리용량이 많아져 네트워크 부담이 가중됨 >> 소규모 네트워크에 적합
- 대표적으로 RIP
* RIP 특징 : 벨만-포드 알고리즘 사용, 최대 홉 수를 15홉으로 제한, UDP 사용 = 포트 번호 520, 30초마다 전체 라우팅 정보를 브로드캐스팅

# 링크 상태 알고리즘 Link State
- 현재 네트워크 상태를 그래프 형태로 링크 상태 데이터베이스에 저장
   링크 상태 데이터베이스에는 라우터들의 연결 관계, 비용 등 현재 네트워크 상태를 그래프로 표현하기 위한 데이터가 저장됨
- 링크 상태 정보를 모든 라우터에게 전달해 최단 경로 트리를 구성하는 라우팅 프로토콜 알고리즘
- 네트워크에 대한 전반 정보(topology, path)를 가지고 라우터 간 가능성 있는 모든 경로 정보를 교환
- 거리와 대역폭에 따라 경로를 계산하고 어떤 링크 변화가 있는 경우만 정보를 전달하는 방식
- 네트워크를 일관성 있게 파악 가능하나, 거리 벡터 대비 계산이 복잡하고 트래픽을 광범위하게 전달 >> 대규모 네트워크에 적합
- 대표적으로 OSPF
* OSPF 특징 : 다익스트라 알고리즘 사용, 최소 지연/최대 처리량 등 관리자가 라우팅 메트릭 지정, AS 분할 사용, 홉 카운트에 제한 없음, 멀티캐스트를 사용해 정보 전달

# 동적 외부 라우팅 EGP = BGP

BGP(Border Gateway Protocol)는 AS 간, 그리고 AS 내 라우터 간 통신이 가능한 프로토콜이다.
BGP는 RIP와 OSPF에 비해 최적 경로 결정 과정이 복잡하고 일정하지 않은 편인데,
경로 결정 시 수신지 주소와 더불어 다양한 속성과 정책을 고려하기 때문이다.
BGP의 속성이란 경로에 대한 일종의 부가 정보로, AS-PATH, NEXT-HOP, LOCAL-PREF 등이 있다.

- AS-PATH : 메시지가 수신지에 이르는 과정에서 통과하는 AS들의 목록
- NEXT-HOP : 다음 홉. 다음으로 거칠 라우터의 IP 주소를 나타냄
- LOCAL-PREF : 지역 선호도. AS 내부에서 어떤 경로를 선호할지에 대한 척도를 나타내는 속성. 앞서 소개한 다른 속성보다 우선되며, 이 값이 클수록 우선으로 선택됨

요약하자면 BGP는 AS 간 라우팅을 할 때 라우터가 아닌 AS의 수를 고려한다.
또한, 메시지가 어디를 거쳐 이동하는지를 나타내는 경로도 고려한다.


후 이번 주는 중요한 내용도 많고
또 공부하다 보니 연상되는 내용도 많아서
보태보태 하다보니 정말 오래 걸렸다.
하지만 나중에 블로그 글 다시 읽으면
그렇게 뿌듯할 수가 없거든요~

각설하고 이번 주 공부는 끝났읍니다
그럼 이제 숙제를 해볼까요

기본 숙제 📚 

# (p147) 확인문제 1번 "IPv4의 대표적인 기능 두 가지를 골라보세요"
답 : 2번 IP 주소 지정과 3번 IP 단편화
IP는 비신뢰성, 비연결성 서비스라 1번은 오답. 4번의 IP 주소 변환은 NAT가 한다죠.

# (p187) 확인문제 2번 "라우팅 프로토콜과 관련한 아래 설명을 읽고 옳은 것을 골라 보세요"

라우팅 프로토콜은 AS 내부에서 수행되는 (IGP)와 AS 외부에서 수행되는 (EGP)로 나뉩니다.
(RIP)는 대표적인 거리 벡터 라우팅 프로토콜이고, (OSPF)는 대표적인 링크 상태 라우팅 프로토콜입니다. 

추가 숙제 : 내 컴퓨터 IP와 MAC 주소 파악해 보기

터미널에 명령어 쳐서 확인하기 귀찮아서... 시스템 메뉴를 통해 확인해 봤다.
현재 와이파이에 연결된 상태라 IP 주소는 사설 IP로 되어 있다.
그리고 MAC 주소는 봐도... 모름... 전에 배운 내용으로는 제조사별로 할당되고 어쩌고였는데 기억 안 나요

암튼 진짜 끝

반응형
반응형

돌아온 혼공단 시간~!
1주 차 숙제를 제출하고 나중에 패들릿에 들어가 봤더니
세상에 족장님이 모든 숙제에 하나하나 다 코멘트를 남기고 있었다
혼공단 대상 책이 여러 개라 한두 명이 아닐 텐데 감덩,,,
우수혼공족 선정에 더 감덩,,, 🥹🥹
내 공부하는데 간식까지 챙겨준다?! 혼공단 외 안헤?! 
네트워크 완주하고 여름에 14기로 다시 돌아오게 씁니다 🫡

아무튼 혼자 공부하는 네트워크 2주 차 커리큘럼은 챕터 2입니다.
추가 숙제는 집에 있는 케이블을 찾아서 해석하기예요
흥미로운 걸,,,?

챕터 2는 물리 계층과 데이터 링크 계층이래요.
저번에 OSI 7 계층 공부할 때 하단부에 있던 애들인데
기억나는 사람~!~! 난 아님 🙅🏻‍♀️

<목차>
Chapter 1. 컴퓨터 네트워크 시작하기
Chapter 2. 물리 계층과 데이터 링크 계층
Chapter 3. 네트워크 계층
Chapter 4. 전송 계층
Chapter 5. 응용 계층
Chapter 6. 실습으로 복습하는 네트워크
Chapter 7. 네트워크 심화

그럼 2주 차 공부를 시작해 볼까요

# 이더넷 Ethernet

물리 계층과 데이터 링크 계층은 이더넷이라는 공통된 기술이 사용되어 서로 밀접하게 연관되어 있다. 이더넷은 현대 유선 LAN 환경에서 가장 대중적으로 사용되는 기술이다. 컴퓨터끼리 정보가 오가려면 케이블과 같은 통신 매체가 필요한데, 이더넷 Ethernet은 다양한 통신 매체 규격들과 송수신되는 프레임의 형태, 주고받는 방법 등을 정의한 네트워크 기술이다. 현재 이더넷 관련 기술은 IEEE 802.3이라는 이름으로 표준화가 되어 있다.

# 통신 매체 표기 형태

이더넷 표준 규격에 따라 구현된 통신 매체는 다음과 같은 형태로 표기한다.

전송속도 BASE - 추가 특성
숫자만 표기 = Mbps 속도
숫자+G = Gbps 속도
베이스밴드BASEband의 약자
비트 신호로 변환된 데이터를
통신 매체로 전송하는 방법인
변조 타입을 의미
전송 가능한 최대 거리나
물리 계층 인코딩 방식,
비트를 전송할 레인 수와 같은
통신 매체의 특성 명시
100BASE-T = 100Mbps
10GBASE-T = 10Gbps
이더넷은 대부분 베이스밴드 방식 사용 1000BASE-CX = 물리 계층 인코딩 방식
1000GBASE-LR = 레인(전송로) 수

# 통신 매체의 종류

추가 특성에 적힌 C, T, S, L이라는 글자는 가장 대중적인 통신 매체의 종류이다.

- C = 동축 케이블
- T = 트위스티드 페어 케이블
- S = 단파장 광섬유 케이블
- L = 장파장 광섬유 케이블

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

 지금까지 공부한 내용을 토대로 통신 매체 표기 형식을 해석해 본다면,

- 10BASE-T 케이블은 10Mbps 속도를 지원하는 트위스티드 페어 케이블
- 1000BASE-SX 케이블은 1000Mbps 속도를 지원하는 단파장 광섬유 케이블이다.

이더넷 표준과 이를 기반으로 하는 통신 매체를 연결해서 본다면 아래와 같다고 한다.
다만 이더넷 표준과 통신 매체 표기가 항상 일대일 대응은 아니라고 하니 참고만 하자!

표준 규격 통신 매체 해석
IEEE 802.3i 10BASE-T 10Mbps 속도를 지원하는 트위스티드 페어 케이블 (초기 이더넷)
IEEE 802.3u 100BASE-TX 100Mbps 속도를 지원하는 트위스티드 페어 케이블 (고속 이더넷)
IEEE 802.3ab 1000BASE-T 1000Mbps 속도를 지원하는 트위스티드 페어 케이블 (기가비트 이더넷)
IEEE 802.3bz 2.5GBASE-T / 5GBASE-T 2.5Gbps 혹은 5Gbps 속도를 지원하는 트위스티드 페어 케이블
IEEE 802.3an 10GBASE-T 10Gbps 속도를 지원하는 트위스티드 페어 케이블
IEEE 802.3z 1000BASE-SX / 1000BASE-LX 1000Mbps 속도를 지원하는 단파장 혹은 장파장 광섬유 케이블
IEEE 802.3ae
10GBASE-SR / 10GBASE-LR 10Gbps 속도를 지원하는 단파장 혹은 장파장 광섬유 케이블

💡데이터 신호 속도(BPS)
  >> 초당 전송 가능한 비트 수 (Bit Per Second)
  >> 데이터 신호 속도(BPS) = 변조 속도(baud) * 단위 펄스 당 변조된 비트 수
  >> 단위 펄스를 구성하는 bit 수에 따른 이름으로 디비트(2bit), 트리비트(3bit), 쿼드비트(4bit)

# 데이터 링크 계층의 이더넷 프레임

현대 유선 LAN 환경은 대부분 이더넷을 기반으로 구성되어 있다. 호스트가 데이터 링크 계층에서 주고받는 프레임 형식도 정해져 있는데, 이를 이더넷 프레임이라고 한다. 이더넷 프레임은 상위 계층으로부터 받아들인 정보에 헤더와 트레일러를 추가하는 캡슐화 과정을 통해 만들어진다. 반대로 수신지 입장에서는 프레임의 헤더와 트레일러를 제거한 뒤 상위 계층으로 올려 보내는 역캡슐화 과정을 거친다.

이더넷 프레임 헤더는 기본적으로 프리앰블, 송/수신지 MAC 주소, 타입/길이로 구성되고, 페이로드는 데이터, 트레일러는 FCS로 구성된다.

헤더 페이로드 트레일러
프리앰블 수신지 MAC 주소 송신지 MAC 주소 타입/길이 데이터 FCS
8바이트 6바이트 6바이트 2바이트 16~1500바이트 4바이트

# 프리앰블 Preamble = 송수신지 간 동기화를 위해 사용
프리앰블은 이더넷 프레임의 시작을 알리는 8바이트(64비트) 크기의 정보. 프리앰블의 첫 7바이트는 10101010 값을 가지고, 마지막 바이트는 10101011 값을 가진다. 수신지는 프리앰블을 통해 이더넷 프레임이 오고 있음을 알 수 있다.

# 송/수신지 MAC 주소 (aka 물리적 주소) = LAN 내의 송/수신지를 특정
MAC 주소는 네트워크 인터페이스마다 부여되는 6바이트(48비트 - 16진수 12자리) 길이의 주소. 일반적으로 고유하고, 변경되지 않는 주소로써 네트워크 인터페이스마다 부여된다.

# 타입/길이
타입/길이 필드에는 타입 혹은 길이가 올 수 있다. 필드에 명시된 크기가 1500(16진수 0D5C) 이하일 경우에는 프레임의 크기(길이)를 나타내는 데 사용되고, 1536(16진수 0600) 이상일 경우에는 타입을 나타내는데 사용된다.
타입이란 이더넷 프레임이 어떤 정보를 캡슐화했는지 나타내는 정보이다. 대표적으로 상위 계층에서 사용된 프로토콜의 이름을 명시한다. IPv4 프로토콜이라면 0800 타입, IPv6라면 86DD, ARP라면 0806과 같이 표기된다고 한다.

# 데이터
데이터는 상위 계층에서 전달받거나 상위 계층으로 전달해야 할 내용을 담고 있다. 네트워크 계층의 데이터와 헤더를 합친 PDU가 이곳에 포함된다. 크기는 46~1500바이트 사이어야 한다. 만약 그 이하의 데이터라면 크기를 맞추기 위해, 46바이트 이상이 될 때까지 0으로 채우는데, 이를 패딩 Padding 이라고 한다.

# FCS (Frame Check Sequence) = 송수신지 CRC 값을 비교해 오류 검출
FCS는 수신한 이더넷 프레임에 오류가 있는지 확인하기 위한, 오류 검출용 필드이다. 이 필드에는 CRC (Cyclic Redundancy Check) 순환 중복 검사라고 불리는 오류 검출용 값이 들어간다.

송신지는 프리앰블을 제외한 나머지 필드 값들을 바탕으로 CRC 값을 계산한 후, 이 값을 FCS 필드에 명시한다.  수신지는 수신한 프레임에서 프리앰블과 FCS 필드를 제외한 나머지 필드 값들을 바탕으로 CRC 값을 계산하고, 이 값을 FCS 필드 값과 비교한다.
이때 비교 값이 일치하지 않으면 프레임에 오류가 있는 것으로 보고 해당 프레임을 폐기한다.

전에 IEEE 802 표준 관련 문제가 나왔었는데
틀린 기억이 있어서 공부하는 김에 추가로 정리하고 넘어가려고 합니다.
진짜로 혼자 공부하는 지나가는 코너라 접어둘게요

더보기

# IEEE 802 표준

802.2 논리링크제어(LLC) 계층의 이행에 관해 명기한 표준 프로토콜 
802.3 이더넷 표준. CSMA/CD 액세스 제어 방식 사용
802.4 토큰버스 액세스 제어 방식 사용
802.5 토큰 링 액세스 제어 방식 사용
호스트들이 링 형태로 연결되어, 토큰을 가지고 있어야만 네트워크 내 다른 호스트에게 메시지 전송 가능
802.6 도시권 통신망 규격 (MAN)
802.11a 직교 주파수 분할 다중화(OFDM) 방식을 사용하여 최대 54 Mbps의 전송률 제공 / 5 GHz 대역
전파 파장이 짧아 신호 범위가 짧음 = 고속 무선 LAN 구축을 원하는 기업용 네트워크에서 주로 사용

802.11b Wi-Fi. 무선 LAN 규격으로 CSMA/CA 액세스 제어 방식
최대 11 Mbps의 전송률 제공 / 2.4 GHz 대역
802.11g 최대 54 Mbps의 전송률 제공 / 2.4 GHz 대역
OFDM 방식을 사용하여 채널 중첩 문제 해결
802.11i Wi-Fi의 암호화 국제 표준. 802.11의 WEP를 보완한 WPA(Wi-Fi Protected Access) 무선 암호화 방식 사용 
802.11n 최대 600 Mbps의 전송률 제공 / 2.4 & 5 GHz 대역
MIMO 방식을 사용하여 전송 신호를 다중화, 전송 속도 향상
802.11ac Wi-Fi 5. 5 GHz 대역
802.11ax Wi-Fi 6 = HEW(High Efficiency Wireless). 최대 10 Gbps의 속도 지원
다중 사용자-다중 입력 다중 출력(MIMO)
802.15 소규모 무선랜 기술 Wireless PAN
802.15.1 >> 블루투스
802.15.4 >> 지그비 ZigBee
802.16 WiMax. Broadband Wireless Access
802.16e (Mobile) Broadband Wireless Access

 

# NIC와 케이블

# NIC (Network Interface Controller)

호스트와 유무선 통신 매체를 연결하고, MAC 주소가 부여되는 네트워크 장비를 의미. NIC는 통신 매체에 흐르는 신호와 프레임을 상호 변환하는 역할을 한다. 호스트가 네트워크를 통해 송수신하는 정보는 NIC를 거치기에, 네트워크 인터페이스 역할을 수행한다고도 한다. NIC는 MAC 주소를 통해 자신의 주소와, 수신되는 프레임의 수신지 주소를 인식한다. 그래서 어떤 프레임이 도착했을 때 자신과 관련 있는 프레임만 수신할 수 있는 것이다.

# 트위스티드 페어 케이블

구리 선으로 전기 신호를 주고받는 통신 매체. 케이블 본체와 케이블의 연결부인 커넥터로 구성되고, 본체 내부는 케이블 이름처럼 구리 선이 두 가닥씩 꼬여 있다. 구리선에 전기 신호를 왜곡시킬 수 있는 간섭인 노이즈가 생길 수 있어, 구리 선을 철사나 포일로 감싸 보호하는 경우가 많은데 이를 차폐(실드)라고 한다. 세 종류로 구분하는데,

- U : 실드 없이 구리선만
- S : 브레이드 실드로 구리선을 보호
- F : 포일 실드로 구리 선을 보호

실드에 따라 케이블의 종류를 나눠서 표기한다. 보통 __/_TP 형태로 표현한다. 예를 들면,

- S/FTP : 케이블 외부는 브레이드 실드로 보호, 내부의 꼬인 각 구리선 쌍은 포일 실드로 보호
- SF/FTP : 케이블 외부는 브레이드/포일 실드로 보호, 내부의 구리선 쌍은 포일 실드로 보호
- U/UTP : 아무것도 감싸지 않은 케이블을 의미

트위스티드 페어 케이블은 카테고리에 따라서도 구분할 수 있다. 카테고리는 케이블 성능 등급을 구분하는데, 높은 카테고리일수록 성능이 좋다. 아래는 인터넷에서 찾은 표인데 숫자가 올라갈수록 전송 속도나 지원 대역폭이 커지는 것 볼 수 있다.

출처 : www.techyshop.co.ke

# 광섬유 케이블

빛(광신호)을 이용해 정보를 주고받는 케이블. 상대적으로 속도가 빠르고, 노이즈 간섭도 적으며, 먼 거리도 전송이 가능하다. 그래서 대륙 간 네트워크 연결에도 사용된다. 동일하게 케이블 본체와 커넥터로 이루어져 있는데, 커넥터 종류는 LC, SC, FC, ST가 있다.

출처 : 뷰웍스 머신비전 블로그 visionblog.vieworks.com

그리고 케이블 본체 내부는 광섬유로 구성되어 있는데, 광섬유를 확대해서 보면 중심부의 코어 core, 코어를 둘러싸고 빛이 코어 안에서만 흐르도록 가둬 두는 클래딩 cladding, 이 둘을 뒤덮어 수분과 부식으로부터 보호하는 재킷 jacket 의 구조를 가지고 있다.

참고용으로 더 자세한 특징들을 나열하자면,

1) 대용량 전송이 가능
2) 부피가 작고 무게가 가벼워 설치 및 보수가 용이
3) 전송손실이 적고, 전자파 영향이 적어 안정된 통신 및 누화 방지
4) 선로상 전송은 일정 거리마다 신호 재생을 해주는 리피터가 필요함
5) 효율적인 보안이 가능
6) 분기가 어렵고, 접속 부분에서 정보 손실 및 오류 발생 가능성이 높음

광섬유 케이블은 코어의 지름에 따라 싱글 모드 광섬유 케이블(SMF)와 멀티 모드 광섬유 케이블(MMF)로 나뉜다.

싱글 모드 광섬유 케이블은 코어 지름이 8~10μm(마이크로 미터)로 아주 작아 빛의 이동 경로가 하나이며, 장파장의 빛을 사용한다. 신호 손실이 적기에 장거리 전송에 적합하나, 멀티 모드에 비해 비싸다는 단점이 있다. 대표적인 규격으로는 1000BASE-LX, 10GBASE-LR이 있다. (L은 장파장을 의미)

멀티 모드 광섬유 케이블은 코어 지름이 50~63.5μm(마이크로 미터)로 빛이 여러 경로로 이동할 수 있고, 단파장의 빛을 사용한다. 상대적으로 신호 손실이 클 수 있어, 근거리 전송에 주소 사용한다. 대표적인 규격으로는 1000BASE-SX, 10GBASE-SR이 있다. (S은 단파장을 의미)


이제 본격적으로 물리 계층과 데이터 링크 계층에서 사용하는 장비들을 살펴볼 예정이다.
그전에 물리 계층과 데이터 링크 계층에 대해 잠시 복습하고 지나가고자 한다.

계층명 이번 주 포인트 지난 주 복습
데이터 링크 계층 NIC
스위치(전이중 통신+VLAN)
- 네트워크 내 주변장치 간 정보를 올바르게 주고받기 위한 계층
- MAC 주소 체계를 통해 네트워크 내 송수신지를 특정
- 물리적으로 연결된 인접한 개방 시스템들 간 신뢰/효율적 정보 전송을 위해 시스템 간 연결 설정과 유지 및 종료 담당
- 오류 검출 및 회복을 위한 오류 제어, 송수신측 속도 차이 해결을 위한 흐름 제어, 프레임 순서적 전송을 위한 순서 제어 기능을 가짐
- 전송 단위인 프레임에 물리적 주소를 부여함
- 장비로는 랜카드, 브리지, 스위치
- 관련 프로토콜로는 HDLC, LAPB, LLC, MAC, LAPD, PPP, 이더넷 등
물리 계층 트위스티드 페어 케이블
광섬유 케이블
허브(반이중 통신+CSMA/CD)
- OSI 모델 최하단 계층
- 0과 1로 표현되는 비트 신호를 주고 받음 (전송단위가 Bit)
- 통신 케이블로 데이터를 전송하는 물리적 장비에 필요한 기계/전기/기능/절차적 특성에 대한 규칙을 정의
- 장비로는 통신 케이블, 리피터, 허브
- 관련 프로토콜로는 RS-232C, X.21 등

물리 계층에는 주소 개념이 없다.
물리 계층 장비는 송수신 정보에 대한 어떠한 조작(송수신 내용 판단/변경)을 하지 않는다.

반면 데이터 링크 계층에는 MAC 주소 개념이 있다.
그래서 데이터 링크 계층부터의 장비들은 주소를 바탕으로
송수신 정보 내용을 판단하고 조작할 수 있다.

# 허브 Hub

물리 계층의 허브는 여러 대의 호스트를 연결하는 장치이다. 커넥터를 연결할 수 있는 포트를 통해 호스트와 연결된 통신 매체를 연결할 수 있다.

허브는 전달받은 신호를 다른 모든 포트로 다시 내보낸다. 주소 개념이 없기에 전달받은 신호를 송신지를 제외한 모든 포트에 일괄로 다시 내보낸다. 허브를 통해 신호를 받은 호스트가 데이터링크 계층에서 패킷의 MAC 주소를 확인하고 관련 없을 시 폐기한다.

허브는 반이중 모드 half duplex 로 통신한다. 무전기와 같이 송수신을 번갈아 가면서 하는 방식으로, 한쪽에서 메시지를 보내면 다른 쪽은 수신만 가능하다.

만일 다른 호스트가 기다리지 않고 신호를 보내면 충돌(콜리전)이 생기게 된다. 그래서 허브 하나에 같이 연결되어 충돌이 발생할 수 있는 영역을 콜리전 도메인이라고 한다. 콜리전 도메인 범위가 클수록(허브에 호스트가 많이 연결되어 있을수록) 충돌 가능성이 높아진다.

이러한 충돌 문제를 해결하기 위한 프로토콜이 CSMA/CD이다. Carrier Sense Multiple Access with Collision Detection의 약자로,

1) Carrier Sense, 캐리어 감지 : 메시지를 보내기 전 현재 네트워크 상에 전송 중인 것이 있는지를 먼저 확인
2) Multiple Access, 다중 접근 : 복수의 호스트가 네트워크에 접근하려는 상황을 의미
3) Collision Detection, 충돌 검출 : 충돌 발생 시 이를 감지하고 전송 중단, 충돌 발생 사실을 알리는 잼 신호 전송 및 임의 시간 동안 대기로 구성되어 있다.

요약하자면 호스트들은 메시지 전송 전에 1) 현재 네트워크 상태를 확인하고, 2) 아무도 전송하지 않고 있다면 메시지를 전송한다. 3) 부득이하게 다수의 호스트가 전송을 시도해 충돌이 발생했다면 잠시 대기했다가 다시 전송한다. 

# 스위치 Switch

데이터 링크 계층의 네트워크 장비이다. 여러 포트에 호스트를 연결한다는 점은 허브와 유사하다. 하지만 전이중 모드 full duplex 로 통신한다.

스위치는 MAC 주소 학습을 하는데, 포트와 연결된 호스트 MAC 주소 간 연관 관계를 메모리에 표 형태(MAC 주소 테이블)로 기억한다. 그래서 MAC 주소를 이용해, 특정 MAC 주소를 가진 호스트에만 프레임을 전달할 수 있다. MAC 주소 학습은 스위치의 세 가지 기능인 1) 플러딩, 2) 포워딩과 필터링, 3) 에이징 을 통해 이루어진다.

스위치는 처음에는 호스트들의 MAC 주소와 연결된 포트의 연관 관계를 알지 못한다.
호스트 A에서 처음으로 프레임을 보내면, 스위치는 프레임 내 정보를 바탕으로 호스트 A의 MAC 주소와 연결 포트 정보를 저장한다.
그리고 허브처럼 송신지 포트를 제외한 모든 포트로 프레임을 전송하는 플러딩 Flooding을 수행한다.
그럼 프레임을 전달받은 호스트 중 해당하는 호스트(예시로 C)만 다시 응답 프레임을 전송한다. 스위치는 이 정보도 또 기록한다.
스위치는 이제 호스트 A와 C의 정보를 알고 있다. 이제 호스트 A가 C에게 프레임을 전송하면,
스위치는 해당 정보가 호스트 C가 연결된 포트로만 가도록 나머지 포트를 제외하는 필터링 Filtering을 하고, 해당 포트로 프레임을 실제로 내보내는 포워딩 Forwarding을 수행한다.
만약 MAC 주소 테이블에 등록된 특정 포트에서 일정 시간 동안 프레임을 전송받지 못했다면, 해당 항목을 삭제하는 에이징 Aging을 수행하여 테이블을 관리한다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함

스위치는 가상의 LAN을 만드는 VLAN 기능을 지원한다. VLAN을 구성하면 한 대의 물리적 스위치를 가지고, 여러 대의 스위치를 운영하는 것처럼 논리적 단위로 LAN을 구성할 수 있다. VLAN을 구성하는 방법은 포트 기반과 MAC 기반으로 나뉜다.

# 포트 기반 VLAN
스위치의 포트가 VLAN을 결정하는 방식이다. 사전에 특정 포트에 VLAN을 할당하고 해당 포트에 호스트를 연결하여 VLAN에 포함시키는 형태다. 하지만 포트 기반은 포트 수가 부족해질 수 있다는 단점이 있다. 스위치를 계속 추가해서 연결해 확장할 수는 있지만 비효율적이고 한계가 있다.
이를 조금이나마 개선하기 위한 방법이 VLAN 트렁킹이다. 트렁크 포트를 따로 두어 스위치들을 효율적으로 연결하여 확장하는 방식이다. 이 때는 어떤 VLAN에 속하는지 식별하기 위한 정보를 추가한 확장된 이더넷 프레임 802.1Q를 사용한다. 이더넷 프레임 헤더 속에 32비트 크기의 VLAN 태그를 추가한 것이다.

헤더 페이로드 트레일러
프리앰블 수신지 MAC 주소 송신지 MAC 주소 VLAN 태그 타입/길이 데이터 FCS
8바이트 6바이트 6바이트 32비트 2바이트 16~1500바이트 4바이트

# MAC 기반 VLAN
사전에 설정된 MAC 주소를 따라 VLAN을 결정하는 방식이다. 송수신하는 프레임 속 주소를 보고 속할 VLAN에 포함시키는 방식이다.

출처 : 혼공네트 유튜브 강의 내 장표 캡쳐함


이렇게 해서 공부를 마쳐봤습니다
이제 숙제를 해볼까요

# 기본 숙제📚

# (p87) 확인문제 2번 "이더넷 프레임에서 ㄱ, ㄴ, ㄷ에 들어갈 올바른 단어를 보기에서 찾아서 빈칸을 채워보세요"
답 : ㄱ은 프리앰블, ㄴ은 송신지 MAC 주소, ㄷ은 FCS
프리앰블은 이더넷 프레임의 시작을 알리는 정보로 프레임 헤더의 맨 앞에 온다. FCS는 수신한 이더넷 프레임의 오류 여부를 확인하기 위한 오류 검출용 필드다. 자세한 건 위쪽에 표로 정리한 프레임 구조를 다시 참고하시라

# (p111) 확인문제 4번 "CSMA/CD와 관련해 서로 맞는 용어끼리 선으로 이어 보세요"
답 : CS - 캐리어 감지, MA - 다중 접근, CD - 충돌 검출
CSMA/CD의 풀 네임을 제대로 이해하고 있다면 바로 풀 수 있는 문제다. Carrier Sense Multiple Access with Collision Detection인데, Carrier Sense(캐리어 감지) + Multiple Access (다중 접근) with Collision Detection(충돌 검출)로 동작하는 프로토콜이다.

추가 숙제는 집에 케이블이 없는 관계로 생략합니다
예전에 다 정리해서 버렸는지 하나도 없다^^

어쨌든 이번 주도 공부 끝

반응형
반응형

지난번에 냅다 소개 겸 예고글을 올렸던 혼공학습단 13기 활동이 시작되었습니다

2024.12.20 - [공부/IT] - 한빛미디어와 함께 하는 혼공학습단 소개 및 13기 참여 예고

 

한빛미디어와 함께 하는 혼공학습단 소개 및 13기 참여 예고

올 한 해 공부를 너무 하지 않은 죄로...필기를 N번이나 봤는데 전부 필탈 했다죠 실화냐물론 점수차가 동점차(^^)부터 최대 3점까지긴 했지만어찌 되었든 처참한 결과에 충격을 금치 못했고...반

lv27.tistory.com

한빛미디어의 혼자 공부하는 시리즈 중에서
자기가 공부하고 싶은 걸 1권 선택해서
매주 커리큘럼 따라 공부하고 숙제 및 정리 글을 올리면 되는데요.

내가 13기에 신청한 건 "혼자 공부하는 네트워크"

출처 : 한빛미디어 공식 사이트

혼공학습단의 족장(?)님이 내주시는 숙제 커리큘럼은 아래와 같아요.

출처 : 혼공학습단 홈페이지

본격적으로 숙제를 하기 전에!
이번 주가 혼공단의 첫 번째 주니까
앞으로 6주간 공부할 책에 대해서도 잠시 살펴볼게요

책을 펼치면 가장 먼저 "학습 로드맵"이 나와요.
목차보다 먼저 나와서, 이 책을 통해 무엇을 배우게 될지 대략적으로 파악할 수 있어요.
게다가 책을 100% 활용하기 위한 여러 팁도 있는데요.
1. 핵심 개념과 용어를 따로 정리한 PDF 파일인 혼공 용어 노트
2. 혼자 이해 하기가 어렵다면 들을 수 있는 무료 강의
3. 심화 학습에 필요한 파일들을 보고 저자에게 직접 질문도 할 수 있는 깃헙 
마지막으로 4. 의지박약자를 강제로 공부하게 하는 혼공학습단

출처 : 한빛 미디어 공식 사이트 > 미리보기 기능

목차는 대제목만 살펴볼게요.
우리 혼공단 커리큘럼과 순서가 같아요.
매주 해당하는 내용에만 하이라이트를 쳐볼게요

<목차>
Chapter 1. 컴퓨터 네트워크 시작하기
Chapter 2. 물리 계층과 데이터 링크 계층
Chapter 3. 네트워크 계층
Chapter 4. 전송 계층
Chapter 5. 응용 계층
Chapter 6. 실습으로 복습하는 네트워크
Chapter 7. 네트워크 심화

그럼 1주차 공부를 시작해 볼까요

# 컴퓨터 네트워크란
   여러 장치가 연결되어 정보를 주고받을 수 있는 통신망을 의미
   많은 프로그램이 네트워크를 통해 다른 장치와 상호작용하며 실행됨
   >> 프로그램을 개발하거나 유지보수 할 때 네트워크 배경지식을 활용해야 하는 경우가 많기에 공부가 필요

# 네트워크의 기본 구조
   모든 네트워크는 노드, 노드를 연결하는 간선, 노드 간 주고받는 메시지로 구성됨
   노드 : 정보를 주고받을 수 있는 장치. 호스트, 서버, 네트워크 장비 등이 존재
   간선 : 정보를 주고 받을 수 있는 유무선의 통신 매체
   메시지 : 통신 매체로 연결된 노드가 주고받는 정보. 웹 페이지, 파일, 메일 등 다양

출처 : 한빛출판네트워크 홈페이지 > 채널.H

# 범위에 따른 네트워크 분류
   LAN(Local Area Network) : 가까운 지역을 연결한 근거리 통신망. 가정, 학교, 기업과 같이 한정된 공간의 네트워크 
   WAN(Wide Area Network) : 먼 지역을 연결하는 광역 통신망. 멀리 떨어진 LAN을 연결할 수 있는 네트워크로, ISP(Internet Service Provider)라는 인터넷 서비스 업체가 구축하고 관리. 국내에 대표적인 ISP는 3대 통신사가 있음.

더보기

더 세밀하게 나누면 LAN과 WAN 사이에 2개의 개념이 더 존재. 순서를 따지자면,
(넓음) WAN >> MAN >> CAN >> LAN  (좁음)
- MAN은 도시나 대도시 단위로 연결되는 규모의 네트워크를 의미
- CAN은 학교/회사의 여러 건물 단위로 연결되는 규모의 네트워크를 의미

# 메시지 교환 방식에 따른 네트워크 분류
   회선 교환 방식 : 메시지 전송로인 회선(Circuit)을 먼저 설정하고 이를 통해 메시지를 주고받는 방식. 요즘은 안 쓰이지만 전통적인 전화망과 같은 형태. 주어진 시간 동안 전송되는 정보의 양이 비교적 일정하다는 장점이 있으나, 반대로 회선의 이용 효율이 낮아질 수 있다는 단점도 존재. 하단의 왼쪽 그림 내 붉은 선처럼 회선을 먼저 설정해야 이 경로를 통해 메시지가 오갈 수 있음

출처 : 혼공학습단 홈페이지 > 읽을거리

   패킷 교환 방식 : 메시지를 패킷(Packet)이라는 작은 단위로 쪼개어 전송. 회선 교환 방식에 비해 네트워크 이용 효율이 상대적으로 높음. 상단의 오른쪽 그림처럼 패킷들이 회선을 타고 필요한 곳으로 이동하게 됨.
   패킷은 헤더, 페이로드, 트레일러로 구성. 패킷이 택배와 비슷한 개념이라,
   헤더(Header)는 어디로 가야 할지 적힌 택배 송장 같은 개념이고,
   페이로드(Payload)는 전송하고자 하는 데이터가 담겨 있는 택배 안의 내용물,
   트레일러(Trailer)는 부가적인 정보를 표시한 것.

출처 : 혼공학습단 홈페이지 > 읽을거리

# 주소/송수신지 유형에 따른 전송방식
   유니캐스트(Unicast) : 하나의 수신지에 메시지를 전송하는 방식. 1:1 전송 방식 
   브로드캐스트(Broadcast) : 자신을 제외한 네트워크상의 모든 호스트에게 전송하는 방식 
   멀티캐스트(Multicast) : 네트워크 내의 동일 그룹에 속한 호스트에게만 전송하는 방식
   애니캐스트(Anycast) : 네트워크 내 동일 그룹에 속한 호스트 중 가장 가까운 호스트에게만 전송하는 방식

# 프로토콜(Protocol)이란
   노드 간에 정보를 올바르게 주고받기 위해 합의된 규칙이나 방법. 서로 다른 장치들이 정보를 제대로 주고받으려면 필요.
   IP, HTTP, TCP, ARP 등 프로토콜별로 목적과 특징이 모두 다름

# 네트워크 참조 모델이란
   네트워크를 통해 정보를 주고받을 때 정형화된 여러 단계를 거치는데, 이를 계층으로 나눈 구조를 의미. 계층을 나누는 이유는,
   1) 네트워크 구성과 설계가 용이해지기 때문 : 각 계층의 역할이 정해져 있어 그에 맞게 프로토콜과 네트워크 장비를 구성 가능
   2) 네트워크 문제 진단과 해결에 용이 : 문제가 발생 시 계층별로 진단하면서 문제 발생 지점을 쉽게 추측하고 해결 가능

   네트워크 참조 모델은 크게 OSI 모델과 TCP/IP 모델로 나눠짐

여기부터는 심화 공부를 위해 다른 책과 블로그도 참고하며 정리했는데 비슷한/중복되는 개념도 그냥 적었습니다.
사담인데 모 기업에서 계층별로 프로토콜 구분하랬는데 공부 안 해서 틀렸거든요^ㅁ^
아무래도 대학 졸업장 반납해야 할 수준... 그래서 좀 힘줘서 자세히 공부해봤음다
하지만 프로토콜별로는 나중에 따로 정리할게요... 암튼 공부 킵고잉

# OSI 7계층 (낮은 >> 높은 순으로)

(1) 물리 계층 Physical Layer
- OSI 모델 최하단에 있는 계층
- 0과 1로 표현되는 비트 신호를 주고받음
- 주로 전기/기계/기능적 특성을 이용해 통신 케이블로 데이터를 전송하는 물리적인 장비 전송에 필요한,
   두 장치 간의 실제 접속과 전달 등 기계/전기/기능/절차적 특성에 대한 규칙을 정의
- 전송 단위(프로토콜 데이터 단위, PDU)는 비트 Bit
- 장비는 통신 케이블, 리피터, 허브(반이중) 등
- 관련 프로토콜로는 RS-232C, X.21 등

(2) 데이터 링크 계층 Data Link Layer >> 흐름/오류/순서 제어
- 네트워크 내 주변 장치 간의 정보를 올바르게 주고받기 위한 계층
- 물리 계층을 통해 주고받는 정보에 오류가 없는지 확인
- MAC 주소 체계를 통해 네트워크 내 송수신지를 특정
- 전송 과정에서 발생할 수 있는 충돌 문제를 해결하는 계층
- 물리적으로 연결된 인접한 개방 시스템들 간 신뢰성 있고 효율적인 정보 전송을 위해 시스템 간 연결 설정과 유지 및 종료를 담당
- 물리 계층을 통해 송수신되는 정보의 오류의 검출과 회복을 위한 오류제어와,
   송수신 측 속도 차이를 해결하기 위해 흐름을 관리는 흐름 제어
,
   프레임의 순서적 전송을 위한 순서 제어(재전송)
- 전송 단위인 프레임(frame)에 물리적 주소(MAC 주소)를 부여
- 장비는 랜카드, 브리지, 스위치(전이중), 이더넷 등
- 관련 프로토콜로는 HDLC, LAPB, LLC, MAC, LAPD, PPP 등

(3) 네트워크 계층 Network Layer
- 메시지를 다른 네트워크에 속한 수신지까지 전달하는 계층
- 네트워크 간 통신을 통해 인터넷을 가능하게 하는 계층
- IP 주소를 통해 통신하고자 하는 수신지 호스트와 네트워크를 식별하고, 원하는 수신지에 도달하기 위한 최적의 경로 결정(라우팅)
- 개방 시스템들 간 네트워크 연결을 설정/유지/해제하는 관리 기능과 데이터의 교환/중계 기능, 경로 제어, 패킷 교환, 트래픽 제어 등의 기능을 수행
- 라우터를 통해 경로를 선택하고 주소를 정하고(IP), 경로에 따라 패킷을 전달
= 발신지/목적지의 논리 주소가 추가된 패킷을 최종 목적지까지 전달 (IP 헤더 붙음)
- 전송 단위는 패킷
- 장비는 라우터
- 관련 프로토콜로는 IP, ICMP, IGMP, ARP, RARP, X.25 등

더보기

(참고) IP의 특징
- 신뢰성(에러 제어) / 흐름 제어 기능 없음
- 비연결성 / 비신뢰성
- 인터넷 주소 지정과 라우팅
- 패킷 단편화와 재조립
- 데이터그램 기반, 패킷 전송

(4) 전송 계층 Transport Layer
- 신뢰성 있고 안정성 있는 전송을 해야 할 때 필요한 계층
- OSI 7계층 중 하위 3계층과 상위 3계층의 인터페이스 담당
- 패킷의 흐름을 제어하거나 전송 오류를 점검해 신뢰성 있고 안정적인 전송이 이루어지도록 함
   (패킷이 정상적으로 보내졌는지, 중간에 유실은 없었는지, 순서가 뒤바뀌지는 않았는지 확인)
- 논리적 안정과 균일한 데이터 전송 서비스를 제공해 종단 시스템 간(end to end) 투명한 데이터 전송 지원
- 종단 시스템 간(단말기 사이에) 전송 연결 설정, 데이터 전송, 연결 해제 기능
- 주소 설정, 다중화(분할 및 재조립), 오류 제어, 흐름 제어
- 두 지점 간 신뢰성 있는 데이터 송수신을 지원하는 역할, 신호를 분산하고 다시 합치는 과정을 통해 에러와 경로를 제어
- 전송 단위는 세그먼트
- 장비는 게이트웨이
- 관련 프로토콜로는 TCP, UDP
   TCP는 신뢰성, 연결지향적인 프로토콜. 패킷의 전송. 오류/혼잡/흐름 제어
   UDP는 비신뢰성, 비연결성, 실시간성을 가진 프로토콜

(5) 세션 계층 Session Layer
- 통신을 주고받는 호스트의 응용 프로그램 간 연결 상태인 "세션"을 관리하는 계층
- 송수신 측 간의 관련성 유지, 대화제어 담당
- 대화(회화) 구성 및 동기 제어, 데이터 교환 관리 기능
- 송수신측간의 데이터 전송, 연결 해제, 동기 처리 등의 대화를 관리하기 위해 토큰 사용
- 송수신측간의 대화 동기를 위해 전송하는 정보의 일정한 부분에 체크점을 두어 정보의 수신 상태를 체크함 (체크점=동기점)
- 동기점은 오류가 있는 데이터 회복을 위해 사용하는 것
   소동기점 : 하나의 대화 내, 수신 측으로부터 확인 신호 ACK 안 받음
   대동기점 : 전송하는 데이터의 처음/끝, 확인 신호 받음
- API. Socket. TCP/IP 세션 체결. 포트 port 번호 기반 통신 세션

(6) 표현 계층 Presentation Layer
- 서로 다른 표현 형태를 갖는 시스템 간 상호 접속을 위해 필요한 계층 like 번역가
- 코드 변환(사람 언어인 문자를 컴퓨터가 이해 가능한 코드로 변환)
- 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식(포맷) 변환, 문맥 관리 기능

(7) 응용 계층 Application Layer
- OSI 참조 모델 최상단에 있는 계층
- 사용자&사용자가 이용하는 응용 프로그램과 가장 밀접한 계층
- 사용자(응용 프로그램)이 OSI 환경에 접근할 수 있도록 서비스 제공
- HTTP(80), FTP(21), SMTP(25), SNMP, POP3, IMAP, Telnet(23), DNS(53) 
* 세션부터 응용까지 전송 단위는 메시지

정리하자면 아래 그림의 OSI 7계층과 같답니다. 네트워크를 이론적으로 기술하고 이해할 때 사용하는 "이상적 설계" 같은 거래요.
그럼 계속해서 오른쪽의 TCP/IP 모델도 볼까요? 구현에 중점을 두어 실제 사용하기 위한 "실용적 구현" 같은 거라고 하네요.
이런 차이점이 있다는 건 처음 알았다.

출처 : https://www.nossi.dev/06936fc0-eb03-4a53-8e4f-2e5dc71508dd

# TCP/IP 4 계층 (낮은 >> 높은 순으로)

(1) 네트워크 액세스/인터페이스 계층 Network Access/Interface Layer
- OSI 모델에서의 물리와 데이터 링크 계층과 유사   (간혹 데이터 링크 only로 다르게 보는 시선도 있긴 함)
- 실제 데이터(프레임)을 송수신하는 역할
- 에러 검출, 패킷의 프레임화
- 네트워크 접근 방법, 프레임 포맷, 매체에 독립적으로 동작하도록 설계
- 물리적인 주소로 MAC 사용
- LAN, 패킷망 등에 사용됨
- 이더넷, IEEE 802, HDLC, X.25, RS-232C, ARQ 등

(2) 인터넷 계층 Internet Layer
- OSI 모델에서의 네트워크 계층과 유사
- 데이터 전송을 위한 주소 지정(어드레싱), 경로 설정(라우팅), 패키징 기능 제공
- 네트워크 상 최종 목적지까지 정확하게 연결되도록 연결성 제공
- IP, ICMP, IGMP, ARP, RARP

(3) 전송 계층 Transport Layer
- OSI 모델에서의 전송 계층과 유사
- IP와 Port를 이용하여 프로세스와 통신
- 호스트들 간의 신뢰성 있는 통신 제공
- 통신 노드 간 연결 제어
- TCP, UDP, RTCP

(4) 응용 계층 Application Layer
- OSI 모델에서의 세션, 표현, 응용 계층을 합친 것과 유사
- 응용 프로그램 간 데이터 송수신 제공, 프로토콜 정의
- 다른 계층 서비스에 접근할 수 있게 하는 애플리케이션 제공
- HTTP(80), HTTPS, FTP(21), SMTP(25), SNMP, POP3, IMAP, Telnet(23), DNS(53)

책에서는 각 계층을 추후에 자세히 학습할 예정이라고 했다.
나중에 해당 챕터에서 공부하면서 비교하고 조금 더 압축적으로 요약해보고자 한다.

#캡슐화와 역캡슐화
   패킷은 송신 과정에서 캡슐화가, 수신 과정에서 역캡슐화가 이루어짐. 네트워크 참조 모델도 마찬가지
   정보 전송 시 각 계층에서는 상위 계층으로부터 받은 패킷을 페이로드 삼아, 프로토콜에 걸맞은 헤더(or 트레일러)를 덧붙인 후 하위 계층으로 전달하는데 이 과정이 캡슐화(encapsilation)
   역캡슐화는 반대로 메시지를 수신할 때 각 계층에서 헤더를 확인한 뒤 제거하고 상위 계층으로 올려 보내는 과정을 의미

출처 : 한빛출판네트워크 홈페이지 > 채널.H

# 프로토콜 데이터 단위 PDU(Protocol Data Unit)
   각 계층에서 송수신되는 메시지의 단위
   상위 계층에서 전달받은 데이터에 현재 계층의 프로토콜 헤더(및 트레일러)를 추가하면 현재 계층의 PDU

OSI 계층 PDU
응용 데이터 혹은 메시지
표현
세션
전송 세그먼트(TCP), 데이터그램(UDP)
네트워크 패킷 (간혹 IP 데이터그램)
데이터 링크 프레임
물리 비트

 

이렇게 해서 "혼자 공부하는 네트워크"의 챕터 1 컴퓨터 네트워크 시작하기 파트를 공부해 봤는데요.
그냥 가기는 아쉬우니 족장님의 추가 숙제📚를 풀어보겠습니다.

# (p35) 확인문제 2번 "네트워크에 대한 설명으로 옳지 않은 것을 골라 보세요"
   네트워크에 대한 이해는 프로그램을 만드는 과정에 도움을 주기에 1번 선지가 오답
   컴퓨터 네트워크와 인터넷에 대해 설명하면서 프로그램 개발/유지보수 같은 상황에서 네트워크 배경지식을 활용하는 경우가 많다고 언급함

# (p73) 확인문제 2번 "네트워크 참조 모델에 대한 설명으로 옳지 않은 것을 골라 보세요"
   TCP/IP 모델은 네트워크 액세스, 인터넷, 전송, 응용 계층으로 구성된 4계층 모델이라 2번 선지가 오답

그럼 혼공단 13기 혼공네트 1주차 공부 진짜 끝!

 

반응형
반응형

올 한 해 공부를 너무 하지 않은 죄로...
필기를 N번이나 봤는데 전부 필탈 했다죠 실화냐
물론 점수차가 동점차(^^)부터 최대 3점까지긴 했지만
어찌 되었든 처참한 결과에 충격을 금치 못했고...
반성의 의미로 여러 가지 활동을 하면서
공부하려고 스스로를 옥죄는 중입니다.
그중 하나가 바로 한빛미디어의 혼공학습단!
뭐 하는 거냐면...
한빛미디어의 전공 서적 중 하나를 골라서
한 주간 공부하고 정리한 내용을 공부하는 건데요
주 1회씩 총 6주 동안 진행합니다
요약하자면 6주 동안 책 1권 뿌시기!

책은 한빛미디어의 혼자 공부하는 시리즈 중에서
자기가 공부하고 싶은 걸 1권 선택하면 된답니다.
프로그래밍 언어부터 컴퓨터 과학이나
데이터 분석이랑 머신러닝까지 분야가 매우 다양해요

혼공학습단 활동은 이렇게 할 거래요
1) 도서별 커리큘럼에 따라 공부하고 주어진 숙제 풀기
2) 한 주간 공부한 내용과 숙제를 정리하여 블로그, 노션 등 원하는 채널에 업로드
3) 패들렛에 블로그 링크 공유하고 함께 보기

도서별 커리큘럼은 이런 식으로 제공되는데요
혼자서 책 한 권 읽기 힘든데 너무 친절하고 좋다고 생각합니더...
유튜브에 강의 목록도 따로 정의되어 있더라구요

혼공학습단 활동으로 얻는 혜택은
1) 책 1권을 스스로 공부하고 얻는 지식과
2) 내가 해냈다는 뿌듯함과 자기만족(?)
그리고 6주를 무사히 마친다면
3) 한빛 마일리지 20,000점 획득
열심히 공부한다면
4) 여러 간식까지~!~!

혼자 공부하는데 이렇게까지 해준다?!
그래서 바로 신청 갈겼다
사실 욕심이 많은 자라 두 권 하고 싶었는데
신청서 페이지에서 극구 말리시더라,,,
13기 하구 14기도 해야지~
궁금해하실 13기 활동 기간은
25년 1월 6일부터 2월 23일까지 6주간이다.

13기 신청은 12월 29일까지만 받고 있다
관심 있으면 달려가세요

그림을 누르면 혼공학습단 모집글로 이동합니다

13기 참여 예고라고 적었는데
참여 대상자 발표는 사실 12월 31일임^^7
시크릿이라고 들어보셨나요
말하면 사실될일 뽑아조요

반응형

+ Recent posts