Kylian 태그 관리 글쓰기 방명록
주요 개념/네트워크 (4)
2023-11-25 16:23:32

TCP란? (Transmission Control Protocol)

TCP란 인터넷 상에서 데이터를 메시지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜을 말한다.

TCP는 애플리케이션에게 신뢰적이고 연결지향성 서비스를 제공한다.

즉, 서버와 클라이언트 간에 데이터를 신뢰성있게 전달하기 위해 만들어진 프로토콜이다. 

그리고 TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위해 3-Way Handshake를 사용한다.

TCP 3 Way handshake

통신을 시작하거나 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정(연결)을 의미한다.

Client > Server : TCP SYN

Server > Client : TCP SYN ACK

Client > Server : TCP ACK

 

여기서 SYN은 'synchronize sequence numbers', 그리고 ACK는'acknowledgment' 의 약자이다.

이러한 절차는 TCP 접속을 성공적으로 성립하기 위하여 반드시 필요하다.

  1. SYN
    A클라이언트가 B서버에 연결 요청을 보내기 위해 SYN 패킷을 전송한다.
    이 패킷에는 클라이언트가 사용할 초기 시퀀스 번호가 포함되어 있다
    이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
  2. SYN-ACK
    B서버는 A클라이언트의 SYN 요청을 받고, 연결을 수락한다는 의미로 SYN-ACK 패킷을 보낸다.
    이 패킷에는 서버가 사용할 초기 시퀀스 번호와 클라이언트의 시퀀스 번호에 1을 더한 값이 포함된다
    이때 B서버는 SYN_RECEIVED 상태가 된다.
  3. ACK
    마지막으로 A클라이언트는 B서버에게 ACK를 보내서 연결 요청에 대한 응답을 한다.
    이후부터 연결이 이루어지고 데이터가 오가게 된다.
    이 ACK 패킷에는 서버의 초기 시퀀스 번호에 1을 더한 값이 포함된다.
    이때의 B서버 상태가 ESTABLISHED 이다.
  4. 데이터 전송 시작
    → 이러한 과정을 통해 클라이언트와 서버는 신뢰성 있는 데이터 전송을 위한 TCP연결을 설정하고 통신을 시작한다

4-Way Handshake

3-Way Handshake는 TCP의 연결을 초기화 할 때 사용한다면,

4-Way Handshake세션을 종료하기 위해 수행되는 절차이다.

  1. 클라이언트 FIN 플래그
    A클라이언트가 B서버에 연결을 종료하겠다는 FIN 플래그를 전송한다.
  2. ACK
    B서버는 A클라이언트에게 ACK(확인메시지)를 보내고, 자신의 통신이 끝날 때까지 기다린다.
    이때 B서버는 TIME_WAIT 상태가 된다.
  3. 서버 FIN 플래그
    B서버가 통신이 끝났으면 연결이 종료됐다고 A클라이언트에게 FIN 플래그를 전송한다.
  4. ACK
    → A클라이언트는 B서버에 확인했다는 메시지(ACK)를 보낸다.

만약 B서버에서 FIN을 전송하기 전에 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송으로 인해 FIN 패킷보다 늦게 도착한다면?    뒤늦게 도착한 패킷은 유실되어 데이터 손실 발생

⇒ 이런 상황에 대비해 A클라이언트는 B서버로부터 FIN을 수신해도 일정시간(디폴트 240초)동안

세션을 남겨놓고 잉여 패킷을 기다리는데 이 과정을 TIME_WAIT라고 한다.

 

2023-11-23 11:32:38

Linux 외부(인터넷)으로 핑(ping)이 안나간다면?

1. 물리적 장치를 확인한다.

- 랜선이나 전원 코드가 잘 꼽혀있는지 확인

2. 네트워크 인터페이스 카드를 확인한다.(NIC)

확인방법은 3가지가 있다.

- nmcli (Network Manager Command-Line Interface)

nmcli를 사용하면 Network Manager 및 네트워크 상태, Linux 시스템에서 네트워크 장치 및 연결을 관리하고 구성하는 데 사용할 수 있는 명령어이다. 새 네트워크 연결 만들기, 기존 연결 수정, 네트워크 장치 관리와 같은 네트워크 구성을 위한 포괄적인 기능을 제공한다. 명령줄 작업을 선호하는 사용자에게 유용한 도구이다. 시간이 절약되고 자신감이 생기며 스크립트에서 사용할 수 있으며 Linux 서버 네트워킹 문제를 해결하고 기능을 신속하게 복구하기 위해 사용하는 첫 번째 도구이다.

nmcli dev status (사용 가능한 모든 장치의 상태 표시)
nmcli dev show <장치 이름(ex.ens33)> (해당 장치의 구성 세부 정보 출력)
nmcli con show (사용 가능한 모든 연결의 상태를 표시)
nmcli con show ens33 <연결 이름> (해당 연결의 세부 정보 출력)
nmcli con add con-name <연결 이름> ifname <인터페이스 이름> type <연결 타입>

<연결 이름>을 원하는 연결 이름으로, <인터페이스 이름>을 사용하려는 인터페이스 이름으로, <연결 타입>을 생성하려는 연결 유형(예: 이더넷, wifi 등)으로 작성한다.
nmcli con up <연결 이름>  (해당 이름의 연결이 활성화 된다.)
nmcli con down <연결 이름> (해당 이름의 연결이 비활성화) 
nmcli con edit <연결 이름> (해당 연결의 구성을 변경할 수 있는 대화형 편집기가 열린다.)
nmcli con mod <이름> ipv4.addresses <ip/24> ipv4.gateway [gateway ip] ipv4.dns [dns ip] 

<이름>을 수정하려는 연결로 바꾸고 <IP/24>로 원하는 IP 주소와 서브넷 마스크로 바꾼다. 게이트웨이와 DNS서버도 등록 가능

- nmtui (Network Manager Text User Interface)

nmtui는 Network Manager를 사용하는 Linux에서 연결을 관리할 수 있는 간단한 TUI(Text User Interface) 화면을 제공한다. nmcli의 기능을 화면으로 볼 수 있는 그래픽 인터페이스를 제공한다. 그래픽 화면을 제공하기 때문에 nmcli 명령줄 입력을 선호하지 않는 사용자에게 보다 쉽고 간단하게 네트워크 구성을 할 수 있도록 편의를 제공해준다.

nmtui 초기 화면 = 3가지 기능 제공(연결 수정, 연결 활성화, 호스트네임 수정)
Edit a connection 화면 = 네트워크 세부사항을 수정할 수 있다.
Activate a Connection 화면 = NIC(ens33)에 *별 표시가 들어와야 활성화가 됐다는 뜻이다.
Set System Hostname = nmtui에서는 호스트 네임도 쉽게 변경할 수 있다.

- vi /etc/sysconfig/network-scripts/ifcfg-ens33

  1. TYPE= 여기에 이더넷 유형이 있습니다. 와이파이, 팀, 본드 등을 가질 수 있습니다.
  2. BOOTPROTO= 값이 "dhcp”인 경우 dhcp 서버에서 동적 IP를 가져옵니다. 값이 "static"인 경우 동적 IP를 사용하지 않고 고정 IP를 할당할 수 있습니다.
  3. NAME= 인터페이스 명이며, 장치명을 뜻합니다.
  4. DEVICE= 이 프로필과 연결된 네트워크 장치의 이름입니다.
  5. ONBOOT= 기본 값은 "no"로 설정되어 있으며,  "yes"로 변경 할 경우 부팅 시 컴퓨터가 이 프로필을 읽고 기기에 설정에 둔 고정IP를 할당하려고 시도함을 의미합니다. 
  6. PREFIX= 서브넷 마스크 값, 24는 255.255.255.0을 의미합니다. 바이너리 형식을 적어두면 서브넷 마스크를 더 잘 이해할 수 있습니다. 예를 들어 값 16, 24, 26은 처음 16, 24 또는 26비트가 각각 1이고 나머지는 0임을 의미하며, 정확히 네트워크 주소와 할당할 수 있는 IP 범위를 정의합니다. 즉 IP를 사용할 수 있는 호스트는 256명입니다.
  7. GATEWAY= 게이트웨이 IP, VMware NAT Gateway IP
  8. IPADDR은 프로필에 할당하는 고정 IP입니다.
  9. DNS1, DNS2= 사용할 두 개의 DNS 서버, 보통 168.126.63.1(KT DNS 서버) / 8.8.8.8(구글 DNS 서버)를 입력합니다.

vi로 네트워크 인터페이스 카드를 변경해준 뒤에는 

systemctl restart network 명령어 입력을 통해 네트워크 연결을 최신화해줘야 한다!

2023-11-07 15:54:15

NAT (Network Address Translation)

사설 IP가 공용 IP로 통신할  수 있도록 주소를 변환해주는 방법

3가지 종류

1. Dynamic NAT : 1개의 사설 IP를 가용 가능한 공인 IP로 연결

- 공인 IP 그룹(또는 NAT Pool)에서 현재 사용 가능한 IP를 가져와서 연결

- 어떤 공인 IP를 쓸 지는 NAT Pool에서 사용하지 않는 공인 IP를 사용함.

 

2. Static NAT : 하나의 사설 IP를 고정된 하나의 공인 IP로 연결

- AWS Internet Gateway가 사용하는 방식

- 사설 IP 숫자만큼 공인 IP 숫자가 필요함.

 

3. PAT(Port Address Translation) : 많은 사설 IP를 하나의 공인 IP로 연결

- NAT Gateway / NAT Instance가 사용하는 방식

- PAT 방식이 일반적인 회사나 학원, 집 등에서 사용하는 일반적인 방식!

- 포트 기반으로 사설망의 어떤 기기가 통신을 받아야 하는지 정하는 방식이 PAT 방식임.

(ex. 192.168.0.2는 61.123.44.1과 통신해야 하는데 Port 5000번으로 나갈 때 공인 IP로 주소가 변환되면서 Port도 50001로 바뀌어서 트래픽이 전송됨)

장점: 다양한 사설 IP 주소가 하나의 공인 IP를 공유해서 외부와 통신할 수 있다는 장점

- 포트가 다르기 때문에 공인 IP가 1개여도 내부적으론 문제없이 통신됨

 

 

사설 IP (Private IP)

한정된 공인 IP 주소를 최대한 활용하기 위해 IP주소를 분할하고자 만든 개념

IPv4 기준으로 최대 IP갯수는 43억개(4,294,967,296)

 

공인 IP 부족을 해결하고자 만든 것 : 사설망

사설망 내부에는 외부 인터넷 망으로 통신이 불가능한 사설 IP로 구성

외부로 통신할 때는 통신 가능한 공인 IP로 나누어 사용

보통 하나의 망에는 사설 IP를 부여받은 기기들과 NAT 기능을 갖춘 Gateway로 구성

 

참고 : IPv6 최대 IP 개수

2^128 = 340,282,366,920,938,463,463,374,607,431,768,211,456개

(즉, 340 2823 6692 938 4634 6337 4607 4317 6821 1456개)

 

 

IP Class 기반 라우팅

IP Class는 IPv4 주소를 영역별로 나눈 것으로 크게 A, B, C, D, E 클래스로 나뉘며 각각 네트워크 크기와 호스트의 수가 다르다. 이중 D와 E는 특수용도로 D는 멀티캐스트용, E는 향후 사용을 위해 예약된 주소다.

나머지 A, B, C는 일반 사용자에게 부여하는 용도로 이번에 어떻게 나뉘는지 알아보려고 한다.

 

아래의 범위에 있는 IP들은 사설 IP로 정하자고 약속함.

예를 들어  61.123.44.1 주소가 있다면, 아래의 사설 IP 주소 대역에 속하지 않으므로

일반적으로 공인 IP 주소로 간주된다.

이름 Class IP Address Range IP 개수(호스트 수) 서브넷 마스크
24-bit block A 10.0.0.0~10.255.255.255 16,777,216 255.0.0.0
20-bit block B 172.16.0.0~172.31.255.255 104,857 255.240.0.0
16-bit block C 192.168.0.0 ~ 192.168.255.255 65,536 255.255.0.0
  D      
  E      

IP 주소를 8비트로 4등분한 각각을 옥텟(Octet)이라고 한다. 각 옥텟 별로 0~255개의 범위가 되므로 각 256개가 들어갈 수 있다.

그리고 이 옥탯 별로 IP의 클래스를 A, B, C로 나눌 수 있다. 각 클래스마다 위에서 배운 네트워크 ID 부분과 호스트 ID 부분 범위가 서로 다른 것을 볼 수 있다. 이런 식으로 나눔으로써 각 클래스마다 할당되는 총 호스트 개수가 나뉘어 보다 체계적으로 관리할 수 있게 된다.

 

 

CIDR

Classless Inter Domain Routing(CIDR) : 클래스에서 발전하여 더 이상 클래스를 사용하지 않음.

CIDR이란 무엇인가요?

Classless Inter-Domain Routing(CIDR)은 인터넷상의 데이터 라우팅 효율성을 향상시키는 IP 주소 할당 방법

인터넷에 연결되는 모든 컴퓨터, 서버 및 최종 사용자 디바이스는 IP 주소라는 고유한 번호가 연결되어 있다.

 

- IP는 주소의 영역을 여러 네트워크 영역으로 나누기 위해 IP를 묶는 방식

- 여러 개의 사설망을 구축하기 위해 망을 나누는 방법

 

 

 

CIDR Block  CIDR를 기반으로 나눈 것이 CIDR Block : IP 주소의 집합

CIDR Notation : CIDR Block을 표시하는 방법

- 네트워크 주소와 호스트 주소로 구성

- 각 호스트 주소 숫자만큼의 IP를 가진 네트워크 망 형성 가능

- A.B.C.D/E  예) 172.16.0.0/12

A.B.C.D: 네트워크 주소+호스트 주소 표시 / E: 0~32 네트워크 주소가 몇 bit 인지 표시

CIDR Notation은 네트워크 비트(고정)와 호스트 주소 비트(변경 가능)를 보여준다.

- 호스트 주소 비트만큼 IP 주소를 보유 가능

예) 192.168.2.0/24

     - 네트워크 비트 24

     - 호스트 주소 = 32-24 = 8

     - 즉 2^8 = 256개의 IP 주소 보유(192.168.2.0 ~ 192.168.2.255)

 

서브넷이란?

서브넷 : 네트워크 안의 네트워크

큰 네트워크를 잘게 쪼갠 단위

일정 IP 주소의 범위를 보유

   - 큰 네트워크에 부여된 IP 범위를 조금씩 잘라서 작은 단위로 나눈 후 각 서브넷에 할당(AWS VPC 등)

예) 192.168.0.0/16 이라는 큰 네트워크 안에서 서브넷을 잘게 자를 때 사용하는 것이 CIDR Notation임.

 

 

참고 : AWS 강의실 기초 강좌

https://www.youtube.com/watch?v=3VXLD0-Iq8A

2023-10-29 17:56:25

네트워크

네트워크란? 컴퓨터를 통신망으로 연결한 것을 말한다. 

여러대의 컴퓨터는 스위치와 연결된다. (ex. 회사, pc방, 학교 등)

 

서로 다른 스위치들은 router를 통해 WAN과 연결된다.

 

네트워크의 척추: OSI 7 Layer 모델 => 이론적 모델

ISO에서 만든 목적 : 이기종 간의 통신이 목적

=> 각 제조사마다 네트워크 기술이 다르기 때문에 다른 제조사의 장비로는 통신이 어려워서 ISO에서 기본적인 개념을 정의하고 제조사에서 기술 개발하면서 발전

정의

컴퓨터 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층 간 상호 작용하는 방식을 정해놓은 것

프로토콜이란?

통신장비 사이에서 메세지를 주고 받는 양식과 규칙의 체계

=> 사람과 사람의 대화도 언어가 맞아야 소통할 수 있다.




1계층 : 물리계층(physical layer)

케이블, 허브, 리피터 등으로 전송하며, 전송단위는 비트

단순히 전기신호만 보내서 데이터를 전송하는 역할만 하고

데이터가 무엇인지 어떻게 보내는지 관여하지 않음

 

2계층 : 데이터링크

LAN(스위치)과 같이 같은 네트워크에 있는 장치에 데이터를 전달하고, 전달한 데이터가 오류가 있는지 없는지 체크하고 재전송하고 흐름을 제어하는 기능도 있음. 

맥 주소로 전송함.(cmd ipconfig all => 물리적 주소가 맥 주소)

앞 6자리는 제조사 번호 / 뒷 6자리는 고유번호

맥주소를 가지고 데이터를 주고 받게 하는 프로토콜이 이더넷

대표적 장비 : 브릿지, 스위치

3계층 : 네트워크 계층

데이터를 목적지까지 가장 안전하고 빠르게 전달

데이터가 어떻게 목적지를 찾아가는지 담당하는 프로토콜은 IP

라우팅이란? 네트워크 안에서 최적의 경로를 선택하는 것 목적지는 IP주소를 활용해서 찾고 데이터를 전송함. 

전송단위 : 패킷 / 대표장비 : 라우터

4계층 : 전송 계층(Transport)

양 끝단 사용자들이 데이터를 주고 받을 수 있게 하는 계층

중요한 포인트 : 어떤 방식으로 데이터를 보낼 것인가?

안정적으로 확실하게 데이터를 전송하는 프로토콜 : TCP

데이터가 유실될 수도 있지만 무조건 빠르게 프로토콜 : UDP

전송 단위 : 세그먼트  /  대표장비 : 게이트웨이, L4스위치

 

5계층 : 세션 계층

두 컴퓨터의 연결을 담당하는 계층

두 컴퓨터 사이에 연결을 생성하고 유지하고 종료하는 기능

=> 일종의 대화 통로

전송 중단 시 복구하는 기능도 있다.

단방향 / 반이중(무전기) / 전이중(전화기)

 

6계층 : 표현계층(Presentation)

어플리케이션 데이터를 읽을 수 있는 형식으로 변환하는 역할

인코딩-디코딩, 데이터 암호화 시 복호화, 압축 시 압축풀기 등

 

7계층 : 응용계층(Application)

사용자가 네트워크 자원에 접근하는 방법을 제공함

=> 인터넷 브라우저, 카톡

프로토콜 : HTTP(웹페이지), FTP, SMTP(메일주고받을 때)

 

요약

1. 물리계층에서 비트 단위의 전기 신호로 데이터가 전송됨

2. 데이터링크 계층에서는 맥 주소로 가까운 장치 간 정보 전달

3. 네트워크 계층은 IP주소로 목적지까지 최적의 경로를 안내

4. 전송계층은 끝단 사용자에게 확실하게 보낼지 빠르게 보낼지

5. 세션계층은 연결담당

6. 표현계층은 데이터를 읽을 수 있게 형식을 변환

7. 응용계층은 사용자에게 어플리케이션으로 서비스 제공

 

전송단위란?

네트워크에서 데이터가 전송될 때 그냥 데이터만 보내는 게 아니라 전송에 필요한 정보를 데이터 앞부분에 붙여서 다음 계층으로 보냄. 

전송에 필요한 정보? 누가 누구한테 보내는지, 어떻게 보내는지

=> 제어정보=헤더 / 실제 데이터=페이로드 => 패킷!!

헤어+페이로드 합쳐져 다음 계층 가면 페이로드가 되고 새로운 헤더 붙음 => 이런 과정 : encapsulation <> 디캡슐레이션

예를 들어

영상을 보고 댓글을 단다

1. 응용계층에서 어플리케이션이 처리하고 헤더를 붙여서 보냄

2. 표현계층에서도 헤더를 붙이고 세션계층으로 보냄

3. 세션계층에서도 헤더를 붙여서 내려보냄

4. 전송계층에서는 최종 목적지까지 확실하게 보낼지, 빨리 보낼지 정보를 헤더에 담아서 데이터를 합치게 되는데 이 데이터를 세그먼트라고 부름, 

5. 네트워크계층에서는 세그먼트를 IP주소를 바탕으로 최적의 경로를 찾는 라우팅 정보를 네트워크 헤더에 담는데 이를 패킷이라고 함.

6. 데이터링크계층에서는 프레임을 전송하는데 프레임 오른쪽에 붙어있는 데이터 트레일러는 데이터가 전송된 후에 오류가 있었는지 확인하는 용도

7. 이런 과정을 거친 데이터는 물리계층에서 비트단위로 이동돼서 상위 계층의 어플리케이션계층을 향해 달려가면서 헤더가 하나씩 제거되는 디캡슐화 과정을 거쳐 7계층에 도달

 

편지를 보낼때와 비유

1. 편지지에 한글로 편지 작성(응용/표현/세션)

2. 작성한 편지를 우체부에게 전달(전송)

3. 우편번호와 주소로 분류가 됨(네트워크)

4. 편지는 주소지에 있는 다른 우체국에 전달(물리/데이터링크)

5. 다시 주소로 구분돼서(네트워크)

6. 해당 우체부가 배달을 하게 되면(전송)

7. 상대방이 편지를 열어서 확인(응용/표현/세션)



TCP/IP 모델 => 실용적 모델

 



Kylian. Designed by bskyvision.