*서브넷팅

 

- 서브넷팅 목적 : IP 주소 낭비를 방지하기 위해 사용

 

- 서브넷팅 방법 : 원본 네트워크를 여러개의 네트워크로 분리하는 계산 작업

 

 

#서브넷팅 예제

 

Ex)1

 

- 원본 네트워크 : 198.133.219.0/24 <- 2^8 - 2 = 254개


- 서브넷 개수 : 5개 이상

 

- 최대 필요한 IP 주소 개수 : 29개

 

 

2^x >= 29

 

x = 5

 

2^5 -2 = 30개

 

198.133.219.000 00000

255.255.255.111 00000 <- 255.255.255.224  <- Prifix mask /27

-------------------------------         

                                               네트워크 이름       서브넷 브로드캐스트 주소

 

198.133.219.000 00000                198.133.219.0     ~    198.133.219.31   /27           

198.133.219.001 00000                198.133.219.32    ~    198.133.219.63  /27

198.133.219.010 00000                198.133.219.64    ~    198.133.219.95  /27

~

198.133.219.111 00000                198.133.219.224   ~    198.133.219.255 /27

 

 

*설정 가능한 IP 주소 범위

 

198.133.219.1 ~ 198.133.219.30 <- 30개 <-----  198.133.219.0/27


198.133.219.33 ~ 198.133.219.62 <- 30개 <-----  198.133.219.32/27


198.133.219.65 ~ 198.133.219.94 <- 30개 <-----  198.133.219.64/27


198.133.219.97 ~ 198.133.219.126 <- 30개 <-----  198.133.219.96/27

~

198.133.219.225 ~ 198.133.219.254 <- 30개 <-----  198.133.219.224/27

 

 

 

Ex)2

 

121.160.41.129/30

 

네트워크 이름 : 121.160.41.128

 

서브넷 브로드 캐스트 주소 : 121.160.41.131

 

255.255.255.11111100

------------------------------------

4 x 32   128(127~131)
4 x 33   132

 

 

 

Ex)3

 

128.28.93.193/28

 

네트워크 이름 : 128.28.93.192


서브넷 브로드 캐스트 주소 : 128.28.93.207

 

255.255.255.11110000

---------------------------------

16x12     192(191~207)
             208

 


 

 

 

#VLSM

 

- 서브넷팅된 서브넷을 또 다시 서브넷팅하는 계산 작업

 

Ex) VLSM

 

- 원본 네트워크 : 133.200.0.0/16 <- 2^16 - 2 = 65534개


- 서브넷 개수 : 7개 이상


- 최대 필요한 IP 주소 개수 : 500개

 

1. Host 500개 구간 서브넷팅

 

2^x >= 500

 

2^9 -2 = 510개

 

 

133.200.0000000 0.00000000

255.255.1111111 0.00000000    255.255.254.0  <- /23

--------------------------------------

                                                  네트워크 이름            서브넷 브로드캐스트 주소

 

133.200.0000000 0.00000000           133.200.0.0        ~        133.200.1.255        <-Host 500개 구간 할당

 

133.200.0000001 0.00000000           133.200.2.0        ~        133.200.3.255        <-VLSM

133.200.0000010 0.00000000           133.200.4.0        ~        133.200.5.255

133.200.0000011 0.00000000           133.200.6.0        ~        133.200.7.255

~

133.200.1111111 0.00000000           133.200.254.0     ~        133.200.255.255

 

 

 

2. Host 100개 구간 VLSM

 

133.200.0000001 0.00000000           133.200.2.0        ~        133.200.3.255

 

원본 네트워크 : 133.200.2.0/23           2^9 -2 = 510개

 

 

2^x >= 100

 

2^7 -2 = 126개

 

 

133.200.0000001 0.0 0000000

255.255.1111111 1.1 0000000     <- 255.255.255.128     /25

----------------------------------------

                                                         네트워크 이름                서브넷 브로드캐스트 주소

 

133.200.0000001 0.0 0000000                   133.200.2.0         ~           133.200.2.127       <- Host 100개 구간 할당

 

133.200.0000001 0.1 0000000                   133.200.2.128      ~           133.200.2.255       <- VLSM

133.200.0000001 1.0 0000000                   133.200.3.0         ~           133.200.2.127

133.200.0000001 1.1 0000000                   133.200.3.128      ~           133.200.3.255

 

 

 

 

3.Host 55개 구간 VLSM

 

133.200.0000001 0.1 0000000                   133.200.2.128      ~           133.200.2.255

 

원본 네트워크 : 133.200.2.128

 

2^x >= 55

 

2^6 -2 = 62개

 

 

133.200.00000010. 1 0 000000 

255.255.11111111. 1 1 000000        <- 255.255.255.192    /26

---------------------------------------

                                                       네트워크 이름                서브넷 브로드캐스트 주소

133.200.00000010.1 0 000000               133.200.2.128       ~        128.200.2.191    <- Host 55개 구간 할당

 

133.200.00000010.1 1 000000               133.200.2.192       ~        128.200.2.255    <- VLSM

 

 

 

 

4.Host 25개 구간 VLSM

 

133.200.00000010.1 1 000000               133.200.2.192       ~        128.200.2.255    <- VLSM

 

원본 네트워크 : 133.200.2.192

 

 

2^x >= 25

 

2^5 -2 = 30개

 

133.200.00000010. 11 0 00000

255.255.11111111. 11 1 00000     <- 255.255.255.224      /27

-------------------------------------

                                                         네트워크 이름                   서브넷 브로드캐스트 주소

 

133.200.00000010 11 0 00000                 133.200.2.192           ~         133.200.2.223        <-Host 25개 구간 할당

 

133.200.00000010 11 1 00000                 133.200.2.224           ~         133.200.2.255        <-VLSM

 

 

 

5.Host 12개 구간 VLSM

 

133.200.00000010 11 1 00000                 133.200.2.224           ~         133.200.2.255        

 

원본 네트워크 : 133.200.2.224

 

2^x >= 12

 

2^4 -2 = 14개

 

 

133.200.00000010 111 0 0000 

255.255.11111111 111 1 0000     255.255.255.240   /28

---------------------------------------        

                                                     네트워크 이름             서브넷 브로드캐스트 주소

 

133.200.00000010 111 0 0000              133.200.2.224       ~    133.200.2.239     <- Host 12개 구간 할당

 

133.200.00000010 111 1 0000              133.200.2.240       ~    133.200.2.255     <- VLSM

 

 

 

6.WAN P2P(Point - to - Point) 구간 VLSM

 

 

133.200.00000010 111 1 0000              133.200.2.240       ~    133.200.2.255

 

원본 네트워크 : 133.200.2.240

 

2^x >= 2개

 

2^2 -2 = 2개

 

133.200.00000010 1111 00 00

255.255.11111111 1111 11 00

-----------------------------------

                                                  네트워크 이름           서브넷 브로드캐스트 주소

 

133.200.00000010 1111 00 00          133.200.2.240      ~     133.200.2.243          <-WAN P2P 구간 할당

133.200.00000010 1111 01 00          133.200.2.244      ~     133.200.2.247          <-WAN P2P 구간 할당

133.200.00000010 1111 10 00          133.200.2.248      ~     133.200.2.251

133.200.00000010 1111 11 00          133.200.2.252      ~     133.200.2.255 

 

 

 

 

 

 

#IP 주소 요약

 

- 주소 요약 목적 : 서브넷팅 및 VLSM을 실시한 IP 대역들을 효율적으로 관리하기 위해서

                        라우터와 라우터간에 라우팅 업데이트시 경로 정보를 최소화 하기 위해 사용

 

 

 

 

1. 클래스풀 요약

 

 

- 서브넷팅 , VLSM을 고려하지않은 주소 요약 기법

 

- 권장 하지 않음 (현재 망에서 사용하지 않음)

 

 

Ex) A 클래스(255.0.0.0 <- /8)

종로 1~3가                                         을지로 1~3가
13.13.1.0/24                                        13.13.8.0/24
13.13.2.0/24                                        13.13.9.0/24
13.13.3.0/24                                        13.13.10.0/24
-----------------> 13.0.0.0/8   -----------------> 13.0.0.0/8

 

Ex) B 클래스(255.255.0.0 <- /16)

 

172.16.1.0/24                                              172.16.8.0/24
172.16.2.0/24                                              172.16.9.0/24
172.16.3.0/24                                              172.16.10.0/24
-----------------> 172.16.0.0/16  -----------------> 172.16.0.0/16

 

Ex) C 클래스(255.255.255.0 <- /24)

 

192.168.1.0/27                                            192.168.1.96/27
192.168.1.32/27                                          192.168.1.128/24
192.168.1.64/30                                           192.168.1.68/30
-----------------> 192.168.0/24  -----------------> 192.168.1.0/24

 

 

 

 

 

2. 상세 요약

 

 

Ex) A 클래스

 

   13.13.1.0/24                                                                  13.13.8.0/24
   13.13.2.0/24                                                                  13.13.9.0/24
   13.13.3.0/24                                                                  13.13.10.0/24

 

   13.13.000000 01.0                                                       13.13.000010 00.0
   13.13.000000 10.0                                                       13.13.000010 01.0
   13.13.000000 11.0                                                       13.13.000010 10.0
----------------------------> 13.13.0.0/22 ----------------------------> 13.13.8.0/22
255.255.111111 00.0 <- 255.255.252.0 <- /22    255.255.111111 00.0 <- 255.255.252.0 <- /22


Ex) B 클래스

 

128.28.32.0/24 ~ 128.28.63.0/24

 

 128.28.001 00000.0
 128.28.001 00001.0
 128.28.001 00010.0
~
 128.28.001 11111.0
-------------------------------> 128.28.32.0/19
255.255.111 00000.0 <- 255.255.224.0 <- /19


Ex) A 클래스

 

123.140.0.0 ~ 123.143.255.255

 

123.100011 00.0.0
123.100011 01.0.0
123.100011 10.0.0
123.100011 11.0.0
-------------------------------> 123.140.0.0/14
255.111111 00.0.0 <- 255.252.0.0 <- /14


Ex) C 클래스

 

- C클래스는 대역폭이 넓어져 요약해야 할 기능이 생겼다

- CIDR(Classless Inter Domain Routing)

 

13.13.1.0/24
13.13.2.0/24
13.13.3.0/24
------------------> 13.0.0.0/8
13.13.000000 01.0
13.13.000000 10.0
13.13.000000 11.0

------------------> 13.13.0.0/22
255.255.111111 00.0 <- 255.255.252.0 <-/22

 

 

192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
192.168.4.0/24
192.168.5.0/24
--------------------------------> 클래스풀 요약 X, 상세 요약 X

192.168.00000 001.0
192.168.00000 010.0
192.168.00000 011.0
192.168.00000 100.0
192.168.00000 101.0
--------------------------------> 192.168.0.0/21
255.255.11111 000.0 <- 255.255.248.0 <- /21


192.168.160.0/24
192.168.161.0/24
192.168.162.0/24
192.168.163.0/24
--------------------------------> 클래스풀 요약 X, 상세 요약 X

192.168.101000 00.0
192.168.101000 01.0
192.168.101000 10.0
192.168.101000 11.0
--------------------------------> 192.168.160.0/22
255.255.111111 00.0 <- 255.255.252.0 <- /22

 

*IP 주소

 

- Layer 3 계층 프로토콜

 

- IP 헤더 안에 포함된 주소이다.

 

- 주소 체계 32bit (2^32 = 4,294,967,296개 약 43억개)

 

- IP 주소 현황 : 2011년 2월 고갈 (IPV4)

 

- 고갈 문제 대책 : 서브넷 마스크, 서브넷팅, VLSM, 사설 IP 주소&NAT,IPV6 주소 전환

 

- IP 주소는 임대 서비스이다. (임대 과정 : IANA -> APNIC -> KRNIC(KISA) -> ISP -> 사용자)

 

 

 

 

#서브넷 마스크(Subnet Mask)

 

- 목적 : IP 주소 고갈 방지 대책 , 네트워크 구분 및 IP 주소 개수 측정

 

- 특징 : 맨 앞에 비트가 '1'로 연속되어야 한다.

 

- 사용 방법 :     공통 비트 : '1' 표기          <- 네트워크 아이디 : 네트워크 식별자
                     비공통 비트 : '0' 표기       <- 호스트 아이디  : 호스트 식별자

 

                                                           네트워크 아이디              호스트 아이디                   IP 주소 개수

 

121.160.13.45  255.255.255.0                         121.160.13                        .45                               2^8개


121.160.13.45   255.255.0.0                            121.160                         .13.45                             2^16개


121.160.13.45    255.0.0.0                                121                         .160.13.45                           2^24개


121.160.13.45   255.255.255.255                   121.160.13.45                        x                             2^0개 = 1개


0.0.0.0  0.0.0.0                                                x                                32bit                         2^32개 = 전체

 

121.160.13.45 255.0.255.0                         서브넷 마스크 X

 

 

 

#진법 변환

 

-----------------------------------------------------------------------------------------------

 

2^7         2^6         2^5         2^4         2^3         2^2         2^1        2^0

128          64           32           16            8            4            2           1

 

-----------------------------------------------------------------------------------------------

 

 

11111111 = 255
11111110 = 254    
11111100 = 252     
11111000 = 248    
11110000 = 240     
11100000 = 224    

11000000 = 192    
10000000 = 128
00000000 = 0

 

 

 

 

#IP 주소 클래스 0.0.0.0 ~ 255.255.255.255

 

- 유니 캐스트(Unicast)

 

1. A 클래스(0~127) : 맨 앞에 비트가 '0'인 공통 비트 클래스

        

0.0.0.0   ~   127.255.255.255       기본 서브넷 마스크 : 255.0.0.0


0 0000000   0 1111111              네트워크 아이디당 IP 주소 개수 : 2^24개  (16,777,216개)

 

 

 

 

2. B 클래스(128~191) : 맨 앞에 비트가 '10'인 공통 비트 클래스

 

128.0.0.0    ~   191.255.255.255      기본 서브넷 마스크 : 255.255.0.0


10000000        10  111111            네트워크 아이디당 IP 주소 개수 : 2^16개  (65,536개)

 

 

 

 

 

3. C 클래스(192~223) : 맨 앞에 비트가 '110'인 공통 비트 클래스

 

192.0.0.0    ~    233.255.255.255    기본 서브넷 마스크 : 255.255.255.0


110 00000        110 11111           네트워크 아이디당 IP 주소 개수 : 2^8개   (256개)

 

** 서브넷 마스크 주소는 A 클래스에서 뒤로가는건 사용가능하지만

   C클래스에서 앞으로 오는것은 사용 불가

 

Ex) - 61.41.100.1 255.255.255.0 (O)

 

     - 192.168.1.54 255.0.0.0 (X)

 

 

 

 

 

 

 

 

# 멀티 캐스트(사용 O 설정 X)

 

1. D 클래스 : 맨 앞에 비트가 '1110'인 공통 비트 클래스

 

224.0.0.0      ~    239.255.255.255         서브넷 마스크 개념 X  


1110 0000          1110 1111

 


 

 


** IANA 예비용으로 예약된 주소 (사용 X / 설정 X)

 

2. E 클래스

 

240.0.0.0     ~     255.255.255.255

 

 

**IP 주소 검색 사이트 whois  https://whois.kisa.or.kr/kor/main.jsp

 

 

 

 

 

#설정이 불가능한 IP 주소

 

- D 클래스 224.0.0.0      ~    239.255.255.255 


- E 클래스  240.0.0.0     ~     255.255.255.255


- 127.x.x.x : 로컬 루프백 (Localhost) 주소


- 0.x.x.x

 

 

*local loopback

 

- 자가 테스트

 

 

 

 

#네트워크 이름 & 서브넷 브로드캐스트 주소

 

121.160.41.0             <- 네트워크 이름


121.160.41.23               255.255.255.0


121.160.41.255           <- 서브넷 브로드캐스트 주소

 

 

121.161.0.0                <- 네트워크 이름


121.160.41.23              255.255.255.0


121.160.255.255           <- 서브넷 브로드캐스트 주소

 

 

 

 

#서브넷 마스크        Prefix Mask             설정 가능한 IP 주소 개수(호스트)

 

255.255.255.255.             /32
255.255.255.0                /24                          2^8 -2개
255.255.0.0                   /16                          2^16 -2개
255.0.0.0                      /8                            2^24 -2개
0.0.0.0                         /0

 


255.255.255.252             /30                         2^2 -2 = 2개
255.255.255.248             /29                         2^3 -2 = 14개
255.255.255.224             /27                         2^5 -2 = 30개
255.255.255.128             /25                         2^7 -2 = 126개
255.255.240.0                /20                         2^12 -2

 

 

 

 

 

#공인 & 사설 IP 주소

 

1. 공인 IP 주소

 

- 인터넷이 가능한 주소


- ISP 업체로부터 임대 받아서 사용해야 한다.

 

 

 

2. 사설 IP 주소

 

- 내부에서만 사용 가능한 IP주소

- 인터넷 관계 X,ISP 업체 임대 X

 

 

 

A class   10.0.0.0  ~  10.255.255.255

 

B class   172.16.0.0  ~  172.16.255.255

 

C class   192.168.0.0  ~  192.168.255.255

 

 

[참고] 사설 IP 주소를 사용하는 내부 네트워크에서 인터넷을 하려면?

 

- NAT 기능 이용

 

                                         NAT


PC--------------------------[F0/0]R1[F0/1]-----------------------인터넷


192.168.1.254 192.168.1.1    121.160.53.3

 

SA 192.168.1.254                  ──────NAT─> SA 121.160.53.3

 

DA 192.168.1.254             <─NAT────────DA 121.160.53.3

 

 

 

#IP 주소 사용 주의 사항

 

1. 중복해서 사용할 수 없다.


2. 미할당 IP 주소는 다른 네트워크에 할당하면 안된다. (이유 : 네트워크 이름 중복)

 

 

 

 

#클래스 예제

 

Ex1) 19.188.27.251 255.0.0.0

 

1) 무슨 클래스?   A
2) 네트워크 이름과 서브넷 브로드케스트 주소?  19.0.0.0     19.255.255.255
3) 설정 가능한 IP 주소 범위와 개수?  19.0.0.1~19.255.255.254  =  2^24 - 2개
4) 서브넷 마스크를 Prefix 표기 ->  8
5) 사설/공인? 사설

 

 

Ex2) 123.255.181.17 255.255.0.0

 

1) 무슨 클래스?  A
2) 네트워크 이름과 서브넷 브로드케스트 주소?  123.255.0.0  123.255.255.255
3) 설정 가능한 IP 주소 범위와 개수?  123.255.0.1 ~ 123.255.255.254 2^16 - 2개
4) 서브넷 마스크를 Prefix 표기 ->  16
5) 사설/공인? 공인

 

Ex3) 172.16.255.254 255.255.0.0

 

1) 무슨 클래스?  B
2) 네트워크 이름과 서브넷 브로드케스트 주소? 172.16.0.0  172.16.255.255
3) 설정 가능한 IP 주소 범위와 개수?   172.16.0.1 ~ 172.16.255.254
4) 서브넷 마스크를 Prefix 표기 -> 16
5) 사설/공인? 사설

 

 

Ex4) 172.30.1.4 255.255.255.0

 

1) 무슨 클래스?  B
2) 네트워크 이름과 서브넷 브로드케스트 주소? 172.30.1.0  172.30.1.255
3) 설정 가능한 IP 주소 범위와 개수?   172.30.1.1 ~ 172.30.1.254
4) 서브넷 마스크를 Prefix 표기 ->  24
5) 사설/공인? 사설

 

 

Ex5) 192.168.133.87 255.255.255.0


1) 무슨 클래스?  C
2) 네트워크 이름과 서브넷 브로드케스트 주소? 192.168.133.0  192.168.133.255
3) 설정 가능한 IP 주소 범위와 개수?  192.168.133.1 ~ 192.168.133.254
4) 서브넷 마스크를 Prefix 표기 ->  24
5) 사설/공인? 사설

 

 

 

Ex6) 172.16.1.100 255.255.255.0

 

1) 무슨 클래스?   B
2) 네트워크 이름과 서브넷 브로드케스트 주소? 172.16.1.0  172.16.1.255
3) 설정 가능한 IP 주소 범위와 개수? 172.16.1.1 ~ 172.16.1.254
4) 서브넷 마스크를 Prefix 표기 ->  24
5) 사설/공인? 사설

 

 

Ex7) 211.241.228.14 255.255.255.0

 

1) 무슨 클래스?  C
2) 네트워크 이름과 서브넷 브로드케스트 주소? 211.241.228.0  211.241.228.255
3) 설정 가능한 IP 주소 범위와 개수? 211.241.228.1 ~ 211.241.228.254
4) 서브넷 마스크를 Prefix 표기 ->  24
5) 사설/공인? 공인

 

 

Ex8) 10.211.10.7 255.255.255.0

 

1) 무슨 클래스?  A
2) 네트워크 이름과 서브넷 브로드케스트 주소?  10.211.10.0  10.211.10.255
3) 설정 가능한 IP 주소 범위와 개수?  10.211.10.1 ~ 10.211.10.254
4) 서브넷 마스크를 Prefix 표기 ->  24
5) 사설/공인? 사설

 

 

 

Ex9) 다음과 같은 경우, 어떤 클래스 및 어떤 서브넷 마스크를 사용하는 것이 효율적인가?

 

 1) Host 230개 : A,B,C         /24           2^8 - 2 = 254개
 2) Host 50,000개 : A,B        /16          2^16 -2 = 65534개
 3) Host 10,000,000개 : A      /8           2^24 -2 = 16,777,124개
 4) Host 25개 : A,B,C           /27          2^5 -2 = 30개            
 5) Host 1000개 : A,B          /22           2^10 -2 = 1022개

 

 

 

       

Ex10) 서브넷 마스크가 아닌 것은? 1

 

 ① 255.255.241.0 
 ② 255.255.248.0 
 ③ 255.255.255.252
 ④ 0.0.0.0

 

 


Host 500개           A,B    /23     2^9 -2 = 510개
Host 2개              A,B,C   /30     2^2 -2 = 2개

 

 

 


*내부 네트워크에서 주로 사용하는 Prefix

 

              /23   510개
              /24   254개
              /25   126개

 

*외부 네트워크에서 주로 사용하는 Prefix

 

              /30   2개

*데이터 전송 프로토콜

 

1) TCP (Transmission Control Protocol)

 

- Layer 4 계층 프로토콜

 

- 연결 지향성 프로토콜 : 상대방과 통신 수립 연결을 실시하고 난 이후 데이터 요청 및 응답 실시

 

- 3-Way 핸드 쉐이킹 동작 실시 (syn,ack로 3번교환)

 

- 정상적으로 TCP연결이 되는지 알수있어야 함 (공격인지 아닌지 확인할수있어야 함)

 

 

  A(클라이언트)                                            B(서버)

데이터 서비스 요청                               데이터/서비스 응답

   Syn ->
                                                           <- Syn, Ack
   Ack -> 
                            통신 수립 완료 
                            (ESTABLISHED)

 

 

 

*TCP Control Flag (6bit)*

 

 - urg (1.....) : 긴급한 데이터 표기


 - ack (.1....) : 확인 응답/승인


 - psh (..1...) : 수신처리 이후, 상위 프로세스로 처리


 - rst (...1..) : 강제 종료


 - syn (....1.) : 통신 개시


 - fin (.....1) : 정상적인 종료

 

 

                  URG             ACK            PUSH           RESET           SYN             FIN

2^7             2^6             2^5             2^4              2^3            2^2             2^1

128              64              32                16                8                 4                2

 

 

 

[참고]공격자의 공격 방법 (보안 쪽에서 자세히 다룸)

 

공격 유형

 

0. 정보 수집

 

- 사회 공학적 기법 : 사람 , 장소 , 사물적으로 정보 수집
  90%의 정보유출은 사회 공학적 기법으로 유출됨

 

- 풋 프린팅 : 기술적으로 정보 수집

 


1. 스푸핑 공격 (Spoofing atk)

 

- 변조 공격

 

- 공격자의 위치 및 주소 노출 방지

 

- 공격자에게 돌아오는 패켓 수신 방지

 

- 정보 유출 및 해킹

 

Ex) IP 스푸핑 , MAC 스푸핑 , ARP 스푸핑 , DHCP 스푸핑

 


2. 플러딩 공격 (Flooding atk)

 

- 대량 패켓 전송 공격

 

- 시스템 부하 , 다운 , 재부팅 발생 , 서비스 거부(DOS)

 

Ex) TCP Syn Flooding , ICMP Flooding , UDP Flooding

 

 

#서버 부화 , 플러딩 공격


TCP SYN Flooding (DOS공격)

 

                공격자                                          웹-서버

           SYN(초당 1만개) ->

                                                                 서버 부화

 

 

 

 

 

#데이터 스트림 서비스 : 전송효율과 수신효율을 극대화 하기 위해 사용
                                데이터 단위 : 세그먼트

 

 

 

 

 

#흐름 제어 기능 : stop & wait 기법 -> 슬라이딩 윈도우 기법 

 

- 슬라이딩 기법이 나온이후 stop&wait보다 많이 사용됨

 

 

 

*stop & wait : 송신한 세그먼트에 대한 Ack를 수신해야지만, 그 다음 세그먼트 전송
                   (다음 세그먼트 송신 처리 지연 발생 및 Ack 양 많음)

 

 

                              Stop & wait

                  A                                    B

 

                 1 ->
                                                  <- Ack 1

                 2 ->
                                                  <- Ack 2

                 3 ->
                                                  <- Ack 3

 

 

 

 

 

*슬라이딩 윈도우 : 수신측 세그먼트 처리양에 맞게 송신측에서 세그먼트 다수 전송
                         (세그먼트 송신 지연 발생 및 Ack 양 최소함)

 

 

 

 

                                슬라이딩 윈도우

                   윈도우 : 송수신 할 수 있는 세그먼트 양


                    A                                       B

 

                   1->
                                                        <- Ack 2


                 2,3,4,5->                                                       

                                                         <- Ack 6


              6,7,8,9,10,11,12->

                                                        

 

 

 

 

*혼잡 제어 기능 : 혼잡 발생시 전송률을 최소화하는 기능

 

 

 

*오류 검사 : 수신한 세그먼트 손상 여부 판단
                (손상된 세그먼트는 드랍 처리 실시)

 

 

*재전송 기능 : 송신한 세그먼트에 대한 Ack를 수신하지 못하면, 해당 세그먼트를 재전송 실시

 

 

*Window Size : 송수신할 수 있는 세그먼트양

 

 

*HTTP(80), HTTPs(443), Telnet(23), SSH(22), FTP(21), FTP-Data(20), SMTP(25), POP3(110)

 

 

 

 

 

2) UDP(User Datagram Protocol)

 

- Layer 4 계층 프로토콜

 

- 비연결 지향성 프로토콜

 

 

- 3-Way 핸드 쉐이킹 동작 실시 X
- 데이터 스트림 서비스  X
- 혼잡 제어 기능   X
- 재전송 기능   X
- Window Size   X

 

- 오류 검사

 

- DNS(53), TFTP(69), DHCP Server(67), DHCP Client(68), SNMP(161), NTP(123)

 

 

 

*TCP : 연결이 필요한 서비스에 사용
        (신뢰성이 높다 , 신속성이 낮다.)

 

 

*UDP : 연결이 불필요한 서비스에 사용
         (신뢰성이 낮다 , 신속성이 높다)

 

 

 

 

3) IP(Internet Protocol)

 

- Layer 3 계층 프로토콜

 

- 비연결 지향성 프로토콜

 

- 로컬 환경에서 리모트 환경으로 데이터 전송 담당

  (현재 내 네트워크에서 다른 네트워크로 데이터 전송)

 

- TTL(Time to Live) : 8bit(0~255), 거리 측정 및 패켓 루프 방지 기능

 

 

*운영 체제 TTL 기본값

 

- Cisco  255
- Window 128
- Linux  64

 

 

거리측정

win7-----------------------R1---------------------R2---------------------R3----------------Linux

 

TTL=128      ->      TTL = 127     ->      TTL = 126     ->      TTL = 125    ->      TTL = 125

 

TTL = 61             <- TTL = 61           <- TTL = 62         <-    TTL = 63          <-  TTL = 64

 

 

 

 

*루프방지

 

- 데이터가 루프현상이 일어나 TTL값이 0이되면 데이터를 drop

 

 

 

 

*Ethernet : Layer 2계층 프로토콜

 

- ETH 환경 내에서 데이터 전송을 담당한다.

 

 

Layer 4            TCP ㅣ HTTP   세그먼트


Layer 3            IP ㅣ TCP ㅣ HTTP    패켓


Layer 2           ETH ㅣ IP ㅣ TCP ㅣ HTTP   프레임


Layer 1          전기 신호 입출력         0,1         bit

 

 

 

 

4) ICMP(Internet Control Message Protocol)

 

- IP 프로토콜을 이용한 데이터 전송 여부 가능 테스트 프로토콜

 

- ping , tracert 명령어

 

 

                                 A                                          B


                         192.168.14.14                           192.168.14.11

 

                     ping 192.168.14.11

 

                   ICMP Echo-Request ->                 <- ICMP Echo-Reply


                     SA 192.168.14.14                         SA 192.168.14.11
                     DA 192.168.14.11                        DA 192.168.14.14

 

 

*tracert : 경로 추적 테스트 목적

 

 

#naver , daum : 방화벽으로 ICMP공격 방지

 

#google : 데이터 전송량이 많아지면 자동적으로 드랍 ICMP공격 방지

 

 

 

 

5) ARP(Address Resolution Protocol)

 

- 주소 변환 프로토콜

 

- 목적지 IP 주소에 대한 MAC 주소를 설정하는 프로토콜

 

- 만약 , 목적지 IP 주소에 대한 MAC 주소가 없을 경우 다음과 같이 ARP 요청 및 응답 실시

 

 

                                A                                      B


                       192.168.14.11                        192.168.14.14


                    90-9F-33-EB-34-98                 90-9f-33-eb-36-ff

 

         ARP Reqeust(192.168.14.14, MAC ?) -> 


                 SA 90-9F-33-EB-34-98
                 DA FF-FF-FF-FF-FF-FF


                                                    <- ARP Response(192.168.14.14


                                                          MAC 90-9f-33-eb-36-ff)
                                                           SA 90-9f-33-eb-36-ff
                                                           DA 90-9F-33-EB-34-98 

 

 

 

  

Ex) A - > ARP 요청 메세지

 

        cmd -> arp

 

- arp -d : arp 삭제

- arp -a : arp테이블 열기
- arp -s : 수동으로 주소 등록

 

영구적으로 등록되는 것은 아니다.

 

"13.13.10.3의 MAC주소 ? "
---------------------------------ARP 요청 메세지

SA 00de.584c.1278
DA FFFF.FFFF.FFFF   <- 브로드 캐스트로 설정되는 MAC주소

---------------------------------ETH

 

*A PC에서 ARP요청을 하면브로드캐스트로 B,C PC에 ARP요청을
 보내게 되면 C PC에 자동으로 A에 MAC주소를 할당(학습)된다.


"13.13.10.3"의 MAC은 0010.115C.81E2

 

 

 

 

[참고] 프로토콜을 이용한 공격 유형

 

 

프로토콜                       공격유형

 

TCP                             TCP Syn Flooding
UDP                            UDP Flooding
IP                                IP Spoofing
ICMP                           ICMP Flooding(ICMP Land , ICMP Smurf)
ARP                            ARP Flooding , ARP Spoofing

*네트워크 주소 체계

 

1) 포트 번호

 

- TCP , UDP 헤더 안에 포함된 주소

 

- 주소 , 체계 : 16bit(0~65535)

 

- 클라이언트 입장  : 서비스 요청 , 실행

 

- 서버 입장 : 서비스 구분 , 제공

 

 

 

 

2) IP 주소

 

- IP 헤더 안에 포함된 주소


- 주소 체계 : 32bit(2^32개 = 4,294,967,296)


- 로컬 환경에서 리모트 환경으로 데이터 전송 담당


- 변경이 가능한 논리적인 주소

 

 

 

 

 

3)MAC 주소

 

- ETH 헤더 안에 포함된 주소


- 주소 체계 : 48bit(2^48개)


- ETH 로컬 환경 내에서 데이터 전송 담당


- 00-e0-4c-14-62-ba
   ----------- OUI 24bit : 랜카드 업체가 IEEE 기관으로부터 임대받은 주소

 

- 변경 불가능한 물리적인 주소

 

 

 

#User Ports(1024~49151) : PC에서 사용하는 포트

 

 

#Dynamic and/or Private Ports(49152~65535) : 동적/사설 포트

 

 

#System Ports (0~1023) 서비스 예약용

 

            TCP                                                  UDP

   

  http            80                        domain(dns)                 53

  https           443                     bootps(DHCP Server)      68               

  telnet          23                       bootpc(DHCP Client)      67

  ssh             22                        tftp                            69 

  ftp             21                        snmp                         161 

  ftp-data      20                        ntp                            123

  smtp          25                        syslog                        514

  pop3          110 

 

 

 

윈도우 원격 포트번호 : 3389

 

 

 

#*SNMP* (Simple Network Management Protocol)

관리 대상 장비 : 시스템 100대 , 라우터 2대 , 스위치 30대 , 방화벽 2대   <- SNMP 에이전트

 

 

- CPU , 메모리 , 트래픽 현황 .......      분 / 시 / 일 / 주 / 월 / 년 상태 파악 및 보고서 작성

SNMP 매니저 < -- SNMP에이전트에서 보고함 Ports : 161

 

 

 

*네트워크

 

- 네트워크란 정보 공유를 목적으로 PC와 PC들이 모여서 구성된 망이다.

 

- 네트워크에 목적은 정보공유이다.

 

- 네트워크에 구성은 PC와 PC들이 연결된다는 것이다.

 

- 네트워크에 장점은 편의성이 제공된다는 것이고 단점은 정보공유를 목적으로 PC와 PC들이 연결됨으로서

  보안성이 취약하다는 점이 있다.

 

 

 

#프로토콜 (Protocol)

 

- 데이터 전송규약 과 데이터 전송도구를 뜻한다.

 

- 네트워크 환경 내에서 데이터를 전송할 때 전송 방법을 정의하는 규칙/제도이다.

 

Ex) TCP , UDP , IP , Ethernet

 

 

 

#인캡슐레이션(Encapsulation) -> 디캡슐레이션 (Decapsulation)

 

- 데이터를 전송하기 위해서 프로토콜 정보를 추가하는 패키지 과정이다.

 

- 인캡슐레이션(Encapsulation)으로 데이터가 포장되어 전송되고 이 데이터가 나에게 온 데이터가 맞다면

  디캡슐레이션 (Decapsulation)을 이용해 데이터를 풀어서 보는 것

  나에게 온 데이터가 아니라면 절대 디캡슐레이션을 하면 안된다.

 

Ex) ETH ㅣ IP ㅣ TCP ㅣ HTTP  :  HTTP데이터를 포장한 ETH , IP , TCP등을 헤더라고 부른다.

     헤더   헤더  헤더

 

 

 

 

#네트워크 유형

 

1)LAN(Local Area Network)

 

- 내부 네트워크

 

- 장비 : 스위치(Switch) , PC 랜-카드(NIC = Network Interface Card) , UTP 케이블(랜 선) , 무선 AP

 

- 프로토콜 : Ethernet

 

- 구축 방법 : 버스 토폴리지 , 스타 토폴로지

 

- 설계 핵심 : 확장성 , 이중성 , 가용성

  확장성 (스타 토폴로지 사용) , 이중성 (이중화 도입) , 가용성 (최적의 환경 , 좋은장비 사용)

 

 

- 관리 : 사내 관리자 및 업체 관리자

 

 

 

*버스 토폴로지(Bus topology)

 

- 장점 : 케이블 연결이 쉽다.


- 단점 : 하나의 스위치에 문제가 생겼을 때 대체 구조가 없다. 권장하지 않음

 

 

 

 

 

 

 

*스타 토폴로지(Star topology)

 

- 장점 : 메인스위치를 이용하기 때문에 스위치에 문제가 생겨도 대체할 수 있음 대부분의 네트워크망이 스타 사용

           확장성이 있고 이중성(이중화 도입)이 지원됨 


- 단점 : 케이블 연결이 불편하다 , 어렵다.

 

 

 

 

 

 

 

2)WAN(Wide Area Network)

 

- LAN과 LAN을 연결하는 외부 네트워크 (광범위한 네트워크)

 

- 장비 : 라우터

 

- 프로토콜 : HDLC , PPP , Frame-Relay , Ethernet

 

- 구축 방법 : ISP 업체로부터 회선(네트워크망)을 임대하는 방식이다.

 

- 관리 : ISP업체 관리자 및 SI/NI업체 관리자

 

 

 

3)Internet

 

- 전 세계적으로 연결된 네트워크 망

 

- 프로토콜 : TCP/IP

 

 

 

4)Intranet

 

- 기업 내부에서 사용하는 인터넷과 같은 네트워크 망이다.

  (외부에서 부터 접근이 가능한 Intranet도 다수 존재한다.)

 

- 용도 : 회사 게시판 , 공지사항 , 기록/내역...

          

 

 

 

#데이터 전송 관계

 

- 요청에 의한 응답 관계

 

- 요청자 : 클라이언트(Client) 

- 응답자 : 서버(Server)

 

 

 

 

#데이터 전송 방식

 

1) 유니캐스트(Unicast)

 

- 1:1 데이터 전송

Ex) 인터넷

 

 

 

2) 브로드캐스트(Broadcast)

 

- 1:전체 데이터 전송 

Ex) ARP 요청 , DHCP 요청

 

 

3) 멀티캐스트(Multicast) 

 

- 1:특정 그룹 데이터 전송

Ex) IPTV

 

 

 

*헤더파일

 

- 헤더파일 만드는 방법 C언어에서 제공하는 라이브러리를 포함 < .h >

  사용자 헤더파일 " .h "

 

 

 

 

 

 

 

 

 

 

 

 

 

#헤더파일에 선언한 함수를 소스파일에서 실행

 

 

 

 

 

 

 

 

 

 

#이중 포인터

 

- 이중 포인터(double pointer) : 포인터를 가리키는 포인터

 

 

 

 

 

 

 

#이중 포인터 프로그램

 

 

 

 

 

 

 

 

 

 

#순환(recursion)

 

- 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법

 

- 팩토리얼의 정의

 

 

 

 

 

 

 

 

 

#재귀 함수

 

- 자기 자신을 재호출 하는 형태로 정의된 함수를 가리켜서 재귀함수라 한다.

 

- 함수의 복사본을 cpu가 읽을 수 있도록 명령문에 추가된다.

 

- 재귀함수는 어떤 조건으로 멈추지않으면 계속 함수가 무한반복 되기 때문에 멈추는 조건이 필요하다.

 

 

 

 

 

 

 

 

 

#탈출 조건이 없다면?

 

 

 

 

 

 

 

 

 

 

 

#재귀 함수의 이해

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 구하기

 

- 팩토리얼 프로그래밍 #2 : (n - 1)! 팩토리얼을 현재 작성중인 함수를 다시 호출하여 계산(순환 호출)

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 호출 순서

 

 

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 구하기 예제

 

 

 

 

 

 

 

*정렬

 

- 정렬은 물건을 크기순으로 오름차순이나 내림차순으로 나열하는 것

 

- 정렬은 컴퓨터 공학분야에서 가장 기본적이고 중요한 알고리즘 중의 하나이다.

 

 

 

#선택 정렬

 

- 선택 정렬(selection sort) : 정렬이 안된 숫자들 중 최소값을 선택하여 배열의 첫 번째 요소와 교환하는 것

 

 

 

 

 

 

 

#순차 탐색

 

- 순차 탐색(sequential search) : 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교하여 원하는 값을 찾아가는 방법이다.

 

 

 

 

 

 

 

 

 

 

#이진 탐색

 

- 이진 탐색(binary search) : 정렬된 배열의 중앙에 위치한 원소와 비교를 되풀이

 

 

 

 

 

 

 

 

 

 

 

 

#문자 검색 : strchr()

 

 

 

 

 

 

 

 

 

 

 

 

#전처리기(Preprocessor) : 컴파일하기 앞서서 소스파일을 처리 하는 컴파일러의 한 부분

 

 

 

 

 

 

 

 

 

 

 

#전처리기 요약

 

 

 

 

 

 

 

 

 

 

#매크로 개념

 

 

 

 

 

 

 

 

 

 

 

 

 

#매크로 종류

 

*단순 매크로

 

- 단순 매크로(macro) : 숫자 상수를 기호 상수로 만든 것

 

 

 

 

 

 

 

 

 

 

 

 

*함수 매크로

 

- 함수 매크로(function-like macro) : 매크로가 함수처럼 매개변수를 가지는 것

 

Ex) #define Square(x) ((x) * (x))

 

 

 

 

 

 

 

 

 

#함수 매크로의 장단점

 

- 함수 호출 단계가 필요없어 실행 속도가 빠르다.

 

- 소스 코드의 길이가 길어진다.

 

 

*간단한 기능은 매크로를 사용

 

- #define MIN(x,y)   ((x)) < (y) ? (x) : ((y))

- #define ABS(x)      ((x)) > 0 ? (x) : -((x))

 

 

*매크로를 한줄 이상 연장하는 방법

 

- #define PRINT(x) if(debug==1 && \

mode ==1)\

printf("%d",x);

 

 

 

 

 

#ifdef

 

- 어떤 조건이 만족되었을 경우에만 컴파일하는 조건부 컴파일 지시

 

- 조건부 컴파일을 위한 매크로

 

#if 조건이 참일 경우에는

 ... 실행

#endif

 ...여기까지

 

 

 

 

 

 

 

 

 

 

 

#if

 

- 기호가 참으로 계산되면 컴파일

 

- 조건은 상수여야 하고 논리 , 관계 연산자 사용 가능

 

 

사용 형식

 

#if 조건

    문장들 

#endif

 

- 매크로의 값이 참이면 #if와 #endif 있는 모든 문장들을 컴파일

 

 

 

 

*메모리 할당

 

- 코드영역  : 실행할 프로그램의 코드가 저장되는 메모리 공간

   CPU는 코드 영역에 저장된 명령문을 하나씩 가져다가 실행한다.

 

 

- 데이터 영역 : 전역변수와 static 변수가 할당되는 영역

                    프로그램 시작과 동시에 할당되어 종료시 까지 남아있는 특징의 변수가 저장되는 영역

 

 

- 힙 영역 : 프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을 하기위한 영역

              동적 메모리가 할당되는 부분

 

 

- 스택 영역 : 지역변수와 매개변수가 할당되는 영역

                 함수를 빠져나가면 소멸되는 변수를 저장하는 영역 

 

 

 

 

 

 

 

 

 

 

#동적 할당 메모리의 개념

 

- 프로그램이 메모리를 할당받는 방법

 

1. 정적(static)

2. 동적(dynamic)

 

 

 

#동적 메모리 할당

 

- 실행 도중에 동적으로 메모리를 할당받는 것

 

- 사용이 끝나면 시스템에 메모리를 반납

 

- score = (int *)

  malloc(100*sizeof(int));

 

- 필요한 만큼만 할당을 받고 메모리를 매우 효율적으로 사용

 

- malloc() 계열의 라이브러리 함수를 사용

 

 

 

#void *malloc(size_t size)

 

- size는 byte의 수

 

- malloc()함수는 메모리 블럭의 첫 번째 byte에 대한 주소를 반환

 

- 만약 요청한 메모리 공간을 할당할 수 없는 경우에만 NULL값을 반환

 

 

 

#정적,동적 메모리 할당과 해제

 

 

 

 

 

 

 

 

 

#malloc() 함수

 

- 함수 안에서 이름을 입력받아 메인에 출력

 

- malloc() - 헤더파일 : stdlib.h (malloc+사촌)

                            : malloc.h (malloc만 사용)

 

- 힙 영역의 메모리 공간 할당과 해제

 

- 할당 void* malloc(size);

 

/*

malloc함수는 인자로 숫자만 전달받을 뿐이니

할당 되는 메모리의 용도를 알지 못한다.

따라서 메모리의 포인터 형을 결정 못한다.

형변환의 과정을 거쳐서 할당된 메모리의

주소값을 저장!

*/

 

 

 

#free() 함수 : malloc()함수로 사용한 메모리 해제

 

- void free(포인터 변수명);

 

- 메모리 해제를 하지 않으면 메모리 부족과 같은 문제를 일으킬 수 있으니 꼭 해제하는 습관을 들이자.

 

 

 

 

#malloc() 함수 사용 예

 

 

 

*정수

 

 

 

 

 

 

 

 

 

*문자

 

 

 

 

 

 

 

 

 

 

*학생 점수를 입력 받아보기

 

 

 

 

 

 

 

 

 

#malloc() 함수에 의한 배열 공간 할당

 

 

 

 

 

 

 

 

 

 

 

#calloc()함수

 

 

 

 

 

 

 

 

 

 

 

 

 

#realloc() 함수

 

 

 

 

 

 

 

 

 

 

#자기 참조 구조체 정의

 

*자기 참조 구조체(self reference struct)

 

- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수를 갖는 구조체

 

 

*구조체 selfref

 

- 멤버로 int형 n과 struct selfref *형 next로 구성

 

- 즉 멤버 next의 자료형은 지금 정의하고있는 구조체의 포인터형

 

- 구조체 selfref는 자기 참조 구조체

 

- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수

 

- 구조체는 자기 자신 포인터를 멤버로 사용할 수 있으나 자기 자신은 사용 불가능

 

 

 

 

 

#구조체를 이용한 동적 할당

 

 

 

 

 

 

 

 

#두대의 자동차를 입력받아서 메모리 공간을 할당받고 정보를 출력받는 프로그램

 

 

 

 

 

*자료형의 분류

 

- 기본 자료형 : char , int , float , double

 

- 파생 자료형 : 배열 , 열거형 , 구조체 , 공용체

 

 

 

#구조체란 ?

 

- 여러 자료형 변수를 묶어놓은 공간이다.

 

- 구조체는 사용자가 만들어 사용하는 자료형이다.

  (사용자 정의 자료형)

 

- 구조체 선언과 구조체 변수 선언은 다르므로 주의

 

- 구조체 선언이 있어야 구조체 변수 선언이 가능하다.

 

 

 

#구조체의 필요성

 

- 변수들을 하나로 묶을 수 있다.

 

 

 

 

 

 

 

 

 

#구조체와 배열

 

 

 

 

 

 

 

 

 

 

 

 

#구조체 선언

 

- 여러 자료형 변수를 묶어놓은 공간을 설계해놓은 설계도

 

- 변수 선언과 모양이 비슷하지만 , 저장 공간이 생기지 않는다.

 

- 여러개의 구조체를 선언 할때는 이름이 중복되면 안된다.

 

선언 형식

 

struct 구조체 이름{

제목

주연배우

개봉날짜

};

 

 

 

 

 

 

 

 

 

#구조체 변수

 

- 구조체 선언(설계도)의 구조로 실제 데이터를 저장하는 전체 공간(집)이다.

 

- 구조체 정의와 구조체 변수 선언은 다르다.

 

 

 

 

 

 

 

 

 

 

#구조체 초기화

 

- 중괄호를 이용하여 초기값을 나열

 

 

 

 

 

 

 

 

#구조체 멤버 참조

 

- 구조체 멤버를 참조하려면 ( . ) 연산자를 이용하면 된다.

 

 

 

 

 

 

 

 

 

 

#구조체를 멤버로 가지는 구조체

 

 

 

 

 

 

 

 

 

 

 

#구조체 변수의 대입과 비교

 

- 같은 구조체 변수끼리 대입은 가능하지만 비교는 불가능하다.

 

 

 

 

 

 

 

 

 

#(이름 , 핸드폰번호 , 나이) 2명에 대한 정보

 

 

 

 

 

 

 

 

 

#구조체 배열

 

 

선언형식

 

struct person{
  int number;

  char name[20];

  double grade;

};

 

main (void)

{

 struct person list[100] //구조체 배열 선언

}    

 

 

#구조체 배열 초기화

 

 

 

 

 

 

 

#구조체 배열을 사용해 3명에 대한 (이름,핸드폰번호,나이) 정보 받기

 

 

 

 

 

 

 

 

#구조체 함수

 

- 구조체를 함수로 전달하는 경우 : 구조체의 복사본이 함수로 전달되게 된다.

 

 만약 구조체의 크기가 크면 그만큼 시간과 메모리가 소요된다.

 

 

 

 

 

 

 

 

 

- 구조체의 포인터를 함수의 인수로 전달하는 경우 : 시간과 공간을 절약할 수 있다.

                                                                   원본 훼손의 가능성이 있다.

 

 

 

 

 

 

 

 

 

 

#구조체를 반환하는 경우

 

- 복사본이 반환

 

 

 

 

 

 

 

 

#typedef

 

- typedef는 새로운 자료형(type)을 정의(define)하는것이다.

 

- C의 기본 자료형을 확장시키는 역할

 

 

 

 

 

 

 

 

 

 

 

#구조체로 typedef 정의

 

 

사용형식

 

typedef struct point{

 

  int x;

  int y;

 

}PP;

 

 

 

 

 

 

 

 

#출력함수로 출력해보기

 

 

 

 

 

 

 

 

 

#구조체 포인터

 

- 구조체 변수를 대상으로 가리키는 포인터변수

  포인터 -> 구조체!

 

 

 

 

 

 

 

 

# -> 연산자

 

 

 

 

 

 

 

#예제

 

 

 

 

 

 

 

 

 

#포인터를 멤버로 가지는 구조체

 

 

 

 

 

 

 

 

 

 

 

#구조체를 반환하는 경우

 

- 복사본이 반환된다.

 

 

 

 

 

 

 

#구조체 예제들

 

 

- 우유이름 , 가격표기

 

 

 

 

 

 

 

 

- 영어 사전 프로그램

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 두 가지 차 이름,가격을 입력받고 출력

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 구조체 안에 구조체 본인을 선언 , 구조체 포인터변수 선언 변수,배열

 

 

 

 

 

 

 

 

 

*포인터

 

- 메모리 주소를 이용하여 원하는 저장 공간에 접근하는 것을 얘기한다.

 

- 주소를 가지고있는 변수

 

 

 

#포인터 변수

 

- 주소값

  변수의 주소를 계산하는 연산자 : &

 

- 가리키는 대상의 정보가 포인터 안에 있어야함.

 

 

 

 

 

 

 

 

 

#포인터 변수를 사용하는 이유

 

- 함수가 리턴해야 할 값이 2개 이상인 경우 사용한다.

 

- 함수에서 배열을 매개 변수로 받아들일 때

 

- 프로그램에서 동적할당을 진행할 때 (자료구조)

 

- 이름을 모르는 변수를 이용해야 될 경우

   (외부 프로그램 및 외부 메모리에 직접 접근이 가능하다.)

 

- 메모리를 효율적으로 사용할 수 있다.

 Ex) int arr[100];

 

 

 

#포인터 변수의 크기

 

- 16bit 시스템 -> 주소값의 크기 -> 2byte

- 32bit 시스템 -> 주고값의 크기 -> 4byte

 

- 메모리의 주소는 고정적으로 정해져있다.

 

- 메모리의 주소는 음수 x

 

- %d -> +,-

- %u -> 부호없이 양수만 출력

- %p -> 16진수의 주소값

 

0~42억 -> 4byte

 

 

 

#포인터 선언

 

정보↓

     int* 포인터 변수명 = 가리키는 대상의 주소값 

 

 

 

 

 

 

 

 

 

#포인터 변수의 연결

 

 

 

 

 

 

 

#다양한 포인터 선언

 

 

 

 

 

 

 

 

#간접 참조 연산자 ( * )

 

- 포인터가 가리키는 값을 가져오는 연산자

 

- 지정된 위치에서 포인터의 타입에 따라 값을 읽어들인다.

 

- &연산자는 변수의 주소를 구하여 포인터에 대입할 때 사용 , *연산자는 포인터를 통하여 변수를 간접 참조할 때 사용

 

 

 

 

 

 

 

 

 

 

#포인터 예제

 

 

 

 

 

 

 

 

 

 

#포인터와 scanf()를 이용하여 정수 1개를 입력 받고 값이

  짝수인 경우 "짝수" 홀수면 "홀수" 출력하는 프로그램을 작성해보자

 

 

 

 

 

 

 

 

 

 

 

 

#포인터 사용시 주의점

 

 

 

 

 

 

 

 

 

 

 

#포인터 연산

 

- 가능한 연산 : 증가 , 감소 , 덧셈 , 뺄셈 연산

 

- 증가 연산의 경우 증가되는 값은 포인터가 가리키는 자료형의 크기만큼 증가

 

 

 

 

 

 

#증가 연산 예제

 

 

 

 

 

 

 

 

 

 

 

 

#간접 참조 연산자와 증감 연산자

 

 

- *p++;  = p가 가리키는 위치에서 값을 가져온 후에 p를 증가한다.

 

- (*p)++; = p가 가리키는 위치의 값을 증가한다.

 

 

 

 

 

 

 

#포인터 배열

 

- 배열과 포인터는 아주 밀접한 관계를 가지고있다.

 

- 배열 이름 = 포인터

 

- 포인터는 배열처럼 사용이 가능하다.

 

- int arr[3]; 

 

- arr -> &arr[0]주소값을 가리킨다.

 

 

#int형 변수 정보

 

- 배열을 구성하는 원소 한개의 접근하는 형식이다.

 

- 배열 전체의 시작주소만 저장한다.

 

- 배열의 이름 자체는 바꿀 수 없는 상수이며 곧 주소값을 의미하게 된다.

 

scanf("%s",name)

char name[30];

name -> name[0] - 주소값을 가리키고 문자를 저장하라 라는 정보를 가지고있다.

 

- 배열은 포인터이기 때문에 메모리에 접근하는 간접 참조 연산자( * )를 사용할 수 있다. 

 

 

 

 

#포인터 배열 주소값 비교

 

 

 

 

 

 

 

 

 

#2차원 배열에 문자열 저장

 

 

 

 

 

 

 

 

 

#문자형 포인터 배열

 

 

 

 

 

 

 

 

 

#배열3개를 선언하고 배열에 있는 값을 10진수와 주소값으로 출력

 

사용형식

 

- 정수 주소값 3개를 저장하는 배열

 

- int* arr[3];

 

 

 

 

 

 

 

 

 

#C에서의 인수 전달 방법

 

- 값에 의한 호출(call by value) : 기본적인 방법 , 함수 호출시에 변수의 값을 함수에 전달

 

- 참조에 의한 호출(call by reference) : 포인터 이용 , 함수 호출시에 변수의 주소를 함수의 매개변수로 전달

 

 

 

 

#swap() 함수

 

- 변수 2개의 값을 바꾸는 작업을 함수로 작성

 

 

 

 

 

 

 

 

#포인터를 이용한 swap() 함수

 

 

 

 

 

 

 

#scanf() 함수

 

- 변수에 값을 저장하기 위하여 변수의 주소를 받는다.

 

 

 

 

 

 

 

 

#포인터 사용의 장점

 

- 연결 리스트나 이진 트리 등의 향상된 자료 구조를 만들 수 있다.

 

- 참조에 의한 호출 : 포인터를 매개 변수로 이용하여 함수 외부의 변수의 값을 변경할 수 있다.

 

- 동적 메모리를 할당한다.

 

 

 

 

#const 포인터

 

- const를 붙이는 위치에 따라서 의미가 달라진다.

 

 

 

 

 

 

 

 

 

 

+ Recent posts