네트워크란 무엇인가?
- 네트워크란?
- 노드들이 데이터를 공유할 수 있게 하는 디지털 전기통신망의 하나
- 분산되어 있는 컴퓨터를 통신망으로 연결한 것
- 네트워크에서 여러 장치들은 노드 간 연결을 사용하여 서로에게 데이터를 교환
- 노드: 네트워크에 속한 컴퓨터 또는 통신 장비를 뜻하는 말
- 인터넷이란?
- 문서, 그림 영상과 같은 여러가지 데이터를 공유하도록 구성된 세상에서 가장 큰 전세계를 연결하는 네트워크
- 흔히 www를 인터넷으로 착각하는 경우가 많은데 www는 인터넷을 통해 웹과 관련된 데이터를 공유하는 것
- 네트워크 안에 인터넷 포함, 네트워크는 통신망, 인터넷은 여러개의 통신망 중에서 가장 큰 네트워크 통신망
- 네트워크 분류 - 크기
- LAN: Local Area Network, 하나의 장비(스위치)에 연결되어 있는 여러 시스템이 속한 네트워크, 근거리 통신망

- WAN: Wide Area Network, 하나 이상의 LAN으로 구성된 네트워크, 멀리 있는 지역을 한데 묶은 네트워크, 가까운 지역끼리 묶인 LAN과 LAN을 다시 하나로 묶은 것
- PAN: Personal Area Network, 개인이 사용하는 작은 단위의 네트워크
- MAN: Metropolice Area Network, 하나의 도시 단위의 네트워크
- 네트워크 분류 - 구성 방법
- 스타형: 중앙에 있는 네트워크 장비를 통해 모두 연결된 형태, ex) 공유기, LAN 대역의 네트워크 장비들을 연결시킬 때(하나의 LAN 대역을 만들 때), 중앙 장비에 모든 노드가 연결된 성(star)형
- 중앙의 장비가 고장나면 모든 시스템들이 통신 불가
- 일반적으로 스위치 장비를 통해 2계층, LAN 대역을 구성
- 망형: 모든 시스템들이 각각 개별적으로 연결됨, 비용이 많이 듦, 여러 노드들이 서로 그물처럼 연결된 Mesh형
- 특정 장비가 고장나도 다른 장비끼리 통신하는데 문제 없음
- 일반적으로 라우터 장비를 통해 3계층, WAN 대역을 구성
- 버스형: 하나의 선을 통해 여러 시스템을 연결
- 트리형: 시스템을 여러 계층으로 나눠서 연결
- 링형: 인접 시스템을 1:1로 연결
- 혼합형: 여러 형태를 조합하여 구성한 형태, 실제 인터넷은 여러 형태를 혼합한 형태인 혼합형
- 네트워크 통신 방식
- 유니캐스트: 1:1 통신을 할 때 사용하는 방식, 특정 대상과 통신을 할 때 사용하는 방식
- 멀티캐스트: 1:n 특정 그룹과 통신하는 방식
- 브로드캐스트: 1:n 네트워크 내의 모든 시스템과 통신하는 방식, 불특정 다수와 통신
- 네트워크 프로토콜
- 네트워크를 통해 시스템들끼리 통신을 효율적으로 하기 위한 여러 가지 규칙, 약속, 양식, 프로토콜은 일종의 약속, 양식, 네트워크에서 노드와 노드가 통신할 때 어떤 노드가 어느 노드에게 어떤 데이터를 어떻게 보내는지 작성하기 위한 양식, 각 프로토콜도 해당 프로토콜만의 양식이 있음
- Ethernet(2계층): MAC 주소, 가까운 곳과 연락할 때
- ARP, IPv4, ICMP(3계층): IP 주소, 멀리 있는 곳과 연락할 때
- TCP, UDP(4계층): 포트번호, 여러가지 프로그램으로 연락할 때
- 여러가지 프로토콜: 여러 프로토콜들로 캡슐화 된 패킷

실습1(tracert)
- 구글과 나는 어떻게 연결되어 있는지 확인해보기
- cmd에서 tracert 8.8.8.8(구글 DNS 서버의 IP 주소) 명령어로 확인
- 요청 시간이 만료되었습니다.(IP 주소 비공개, 추적 불가능)
- 여러 개의 네트워크 대역들을 넘어갈 때마다 표시
- 지구 반대편에 있는 구글 DNS 서버까지 찾아갈 때 n개의 네트워크 대역을 거쳐감
실습2(Wireshark)
- wireshark: 실제 컴퓨터를 가지고 네트워크 통신을 할 때 네트워크 프로토콜을 캡처해서, 어떤 프로토콜을 사용하고 보냈고 받았는지 보여주는 프로그램
- wireshark 설치 프로그램을 이용해서 설치, 설치 후 실행
- Npcap(wireshark가 사용하는 라이브러리) 설치 해제
- WinPcap 설치(실행했을 때 인터페이스가 안보이면 winPcap 설치)
실습3(프로토콜 직접 확인해보기)
- wireshark를 이용해서 프로토콜 캡처 후 확인해보기
- Hypertext Transfer Protocol: html, js, css 파일 받아와 웹 브라우저에서 보여줌 // 네이버
- Internet Protocol Version 4: 나와 네이버의 통신(장거리 통신)
- Ethernet ~: 특정한 컴퓨터 찾아가기, 가까운 곳 통신할 때
- Transmission Control Protocol: 크롬이라는 프로그램이 네이버에 있는 프로그램(웹 서버 프로그램)과 연결
- 프로토콜은 위와 같이 각각의 용도에 맞게 여러 개/가지들이 같이 사용이 되고, 이렇게 같이 사용되는 모습을 encapsulation이라 함
따라學IT 02. 네트워크의 기준! 네트워크 모델
<참고>
- OSI 7 계층
- 7, 응용, 여러가지 서비스를 제공하는 실직적인 프로그램, 사용자 인터페이스
- 6, 표현, 데이터를 어떤 형식으로 전달할지 정하는 계층, ex) 그림파일(jpeg, png), 압축파일(zip, tar.gz), 일반 텍스트
- 5, 세션, 논리적인 연결을 정의하는 계층, 네트워크 장치들간의 연결 설정의 유지 동기화 등을 어떻게 수행할지를 정의
- 4, 전송, 포트주소를 이용해서 통신, 오류 제어(신뢰성 유무), 특정 프로그램 간의 통신(웹 브라우저 and 웹 서버)
- 3, 네트워크, IP 주소를 이용해서 통신, 전송 경로를 선택하여 어느 경로로 가는 것이 최선인지를 결정, 특정 네트워크를 찾아가는 역할
- 2, 데이터 링크, MAC 주소를 이용해서 통신, 특정 네트워크에서 특정 PC를 찾아가는 역할
- 1, 물리, 상위 계층에서 캡슐화된 데이터를 bit 단위로 변경, 전기신호로 전송하고 받은 전기신호를 bit 단위로 해석하는 역할
따라學IT 03. 가까이 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다
-
2계층
- 2계층에서 하는 일
- 2계층의 기능
- 하나의 네트워크 대역, 즉, 같은 네트워크 상에 존재하는 여러 장비등 중에서 어떤 장비가 어떤 장비에게 보내는 데이터를 전달
- 추가적으로 오류제어, 흐름제어 수행
- 2계층 대표적인 장비 - 스위치
- 2계층의 네트워크 크기
- 2계층은 하나의 네트워크 대역 LAN에서만 통신할 때 사용
- 다른 네트워크와 통신할 때는 항상 3계층이 도와주어야 함
- 3계층의 주소와 3계층의 프로토콜을 이용하여야만 다른 네트워크와 통신이 가능함
-
2계층에서 사용하는 주소 - MAC 주소
- MAC 주소
- 2계층 주소 체계, Media Access Address
- 물리적인 주소, 하드웨어 장치
- LAN에서 통신할 때 사용하는 주소
- (LAN카드=Network Interface Card, NIC)에 부여되어 있는 주소
- 48bit, 6바이트, (1비트 0 또는 1, 8비트=1바이트)
- 각각의 NIC마다 전세계 유일한 주소를 가지고 있음
- MAC 주소 표기 방식
- 16진수로 표기 (10진수는 0-9로 모든 수를 표현, 16진수는 0-9, A-F로 모든 수를 표현)
- AA:BB:CC:DD:EE:FF 또는 AA-BB-CC-DD-EE-FF 처럼 1바이트마다 :, -로 구분해서 표기
- MAC 주소 구성
- AA:BB:CC : 앞으 3바이트는 OUI(IEEE에서 부여하는 일종의 제조회사 식별 ID), LAN카드(NIC)를 만들고 해당 NIC에 주소를 부여하는 회사의 고유값
- DD:EE:FF : 뒤의 3바이트는 해당 회사에서 생산되는 제품의 고유번호(제조사에서 부여한 고유번호)
-
2계층의 프로토콜

- Ethernet
- LAN에서 통신할 때 사용하는 Ethernet 프로토콜
- 14바이트
- 목적지 주소: 데이터를 전달받을 상대방 시스템의 MAC 주소 6바이트(16진수 12개) // Destination Address
- 출발지 주소: 데이터를 전달하는 시스템의 MAC 주소 6바이트(16진수 12개) // Source Address
- 상위 프로토콜 타입: 2바이트, IPv4(0x0800), ARP(0x0806) // Ethernet Type - 프로토콜 타입 // 페이로드(DATA)에 미리 3계층 프로토콜을 미리 알려줌, 전기적 신호로 데이터가 전달되는데, (미리) 상위 프로토콜이 뭔지 알려줌으로써 분석을 용이하게 함
-
실습1 - 내 PC의 MAC 주소 확인해보기
- cmd > ipconfig/all
-
실습2 - Ethernet 프로토콜 캡처
- Wireshark를 이용해서 프로토콜 캡처 후 확인해보기
-
실습3- Ethernet 프로토콜 분석
- 프로토콜의 구조 그림을 함께 보면서 실제 패킷과 비교해보기
ref.
따라學IT 04. 실제로 컴퓨터끼리는 IP주소를 사용해 데이터를 주고받는다
-
3계층
- 3계층의 기능
- 3계층에서 하는 일
- 다른 네트워크 대역, 즉 멀리 떨어진 곳에 존재하는 네트워크까지 어떻게 데이터를 전달할지 제어하는 일을 담당
- 발신에서 착신까지의 패킷의 경로를 제어
- LAN과 LAN을 연결시켜주는 것, 서로 다른 LAN 대역을 연결시켜 주는 역할
- 3계층의 대표적인 장비 - 라우터
-
3계층에서 사용하는 주소 - IP주소
- IP주소
- 3계층 주소 체계, Internet Protocol Address Version 4
- 논리적인 주소
- 32bit - 4바이트
- WAN에서 통신할 때 사용하는 IP 주소

- IPv4 주소 : 현재 PC에 할당된 IP 주소
- 서브넷 마스크 : IP 주소에 대한 네트워크의 대역을 규정하는 것
- 게이트웨이 주소 : 외부와 통신할 때 사용하는 네트워크의 출입구
- IP 주소를 이용해 MAC 주소를 알아오는 ARP 프로토콜

- IP 주소 표기 방식
- 10진수로 표기하며 192.168.0.100 다음과 같이 각 필드를 .으로 구분, 각 필드는 0~255까지 올 수 있고 이는 1바이트로 표현할 수 있는 수
- 0.0.0.0 ~ 255.255.255.255 (2진수 8자리로 표현할 수 있는 숫자까지)
- 00000000.00000000.00000000.00000000 ~ 11111111.11111111.11111111.11111111
- IP주소의 종류
- 네트워크 ID : 해당 네트워크 대역에서 가장 작은 IP주소, 해당 네트워크 대역을 대표하는 IP
- 브로드캐스트 주소: 해당 네트워크 대역에서 가장 큰 IP주소, 해당 네트워크 대역에 모든 시스템에 통신을 할 때 사용하는 IP
- 호스트 할당 가능한 주소 : 해당 네트워크 대역에서 가장 작은 IP주소 +1 ~ 해당 네트워크 대역에서 가장 큰 IP주소 -1
- 게이트웨이 주소 : 해당 네트워크 대역에서 가장 작은 IP주소 +1 or 해당 네트워크 대역에서 가장 큰 IP주소 -1
- IP주소의 역사
- IP 주소는 오랜 전부터 지금까지 계속해서 사용해오고 있는 네트워크 통신을 하는데 있어서 굉장히 중요한 주소
- 하지만 다양한 네트워크 장비가 발전해오면서 IP주소는 점점 부족하게 되었고 이를 해결하기 위한 다양한 방법이 제시됨
- 그러면서 IP주소는 다음과 같이 점점 발전해옴
- 클래스풀한 IP주소 -> 클래스리스한 IP주소 -> 사설IP와 공인IP -> IPv6
- (낭비가 심한) 클래스풀한 IP주소(초창기에 사용)
A클래스
- 10진수로 표시 : 0.0.0.0 ~ 127.255.255.255
- 2진수로 표시 : 0 0000000.00000000.00000000.00000000 ~ 01111111.11111111.11111111.11111111
- (필드).(필드).(필드).(필드)
- 첫번째 필드까지는 네트워크 대역을 구분하는 주소 128개, 나머지는 호스트(PC, 2^24개)를 구분
B클래스
- 10진수로 표시 : 128.0.0.0 ~ 191.255.255.255
- 2진수로 표시 : 10 000000.00000000.00000000.00000000 ~ 10111111.11111111.11111111.11111111
- 두번째 필드까지는 네트워크 대역을 구분하는 주소, 나머지는 호스트(PC)를 구분
C클래스
- 10진수로 표시 : 192.0.0.0 ~ 223.255.255.255
- 2진수로 표시 : 110 00000.00000000.00000000.00000000 ~ 11011111.11111111.11111111.11111111
- 세번째 필드까지는 네트워크 대역을 구분하는 주소, 나머지는 호스트(PC, 256개)를 구분
D클래스(멀티캐스트)
- 10진수로 표시 : 224.0.0.0 ~ 239.255.255.255
- 2진수로 표시 : 1110
- 0000.00000000.00000000.00000000 ~ 11101111.11111111.11111111.11111111
- 멀티캐스트용으로 사용하는 주소
E클래스(예약)
- 10진수로 표시 : 240.0.0.0 ~ 255.255.255.255
- 2진수로 표시 : 11110 000.00000000.00000000.00000000 ~ 11111 111.11111111.11111111.11111111
- 연구목적으로 사용하지 않는 IP주소
-
(낭비되지 않게 클래스를 나누어 사용하지 않는)클래스리스한 IP주소
- 서브넷 마스크의 도입(IP 주소와 꼭 함께 쓰임)
- 클래스풀한 네트워크 대역을 나눠주는데 사용하는 값
- 어디까지가 네트워크 대역을 구분하는데 사용하고 어디서부터 호스트를 구분하는데 사용하는지 지정
- 32bit 4바이트
- 255.255.255.192 -> 11111111.11111111.11111111.11000000
- 2진수로 표기했을 때 1로 시작, 1과 1사이에는 0이 올 수 없다는 규칙을 가지고 있음
- ex) 192.168.100.68 255.255.255.192 와 같이 IP주소와 서브넷마스크를 쓰면?
- 192.168.100.0와 같이 C클래스에 해당하는 네트워크를 192.168.100.0, 192.168.100.64, 192.168.100.128, 192.168.100.192와 같이 4개의 작은 네트워크 대역으로 나눈 것이고 해당 IP 주소는 2번째 네트워크에 해당하는 것이다.
- 서브넷팅
- 211.100.10.0/24 네트워크를 각 네트워크 당 60개의 호스트가 사용할 수 있는 네트워크 대역으로 쪼개면? (다시 합치면 슈퍼?넷팅)
- 11010011.01100100.00001010. 00 000000 211.100.10.0/26
11010011.01100100.00001010. 01 000000 211.100.10.64/26
11010011.01100100.00001010. 10 000000 211.100.10.128/26
11010011.01100100.00001010. 11 000000 211.100.10.192/26
11111111.11111111.11111111. 11 000000
- 1) 어떤 서브넷마스크가 효율적인가?
/26, 255.255.255.192
- 2) 몇 개의 네트워크 대역으로 나눠지는가?
4개
- 3) 하나의 네트워크 대역에 실제로 할당 가능한 호스트의 수는?
네트워크 ID와 브로드캐스트 주소를 제외한 62개
- 4) 마지막 네트워크 대역의 네트워크ID는?
211.100.10.192
- 5) 첫번째 네트워크 대역의 브로드캐스트 주소는?
211.100.10.63
- 6) 두번째 네트워크 대역의 할당 가능한 IP 주소의 범위는?
211.100.10.65 ~ 211.100.10.127
- 사설 IP & 공인 IP(+클래스리스 IP => 현재 IPv4 의미)
- 공인 IP 하나에 새로운 네트워크 대역인 2^32개의 사설 네트워크 대역을 생성
- 네이버에 '내 IP 주소'치면 나오는 ip는 공인 IP, cmd ipcofig에 나오는 ip는 사설 IP
- 공인 IP 하나에 0.0.0.0~255.255.255.255의 IP를 생성
- 사설 IP는 외부 네트워크 대역에서는 보이지 않음
- 사설 IP는 내부에서 외부로 나갔다가 들어오는 것만 가능하고 외부에서 내부로 직접 통신은 따로 설정을 통해서만 가능(포트포워딩)
- 장점 : 내부 네트워크의 보안 가능
- 내부 네트워크에 있는 호스트들은 사설 IP를 할당 받고,, 외부 네트워크와 통신할 때는 공인 IP로 변경되서 통신함
- 통신할 때 NAT Table에 해당하는 사설 IP를 기록하고 외부 네트워크에서 응답이 올 때 해당하는 기록을 보고 해당하는 사설 IP로 데이터를 전달함
- 현재 거의 대부분의 일반용, 가정용 PC 에서는 사설 IP를 사용
- NAT(Network Address Translation)
- 특정 IP를 특정 IP로 바꿔주는 기술
- 공인 IP - 집에서 사용하는 인터넷 공유기
-
특수한 IP 주소
- Wildcard 0.0.0.0 : '나머지' 모든 IP
- 나 자신을 나타내는 주소 127.0.0.1
- 어딘가로 가려면 일단 여기로, 게이트웨이 주소 :
- 일반적으로 공유기의 IP를 사용
- 쓸 수 있는 IP 중 가장 낮거나(작거나) 가장 높은(큰) IP를 사용
- 정해져 있지 않음
- 외부 세상으로 나가는 문, 설정이 안되어 있으면 오고 가는 문이 없기 때문에 인터넷이 안됨(+ DNS 주소)
- 네트워크 ID
- IP주소 및 서브넷 마스크를 2진수로 표현 두 주소를 AND 연산
- 브로드캐스드 주소
- 호스트를 구분하는 주소 부분을 모두 1로 채움
- 사용 가능 IP 범위
- 네트워크 ID + 1 ~ 브로드캐스트 주소 -1 까지
-
실습 1 - 내 PC의 사설 IP 주소 확인해보기
-
실습 2 - 내 PC의 공인 IP 주소 확인해보기
따라學IT 05. 통신하기 전 반드시 필요한 ARP 프로토콜
이론
실습
-
실습 1 - ARP 테이블 확인해보기
- cmd에서 arp -a 로 확인
- 통신했던 컴퓨터들의 주소는 ARP 테이블에 남음
- 같은 네트워크 대역에서만 쓰임
-
실습 2 - ARP 프로토콜 분석하기
- Wireshark를 이용해서 ARP 프로토콜을 캡쳐하고 분석해보기
- Info 탭에 '?'가 있는 것 - 요청, 없는 것 - 응답
따라學IT 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다
IP 프로토콜 구조
- IPv4 프로토콜
- IPv4가 하는 일
- 네트워크 상에서 데이터를 교환하기 위한 프로토콜
- 데이터가 정확하게 전달될 것을 보장하지 않음
- 중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있음(악의적으로 이용되면 Dos 공격이 됨)
- 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장함
- IPv3 프로토콜의 구조

- version : 무조건 4, IPv6는 구조 모양 자체가 다름
- IHL(Internet Head Length) : IP 헤더의 길이(20~60/4) - 일반적으로 5(0101)
- Type of Service(TOS) : 0, 옛날에 쓰던 것, 지금은 안씀
- Total Length : 페이로드까지의 길이까지 합친 전체의 길이
- 하나의 세트로 보면 됨 : 데이터가 큰 걸 보낼 때 최대 전송 단위가 있기 때문에 잘게 잘라서 보냄, 그때 사용되는 값들, 쪼개진 애들을 알아볼 수 있게 하는 값
- Identification : ID 값, 하나의 데이터는 같은 ID 값을 가짐
- IP Flags : 조각화가 됐냐 안됐냐, 3비트, x - 첫번째는 안씀, D_Don't Fragmentation(패킷을 보내는 사람이 데이터를 안쪼개서 보내겠다고 명시하는 것), M_More Fragmentation(조각화해서 보낼 때, 첫번째 패킷 뒤에 본인 패킷 말고 더 있음을 알려주는 것)
- Fragment Offset : 13비트, 원래대로 복구할 때 쪼개진 데이터의 순서를 알아볼 수 있게 offset(어느 기준으로부터 얼마만큼 떨어져 있음)을 지정해줌
- Time To Live : 패킷이 살아있을 수 있는 시간을 지정, 패킷이 계속 살아있어 계속 돈다면 DoS 공격이 될 수 있음, 장비 하나 넘어갈 때마다 -1, 운영체제마다 설정하는 값이 다름(윈도우 128, 리눅스 64)
- Protocol : 이더넷의 이더넷 타입과 같은 역할로 상위 프로토콜이 무엇인지 알려주는 역할
- Header Checksum : 헤더가 오류가 있는지 없는지 확인하는 값, 헤더에 있는 여러가지 필드를 가지고 값을 계산하여 세팅하여 보냄, 받는 쪽에서는 세팅된 값을 다시 계산하여 checksum 값과 비교
- Source Address : 출발지 IP, 4바이트
- Source Address : 목적지 IP, 4바이트
- IP Option : 4바이트씩 최대 10개까지 붙을 수 있음(보통 20바이트, 최대 60바이트)
ICMP 프로토콜
- ICMP 프로토콜
- ICMP가 하는 일
- ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)
- 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지를 전송받는 데 주로 쓰임
- 프로토콜 구조의 Type과 Code를 통해 오류 메시지를 전송받음
- ICMP 프로토콜 구조 : 특정 대상과 내가 통신이 잘 되는지 확인

- Type : 카테고리/대분류

- 0, 8 : 0 - Echo Reply 응답, 8 - Echo 요청
- 3, 11 : 3 - destination unreachable /보통 목적지까지 아예 가지 못함/가는 경로상의 문제(중간에 라우터나 경로 설정을 잘못하여 목적지까지 아예 못간 경우), 11 : time exceeded /목적지까지 갔는데 응답을 못받음/상대방의 문제(보통 방화벽)
- 5 : ICMP redirect - 옛날에 쓰던 것, 원격지에 있는 상대방의 라우팅 테이블을 ICMP를 가지고 수정할 때 사용, 남의 것 수정 가능해서 보안상 중요해짐, 요새는 잘 안씀
- Code : 소분류
- Checksum
- Other message specific information...
IPv4, ICMP 프로토콜 실습
- wireshark 실행
- cmd에서 아무에게나 ping IP 주소
- wireshark에서 icmp 확인
- 앞에 8바이터만 icmp 나머지는 무의미한 data
- ipv4 - header length 20바이트/4 = 5 바이트, TOS -> Differentiated Services Field
라우팅 테이블 및 전송과정
- 라우팅 테이블 : 3계층의 대표적인 역할이 최적의 경로를 저런 프로토콜로 찾아가는 건데, 그 최적의 경로를 지도처럼 저장해 놓고 있는 것
- cmd : netstat -r
- 다른 네트워크와 통신 과정
- 다른 네트워크까지 내 패킷의 이동 과정/내 컴퓨터에서 보낸 패킷이 다른 네트워크의 컴퓨터까지 어떻게 이동하는가
- A의 라우팅 테이블에 B의 네트워크 대역이 있어야만 통신이 가능
- A에서 통신 확인을 위해 프로토콜을 작성하여 보냄
- 이더넷 프로토콜은 네트워크 대역이 바뀔 때마다 새로 작성
라우팅 테이블 확인 실습
조각화 이론
- IPv4의 조각화
- 조각화란?
- 큰 IP 패킷들이 적은 MTU(Maximum Transmission Unit, 데이터의 최대 전송 단위, 1500 바이트)를 갖는 링크를 통하여 전송되려면 여러 개의 작은 패킷으로 쪼개어/조각화 되어 전송돼야 함
- 즉, 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환이 필요함
- 일단 조각화되면, 최종 목적지에 도달할 때까지 재조립되지 않는 것이 일반적
- IPv4에서는 발신지 뿐만 아니라 중간 라우터에서도 IP 조각화가 가능
- IPv6에서는 IP 단편화가 발신지에서만 가능
- 재조립은 항상 최종 수신지에서만 가능
- 여러 개의 패킷으로 조각화 된 패킷

- MTU에서 IPv4 프로토콜 크기(20 바이트)만큼을 빼고 계산
- MF 1 : More Fragment, 내 뒤에 fragment가 더 있음
- Offset : 순서, 앞의 데이터 크기/8
- Identification : ID 값은 다 같음
조각화 실습
보내려는 데이터 크기 : 2379
MTU : 980
/ 2379 /
/960/ /960/ /459/
(MTU - 20 = data 960)
/20//960/ /20//960/ /20//459/
mf_1/offset_0/id_ab13
mf_1/offset_120/id_ab13
mf_0/offset_24/id_ab13
1) 몇개의 패킷으로 쪼개지는가?
- 3
2) 첫번째 패킷의 데이터의 크기는 몇인가?
- 960
3) 마지막 패킷의 데이터의 크기는 몇인가?
- 459
- wireshark에서 실습해보기
1) wireshark 패킷 캡처 시작
2) cmd ping (상대)IP주소 -l 2379
3) 필터는 ip.addr==(상대)IP주소
4) 3번 쪼개져서 전송되는 걸 확인할 수 있음
5) ICMP, IP, 이더넷의 크기가 붙어서 계산한 프레임의 크기와 다르게 보임
따라學IT 07. 컴퓨터의 프로그램끼리는 이렇게 데이터를 주고 받는다
4계층 이론
-
4계층에서 하는 일
- 전송 계층(transport layer)은 송신자의 프로세스와 수신자의 프로세스를 연결하는 통신 서비스를 제공함
- 전송 계층은 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 그리고 다중화와 같은 편리한 서비스를 제공함
- 전송 프로토콜 중 가장 잘 알려진 것은 연결 지향 전송 방식을 사용하는 전송 제어 프로토콜(TCP), 보다 단순한 전송에 사용되는 사용자 데이터 프로토콜(UDP)
-
4계층 프로토콜의 종류
- UDP 프로토콜 : 안전한 연결을 지향하지 않는
- TCP 프로토콜 : 안전한 연결을 지향하는
-
포트 번호
- 포트 번호의 특징
- 특정 프로세스와 특정 프로세스가 통신을 하기 위해 사용
- 하나의 포트는 하나의 프로세스만 사용 가능
- 하나의 프로세스가 여러 개의 포트를 사용하는 것은 가능
- 포트 번호는 일반적으로 정해져 있지만 무조건 지켜야 하는 것은 아님
- 하나의 프로그램은 하나의 포트 번호만 사용
- 내 컴퓨터 기준에서 하나의 프로그램은 하나의 포트 번호, 상대방의 여러가지 프로그램은 나의 하나의 포트 번호로 연결 가능
- Well-Known 포트 : 전 세계정으로 유명

- Registered 포트 : 조금은 유명한

- Dynamic 포트 : 일반 사용자들이 사용
- 시작 포트 번호 49152번, 마지막 포트 번호 65535번(49152~65535)
-
프로그램의 연결 정보
- 나와 현재 연결되어 있는 컴퓨터들
- cmd netstat -ano
- 현재 포트 활성 여부를 나타내는 활성 연결 테이블
포트 연결 확인 실습
- 프로그램의 연결 정보
- 나와 현재 연결되어 있는 컴퓨터들
- cmd netstat -ano
- 현재 포트 활성 여부를 나타내는 활성 연결 테이블
- 작업 관리자 > 보기 > 열 선택 > PID(프로세스 식별자) 체크 > 확인 > 작업 관리자 PID와 cmd PID 비교
특정 포트 사용 실습
따라學IT 08. 비연결지향형 UDP 프로토콜
이론
-
UDP 프로토콜

- UDP가 하는 일
- 사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)은 유니버설 데이터그램 프로토콜(Universal Datagram Protocol)이라고 일컫기도 함
- UDP의 전송 방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 함
- UDP는 일반적으로 오류의 검사와 수정이 필요 없는 프로그램에서 수행할 것으로 가정
-
UDP 프로토콜을 사용하는 프로그램
- UDP 프로토콜을 사용하는 대표적인 프로그램들
- 도메인을 물으면 IP를 알려주는 DNS 서버
- UDP로 파일을 공유하는 tftp 서버
- 라우팅 정보를 공유하는 RIP 프로토콜
- 일일이 하나하나 수동으로
- 라우터들끼리 서로 정보를 공유해서 최신 라우팅 테이블을 서로 알 수 있게 해주는 프로토콜(RIP 등)
tftpd로 파일 전송 실습
- tftpd를 사용하여 데이터 공유해보기
- tftpd 프로그램을 이용하여 UDP를 이용한 데이터 통신 해보기 ref.
- 큰 파일은 잘 보내지 않음
- 특수한 경우(동영상 스트리밍 등)
- 일반적으로 정상적이지 않은 PC(?) - ex) 운영체제가 설치되어 있지 않는 곳에 운영체제 이미지를 보낻 때
- 패킷 캡쳐 및 분석해보기
따라學IT 09. 연결 지향형 TC 프로토콜
TCP 프로토콜 구조와 TCP의 플래그
- TCP 프로토콜
- TCP가 하는 일
- 전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 함
- TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 비접속형 사용자 데이터그램 프로토콜(User Datagram Protocol)을 사용함
- TCP는 UDP보다 안전하지만 느림
- TCP 프로토콜의 구조

- Offset : 헤더의 길이, 4로 나눔(?)
- Reserved : 예약된 필드, 사용하지 않음
- Window : 데이터 보내도 돼? 어 돼, 도착했어? 어, 얼마나 더 보내도 돼? 이정도 더 보내도 돼~~~ / 남아 있는 TCP 버퍼 공간
- TCP 플래그 : TCP가 계속해서 통신을 하면서 상대방이랑 연결 상태를 물어봄, 여러가지 형태로 데이터를 보냄, 그때 나타내는 값, TCP의 주된 기능이 플래그로 나눠짐
- TCP 플래그 종류
- Reserved, Nonce
- C congestion window reduced CWR
- E ECN- Echo
- U urgent 긴급비트 : 지금 보내는 거 우선순위가 좀 높음, 급한 데이터임, Urgent Pointer와 세트
- A acknowledgement 승인비트 : 물어본 거에 대한 응답을 해줄 때
- P push : TCP 버퍼가 일정 크기만큼 쌓여야 패킷을 추가적으로 전송하는데 이거와 상관없이 데이터를 계속해서 밀어 넣겠음
- R 초기화 : 서로 연결이 되어 있는 상태에서 추가적으로 뭔가 reset데이터를 주고받으려 하는데 문제가 발생, 우리 둘 사이의 연결 관계를 새로고침, 리셋하자
- S syn 동기화 : 상대방이랑 연결을 시작할 때무조건 사용하는 플래그로써, 얘가 처음 보내지고 난 다음부터 이 둘 사이의 연결이 서로 동기화되기 시작, 서로 상태를 주고 받으며 서로 상태를 계속 동기화 시킴
- F fin 종료 : 연결을 끊을 때
TCP 3Way Handshake
- TCP를 이용한 통신 과정
- 연결 수립 과정
- TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정
(1) 클라이언트가 서버에게 요청 패킷을 보내고
(2) 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
(3) 클라이언트는 이를 최종적으로 수락하는 패킷을 보냄
- 위의 3개의 과정을 3Way Handshake라고 부름
TCP를 이용한 데이터 전송 과정
- TCP를 이용한 통신 과정
- 데이터 송수신 과정
- TCP를 이용한 데이터 통신을 할 때 단순히 TCP 패킷만을 캡슐화해서 통신하는 것이 아닌 페이로드를 포함한 패킷을 주고 받을 때의 일정한 규칙
(1) 보낸 쪽에서 또 보낼 때는 SEQ번호와 ACK번호가 그대로
(2) 받는 쪽에서 SEQ번호는 받은 ACK번호가 됨
(3) 받는 쪽에서 ACK번호는 받은 SEQ번호 + 데이터의 크기
TCP의 연결 상태 변화

- 실선 : 클라이언트의 상태 변화
- 점선 : 서버의 상태 변화
- 동그라미 : 상태
- Listen 상태 : 4계층은 포트 번호를 사용, 이 포트 번호를 서버 쪽에서 열어 놓은/사용하고 있는 상태, 클라이언트의 요청을 계속 듣고 있는 상태
- Established 상태 : 연결이 서로 수립이 된 상태, 3Way Handshake가 끝난 상태
- SYN_RCVD : SYN를 받은 서버의 상태, SYN/ACK 패킷을 보냄
- active open : 능동적으로 포트를 여는 것, 클라이언트, SYN 패킷 전송
- passive opne : 수동적으로 포트를 여는 것, 서버
TCP 프로토콜 분석 실습
- TCP 프로토콜을 Wireshark에서 캡처한 후 데이터를 주고 받는 과정 분석 ref.
따라學IT 10. NAT와 포트 포워딩
이론
- NAT
- NAT란?
- NAT(Network Address Translation)은 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술
- 패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록해야 함
- NAT를 이용하는 이유는 대게 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사요 ㅇ하여 인터넷에 접속하기 위함
- 하지만 꼭 사설IP를 공인IP로 변환하는 데에만 사용하는 기술은 아님
- 특정 IP 주소에 특정 포트 번호로 가는 패킷을 다른 IP 주소에 다른 포트 번호로 바꾸어 주는 것
- 포트포워딩
- 포트포워딩이란?
- 포트 포워딩 또는 포트 매핑(port mapping)은 패킷이 라우터나 방화벽과 같은 네트워크 장비를 가로지르는 동안 특정 IP 주소와 포트 번호의 통신 요청을 특정 다른 IP와 포트 번호로 넘겨주는 네트워크 주소 변환(NAT)의 응용
- 이 기법은 게이트웨이(외부망)의 반대쪽에 위치한 사설 네트워크에 상주하는 호스트에 대한 서비스를 생성하기 위해 흔히 사용됨
- 특정 포트로 들어온 요청을 다른 특정 IP의 특정 포트로 전송
포트포워딩 설정 실습 ref.
- 포트포워딩 설정해보기
- 포트포워딩을 이용하여 다른 사용자들이 사설IP를 사용하는 서버로 접속할 수 있도록 설정해보기
- 사설 IP를 사용하는 서버로 접속해보기
- 사설 IP를 사용하는 가상머신에 서버를 설정하고 해당 서버를 포트포워딩을 통해 접속할 수 있도록 설정해보기
NAT vs 포트포워딩 ref.
- NAT : 특정 라우터에서 해당 패킷이 어느 IP로 해석되는지 가지고 있는 테이블에 매핑하는 것
- Deestination을 가지고 있음
- 일반적으로 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용해서 인터넷과 통신하기 위해 사용
- 포트포워딩 : 해당 포트로 들어오는 TCP/UDP + SSH 등의 패킷이 들어온다면 특정 IP로 보냄
- Destination에 관한 내용이 없음, 해당 패킷은 도착지를 전혀 모름
- 게이트웨이와 같은 외부 망의 반대쪽에 위치한 사설 네트워크의 호스트에 연결하기 위해 주로 사용하는 것
따라學IT 11. www(웹)를 이용할 때는 이렇게 데이터를 주고 받는다
HTTP 프로토콜이란?
- HTTP 프로토콜
- 웹을 만드는 기술들

- 외 등등
- HTML : 웹 페이지를 채울 내용
- Javascript : 웹 페이지에 들어갈 기능
- CSS : 웹 페이지를 예쁘게 꾸밀 디자인
- ASP/ASP.NET,JSP,PHP : 웹 서버 페이지를 만드는 기술
- HTTP 프로토콜의 특징
- HyperText Transfer Protocol(하이퍼 텍스트 전송 프로토콜)
- www에서 쓰이는 핵심 프로토콜로 문서의 전송을 위해 쓰이며, 오늘날 거의 모든 웹 애플리케이션에서 사용되고 있음
- 음성, 화상 등 여러 종류의 데이터를 MIME로 정의하여 전송 가능
- HTTP 특징
- Request/Response(요청/응답) 동작에 기반하여 서비스 제공
- HTTP 1.0의 특징

- 연결 수립, 동작, 연결 해제의 단순함이 특징
- HTML 문서를 전송 받은 뒤 연결을 끊고 다시 연결하여 데이터를 전송
- 단순 동작(연결 수립, 동작, 연결 해제)이 반복되어 통신 부하 문제 발생
- HTTP 1.1의 특징
- HTTO 1.0과 호환 가능
- Multiple Request 처리가 가능하여 Client의 Request가 많을 경우 연속적인 응답 제공
- Pipeline 방식의 Request/Response 진행
- HTTP 1.0과는 달리 Server가 갖는 하나의 IP Address와 다수의 Web Site 연결 가능
- 빠른 속도와 Internet Protocol 설계에 최적화될 수 있도록 Cache 사용
- Data를 합축해서 전달이 가능하도록 하여 전달하는 Data 양이 감소
HTTP 메소드
- HTTP 요청 프로토콜
- HTTP 요청 프로토콜의 구조

- 요청하는 방식을 정의하고 클라이언트의 정보를 담고 있음
- Request Line
- [요청타입][공백][URI][공백][HTTP 버전]
- HTTP 메소드 요청 방식 :

URL, URI란?
- URI Uniform Resource Identifier : 인터넷 상에서 특정 자원(파일)을 나타내는 유일한 주소 // 주소 전체

- 특정 리소스를 식별하는 통합 자원 식별자를 의미하며, 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스
- 어디에 어느 폴더에 저장되어 있는 어떤 파일

- URL : 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약 ref.
HTTP 요청 프로토콜 작성 실습 ref.
- HTTP 프로토콜 작성 실습
- Netcat을 이용하여 HTTP 프로토콜을 직접 작성해보기
- HTTP 프로토콜 수정 실습
- HTTP 요청과 응답 프로토콜을 각각 캡쳐해보고 수정해보기
URI 이해를 위한 실습
ref.
HTTP 응답 프로토콜의 구조
- HTTP 응답 프로토콜
- HTTP 응답 프로토콜의 구조

- 사용자가 볼 웹 페이지를 담고 있음
- Status Line
- [HTTP 버전][공백][상태 코드][공백][상태 문구]
- 상태 코드 서버가 알려주는 여러가지 정보 -

- 200번대 : 성공적인 통신
- 상태 코드 종류-200/상태 문구-OK/설명-Client의 요청이 성공했다는 것을 나타냄
- 400번대 : 클라이언트의 실수, 잘못, 오류
- 상태 코드 종류-403/상태 문구-Forbidden/설명-Client가 권한이 없는 페이지를 요청했을 때
- 상태 코드 종류-404/상태 문구-Not Found/설명-Client가 서버에 없는 페이지를 요청했을 때
- 500번대 : 서버의 실수, 잘못, 오류
- 상태 코드 종류-500/상태 문구-Internal Server Error/설명-Sever의 일부가 멈췄거나 설정 오류가 발생
- 상태 코드 종류-503/상태 문구-Service Unavailable/설명-최대 Session 수를 초과했을 때
HTTP 헤더
- HTTP 헤더 포맷
- 수많은 정보를 담고 있는 HTTP 헤더 구조

- 일반(둘다 사용할 수 있음), 요청/응답(각자 사용), 항목(특별한 경우 사용)
- 일반적인 정보를 담고 있는 일반 헤더

- 클라이언트 정보를 담고 있는 요청 헤더

- 서버 정보를 담고 있는 응답 헤더

HTTP 프로토콜 분석 실습
ref.