Clojure in Action Ch. 2 A whirlwind tour

Chapter 2. A whirlwind tour

2.1 Getting started

2.1.1 Installing Clojure

2.1.2. The Clojure REPL

2.1.3. Hello, world

; Comment
(println "Hello world")
Advertisements

Clojure in Action Ch. 1

by Amit Rathore

Preface

복잡성의 두가지
Essential complexity : 원래 복잡한 것.
Accidental complexity : 문제 외의 영역에서 초래된 복잡성.

Chapter 1. Introduction to Clojure

1.1 What is Clojure

1.1.1 Clojure – the reincarnation of Lisp

리스프의 환생.

1.1.2 How we got here

LISt Processing : LISP. 1958년에 설계된 언어.
“code as data” 의 개념.  70~80년대에 인공지능에 많은 투자가 이뤄졌지만, 대부분 실패. 그 오명을 리스프가 지게 됨.
JVM 위의 리슾 개념 : JScheme, Kawa, ABCL  등등.  하지만, 실용적으로 유용한 건 없었슴.
Rich Hickey : 창조자. 는 굉장한 일을 하였다.
클로져는 마침내 살아남은 리슾이 되었다.  –> 리슾의 미래이자 동적 프로그램 언어의 미래.

1.1.3 How this book teaches Clojure

이 책의 철학은 두 기둥에 놓여있다.
> 클로져의 첫번째 원칙을 강조하는 것.
> 그리고, 이러한 원리를 이해하기 위한 실용적인 접근.
많은 코드를 통해 이를 제공할 것이다.
클로져는 새로운 사고를 요구한다.

1.2 Understanding Clojure syntax

신택스는 호불호가 갈린다.
A Clojure expression is either < a symbol > or < a sequence >.
클로져는 배우기 지극히 간단한 언어다. (지랄. 아님) 신택스의 관점에서.. (맞아) 거의 아무것도 없다. (오케이)

1.2.1 XML and parentheses

1.2.2 Lists, vectors, and hashes

클로져는 리슾보다 더 많은 문법이 있지만, 이것이 가독성을 높여준다.
[ 벡터 ]  :  함수의 인수 리스트에 사용.  정수 인덱스 체계.
{ 해시 맵 / 사전 } : { :키 ,  값 }

1.3 The sources of Clojure’s power

1.3.1 Clojure and Lisp

1.3.2 Clojure and functional programming

> immutability, higher-order functions, laziness, concurrency semantics.

1.3.3 Clojure and the JVM

1.3.4 Clojure as a Lisp

AST (abstract syntax tree)
클로져의 런타임은 다른 언어와 다르게 작동한다. JIT 컴파일러 채용.. thanks to the JVM. 코드를 겁나 빠르게 컴파일 / 실행한다.
As alluded to, 암시…  contrive 억지스런, 고안해내다.
The Reader
리더는 소스코드를 AST 구현으로 크로져의 고유 데이터 구조를 이용하여 컨버트한다.
The Macro System
매크로는 클로져 함수. s-expression 을 인수로 받는다. s-expre.. 이 데이터 구조이므로 변형되고 반환가능하고 리턴된 값은 원래 형태로 사용된다.
이러한 코드-변형 매크로는 클로져 ‘위에’  미니 언어를 만들 수 있음.  DSLs (domain specific languages)
Metaprogramming with Macros
코드를 생산하는 코드
모든 클로져 코드는 같은 구조.  크로져 코드를 만들려면 심볼과 다른 데이터 구조를 갖는 클로져 데이터 구조를 만들면 됨.
이러한 신택스 없음과 매크로 시스템은 DSL 에 적합하게 한다.  ==> programmable programming language.
frivolous  천박한
매크로는 메타 프로그래밍의 ‘궁극’의 모습이다.

1.3.5 More advantages of Clojure

Dynamic Language
The REPL

1.3.6 Clojure as a functional language

클로져는 맵 리듀스 같은 higher-order functions 을 장려한다.
Higher-Order Functions

TCP IP Illustrated .. ch 13. TCP Connection Mnagement

13.1 Introduction

TCP : unicast connection – oriented 프로토콜. 데이터를 보내기 전 연결이 확보되야 함.  TCP 의 서비스 모델은 바이트 스트림이다.
TCP 가 패킷 유실, 중복, IP 레이어의 에러 등을 모두 발견, 수정한다.
이런 연결 상태 때문에 UDP 보다 복잡.
연결 확보 중에, 여러 옵션 교환. 헤더는 40바이트의 옵션 공간을 갖음.

13.2 TCP Connection Establishment and Termination

3단계
> 셋업, 데이터 전송(established), teardown (closing)
클라.. 3 웨이 핸드 쉐이킹 시작. 초기 시퀀스 넘버를 교환하기 위해. (SYN segments for the c/s )

3 Segments for connection establishment (three-way handshake)
1 C > S 2 <
3 >
~~~ data transfer ~~~
closing >
<
<
>

Active open == Client  <–> Server == Passive open .. SYN 받는 쪽..
Cleared == Close == Terminate  종료 는 양쪽 어디서든 가능..  클라이언트가 요청하는 게 일반적.  웹 서버 같은 것은 서버가 요청 후 바로 닫음.
> 1 < Active closer 가 FIN 날림.
> 2 < Passive closer 가 Acking 으로 대답. 이때 어플은 상대방이 종료를 실행한 것을 인지. 보통 어플이 종료작업을 시작.
이때, 패시브가 다른 액티브가 되어 자신의 종료를 시작..
> 3 < 종료를 완수하기 위해 최종 세그먼트는 최종 FIN 에 대한 애크를 담고 있다. 이 ‘핀’ 이 안 오면 올때까지 재전송 된다.

Half-open state .. 전송이 한 방향으로만 되는 상태.. 드물다.
Half close .. 를 두번하면 다 끊는 것..

13.2.1 TCP Half-Close

흔한 일은 아님.   ” 난 다 보내서 FIN 날렸구, 받는 건 계속 할거야 ”  버클리 소켓은 지원.

13.2.2 Simultaneous Open and Close

짜고 하지 않는 한 드물지만.. 동시 접속은 가능하다.  Simul… Open,   …. Close ..

13.2.3 Initial Sequence Number (ISN)

예상하기 어려운 ISN 를 만들어 해킹? 방지.  semi random 방식으로 만든다.

13.2.4 Example

흔한 일은 아님.   ” 난 다 보내서 FIN 날렸구, 받는 건 계속 할거야 ”  버클리 소켓은 지원.

TCP IP Illustrated .. ch 3. Link Layer

3.1 Introduction  (physical layer + data link layer)

TCP/IP 가 사용하는 링크 레이어에 대해서만..

링크레이어 PDU.. 에 대해 말할 때 frame 을 쓴다.. 패킷 / 세그먼트와 구별하기 위해.

MTU maximum transmission unit :: 레인지의 상위 한계.  앞으로 자주 볼 링크 레이어의 성격.
모뎀, 시리얼 라인은 최대 프레임 사이즈가 없고.. 사용자에 의해 규정됨.

3.2 Ethernet and the IEEE 802 LAN/MAN Standards

1980, 1982 ; 초기 이더넷 “10 Mb/s Ethernet”  “shared Ethernet” 으로 불림.
그 후 IEEE 표준.
Station 이 있는 구성 ?..
100 Mb/s … 10 Gb/s … 100 Gb/s ..
90년대 꼬인 선 와이어링 .으로 교체.. 100 Mb/s ..

현재는 스위치가 사용되어 각각이 최대 속도 보장..
IEEE 802 Standards .   MAN standards .. 802.16..

3.2.1 The IEEE 802 LAN/MAN Standards

802.3z / 802.3ab :: 1000 Mb/s Ethernet. (Gigabit Ethernet)
802.3ae :: 10 Gb/s (Ten Gigabit Ethernet)

3.2.2 The Ethernet Frame Format

All Ethernet (802.3) 은 하나의 포맷에 기초한다.
Figure 3-3 :: IEEE “Packet” ..  Frame … MAC Client Data ..
이더넷 프레임은 Preamble.. 로 시작.  이더넷은 비동기 랜..  인코드 비트간 공간이 다름..

3.2.3 802.1 p/q: Virtual LANs and QoS Tagging

스위칭 이더넷이 많아지면서 동일 랜 상에서 모든 컴퓨터가 통신하는 것이 가능해짐.  이것의 장점은 어느 호스트 든 다른 호스트와 통신할 수 있다. (IP와 다른 네트워크-레이어 프로토콜을 갖고.. 관리자 컨피겨 불필요).. 부가적으로 브로드캐스트, 멀티캐스트 트래픽이 별다른 세팅없이 가능.
버츄얼 랜.. VLANs .. 802.1q..

3.2.4 802.AX: Link Aggregation (Formerly 802.3ad)

..

3.3 Full Duplex, Power Save, Autonegotiation, and 802.1X Flow Control

win 7 : control panel .. setting.

3.3.1 Duplex Mismatch

 

this is sample
int i = 0;

TCP IP Illustrated .. Ch 1, 2

2.3 Basic IP Address Structure

2.3.5 Broadcast Addresses

OR 연산을 통해.. 가장 큰 값이 됨.  128. 32.1.255 .. 이렇게.. 이런걸 역사적으로 directed broadcase 라고 불림.
타겟 사이트의 모든 호스트에 address 함.
보안 문제 야기 => 쉽게 disable ..
local net broadcast :: 255.255.255.255

2.3.6 IPv6 Addresses and Interface Identifiers

자릿수도 많지만.. 접두어는 주소의 scope 를 가리킨다. 스코프는 사용가능한 네트워크 부분을 참조한다.
중요한 예는 node-local (같은 컴퓨터에서만 사용가능한 주소),
link-local (같은 네트워크 링크 또는 IPv6 접두어 상의 노드간에만 사용)
global (인터넷 와이드) 를 포함한다.
IPv6에서는 대부분의 노드는 하나 이상의 주소를 사용중이고 가끔은 같은 네트워크 인터페이스 상에서 그러하다.
이것은 4에서도 지원되지만 드물다.

EUI-48 & EUI-64 차이는 길이다.

예제 ) 리눅스 ifconfig 명령…   ifconfig eth0

윈도우는 터널링..

2.4 CIDR and Aggregation

1994년에 클래스 B 주소 고갈. 1995년으로 예정되었던.
2000년 초기에는 32비트 IPv4 가 부족할 것으로 전망.

2.4.1 Prefixes

CIDR ( Classless Inter-Domain Routing) :: 어떤 주소 영역도 클래스에 속하지 않고, 섭넷 마스크와 유사한 마스크를 대신 필요로 함. CIDR mask.
Network prefix :: iPv4, IPv6 주소 관리에 쓰임. 숫자의 조합..
N bit prefix.   128.0.0.0 / 24   기존 클래스 방식의 일반화 방법 …

2.4.2 Aggregation 통합 ..

클래스 구조의 주소를 제거함으로써 다양한 크기의 주소 생성 가능.
라이팅 테이블 엔트리 : 라우터에게 트래픽을 어디로 보낼 지 지시함.
기본적으로 라우터는 도착한 데이터그램의 주소를 조사해서 다음 “홉” 까지 매칭하는 곳 …
마치 자동차를 다음 교차로까지 운전하는 것과 비슷.
매 교차로마다 발생하는 사인들의 수를 고려하면 1990년대의 인터넷의 문제에 대한 감을 잡을 수 있을 것.

그때는 여러 기술을 동원해서 라우팅 테이블 엔트리 수를 줄였음. Hierarchical routing 같은 기술.
모든 포인트가 직접 접속된 수 만큼 의 테이블이 필요..  범위로 그루핑..

Route aggregation : 여러개의 이웃한 주소를 하나로 통합하는 방법.

190.111.11.111/26 => /25 => /24 => /23 ..

2.5 Special-Use Addresses

192.168.0.0/16  : private network (intranets)
NAT

2.5.1 Addressing IPv4/IPv6 Translators 번역

유니캐스트는 개발 완료, 멀티 캐스트는 개발 진행중.

잘 알려진 64:ff9b::/96 접두어가 IPv4, IPv6 유니캐스트 주소간 자동 번역에 쓰일 수 있다.  (96 비트의 접두어)

2.5.2 Multicast Addresses

IPv4 / 6 모두 지원.  그룹 / 그룹 주소 로도 불림.
호스트 인터페이스의 그룹을 규정..  하나가 아닌 그룹..
그룹은 전 인터넷까지 확장 가능.
스코프 : 하나의 그룹이 커버하는 네트워크의 부분.
보통의 스코프 : node-local (same computer), link-local (same subnet), site-local (applicable to some site),
global (전 인터넷), administrative … 를 포함.
Administrative scoped address :: 라우터에서 매뉴얼 규정된 네트워크..
site-local, administrative 스코프는 멀티캐스트 주소와 함께만 사용 가능.

ASM ( any-source multicast)
SSM ( source-specific multicast)

2.5.3 IPv4 Multicast Addresses

IPv4 에서 클래스 D 가 멀티 캐스트를 지원하기 위해 제공되 왔음.
UBM : unicast-prefix-based multicast addressing. : 234.0.0.0 ~ 234.255.255.255 ..

2.5.4 IPv6 Multicast Addresses

멀티케스트 사용에 더 적극적. ff00::/8 이 멀티 용도로 예약되어 있어 112 비트를 그룹 넘버로 사용 가능..
멀티캐스트 주소의 두번째 ‘바이트’ 는 4비트의 ‘플래그’ 와 ‘스코프 아이디’ 를 포함한다.
스코프 : 데이터그램의 분산에 대한 한계 표시. 0, 3 f .. : reserved,

2.5.5 Anycast Addresses

common service 를 제공하는 컴퓨터를 찾기 위해 가장 많이 사용됨.

2.6 Allocation

IP 주소 공간은 – 보통 큰 청크로 – 위계적으로 구성된 authorities 의 집합에 의해 자리잡는다.
위계의 탑은 IANA.

2.6.1  Unicast

PI address.

2.6.1.1 Examples
whois.arin.net/rest/ip/333333.txt

2.6.2 Multicast

..

2.7 Unicast Address Assignment

IP 주소 공간은 – 보통 큰 청크로 – 위계적으로 구성된 authorities 의 집합에 의해 자리잡는다.

2.7.1 Single Provider / No Network / Single Address

가장 간단한 인터넷 서비스는 ISP로부터 single IP address 을 한 컴퓨터에 대해 받는 것.

DSL 같은 서비스는 한 주소가 point-to-point link 의 말단으로 할당될 수 있고, 임시일 수 있다.

즉, 63.204.134.177 을 할당받으면 소스 IPv4 주소에는 이 주소를 갖는다.
이것은 로컬 ‘루프백’ 주소 (127.0.0.1) 을 포함하고 몇몇 멀티캐스트 주소를 포함한다.

호스트의 활성 멀티캐스트 주소들(그룹)을 보고싶으면 (리눅스)
ifconfig ppp0
netstat -gn

2.7.2 Single Provider / Single Network / Single Address

ISP — 여러대 컴퓨터.. NAT 역할도 함.
ISP 관점에서는 한 IP 주소가 사용됨.  라우터가 자동 처리.  DHCP.

2.7.3 Single Provider / Multiple Networks / Multiple Addresses

웹 서버 같은 것을 운영하려면 바뀌지 않는 주소 필요.  여러 랜 필요. Internal. (방화벽 내) external  혼용.
관리자 존재.

DMZ..   Figure 2-16 ..  의 장점.
1. 내부 네트워크의 컴퓨터  보호.
2. IP 주소 할당.. 내부적으로 어떤 주소 체계 가능. 많은 주소 가용.

2.7.4 Multiple Providers / Multiple Networks / Multiple Addresses (Multihoming)

..

2.8 Attacks Involving IP Address

IP는 수시로 변화하며 그 시간차이를 이용.
Access controls .. 해킹.

2.9 Summary

인접한 주소는 접두어를 압축해서 라우팅 테이블 공간을 절약, 인터넷의 스케일능력 향상.