용's

[Network #3] 기타 예상 질문 본문

Computer Science/예상면접

[Network #3] 기타 예상 질문

TaeYOng's 2015. 6. 4. 14:35

 

 

 

▶ 라우팅란 무엇인가


 

 →  Source에서 Destination으로 최적의 경로(즉, Shortest Path)를 찾는 것을 목적으로 Routing/Forwarding Table 만드는 것을 목적으로 함.

 

 →  Shortest Path를 구하기 위해서는, Router들 사이에 정보(Routing Info)를 교환해야 함.

 

 →  교환하는 방식에 따라, 대표적으로 Link-StateDistance-Vector의 두가지 방식이 존재

 

 →  Link-State(다익스트라 알고리즘): 모든 라우터들의 정보를 토대로 Shortest Path를 구하게 되며, 결과적으로 네트워크의 topology를 얻을 수 있다.

 

 →  Distance-Vector(Distributed Bellman-Ford 알고리즘): 인접한 라우터들끼리 정보를 교환하여 Shortest Path를 구하며, Update를 통하여 네트워크의 상태를 알 수 있다.

 

 

 

 

 Big Endian VS. Little Endian


 

 →  Byte Ordering 방식에 따라 Big Endian과 Little Endian으로 나뉜다.

 

 →  Big Endian: 컴퓨터가 메모리의 낮은 주소에 데이터의 최상위 바이트를 저장한다.

 

 →  Little Endian: 컴퓨터가 메모리의 높은 주소에 데이터의 최상위 바이트를 저장한다.

 

예)

int Endian;             //2바이트 integer type, Endian의 메모상의 주소를 0x100이라고 가정하자

Endian =  0x1234;    

 

이 경우, Big Endian는 최상위 바이트부터 저장함으로 0x100에는 0x12가 저장되고, 0x101 메모리에는 0x34가 저장될 것이다. 반대로, Little Endian은 0x100에는 0x34가 저장되고, 0x101에는0x12가 저장될 것이다.

 

big endian

0x100

12

0x101

34

 

little endian

0x100

34

0x101

12

 

→  연산을 할 때 가장 뒷자리부터 계산을 해야 쉽게 할 수 있으므로 Little Endian이 보통 연산이 빠르다는 장점이 있으나 요즘은 그리 큰 차이가 없다.

 

→  하지만, 통신을 할 때에는 서로 다른 시스템끼리 할 수 있으므로 이러한 Byte Ordering을 주의해서 해야 할 것임(전송하는 측은 빅인디안, 수신하는 측은 리틀인디안이면, 실제 수신되는 데이터가 달라져 버리는 문제)

 

→  하지만, 보통 데이터의 경우 read(), write() 함수 내부에 구현이 다 되어 있다. 따라서 포트번호와 IP주소에 대해서만 Byte Ordering을 신경써주면 되겠다.

 

 

 

 

 

▶ htons는 무엇이고 언제 쓰이는가?

 


 

 →  앞서 언급되었듯이, 빅인디안과 리틀인디안의 차이로 인해 통신시에 port와 IP주소의 경우 Byte Ordering을 신경써줘야 한다. 이때 htons(또는 htonl, ntohs, ntohl)이 사용된다.

 →  보통 C언어에서 비트를 할당할 때 2byte = short, 4byte = long으로 할당한다. 따라서

 

char* port = "1234

char* ip = "196.0.0.1"

.

.

포토의 경우: unsigned short test1 = htons(port);

IP의 경우    : unisigned long test2 = htonl(ip);

 

를 이용하면 test1, test2에 리틀 인디안에서 빅인디안으로 변경된 값이 저장된다.

 

htons "h: 리틀인디안, to: 에서, n: 빅인디안으로, s: short 크기 만큼" 를 의미한다.

그렇다면 나머지 htonl 과  ntohs, ntohl는 충분히 유추해볼 수 있는 문제다.

 

 

 

▶ Port란?


 

 → TCP/UDP는 Multiplexing/Demultiplexing의 기능을 수행할 수 있다.

 

 → 하지만 TCP/UDP가 가진 IP 정보는 Host 단위로만 구별이 가능하지 전송계층에서 어떤 서버(Application process such as FTP, HTTP, telnet...)를 이용하는지 알 수 없다. 이 구별하는 역할을 Port(16bit)가 한다. 

 

 

▶ Well-Known Port란?


 → "IANA"에서 표준화 시킨 port로서 말 그대로 잘 알려진 포트이다...

 → 예를 들면, Well-Known Port로서 Port 80번은 WWW 웹서비스를 위한 포트이다.

 

 

 

MultiThread VS. MultiProcess


 

→ 먼저 Process라는 것은, 실행 중인 프로그램으로 모든 프로세스는 하나 이상의 쓰레드(Main Thread)를 가진다.

 

→ 프로그램이 동작하기 위해서는 Code, Data, Heap, Stack의 4가지 메모리 영역의 공간을 필요로 하게 된다. 따라서 하나의 프로세스는 동작하기 위해 이러한 4가지의 모든 공간을 요구하게 된다.

 

→ 따라서, 멀티 프로세스란 이러한 개별적인 프로세스들이 서로 간의 독립적인 코드 공간과 데이터 공간을 유지하면서 함께 작동하는 상태를 말한다.

 

→ 반면 쓰레드는 조금 더 작은 규모의 프로세스를 말한다. 다수개의 쓰레드는 하나의 프로세스 하부에서 나타나며, 이들은 stack 영역을 제외한 나머지 메모리 공간을 서로 공유할 수 있다.

(쓰레드라고 CPU가 동시에 명령을 내릴 수 있는 것이 아니며 작업을 위한 시간을 조금씩 할당해주는 것이다. 그렇기 때문에 Context Switching에 대한 오버헤드를 쓰레드도 가지고 있다.)

 

 

 

** Context Switching에 대한 설명 생략**

 

→ 멀티쓰레드와 멀티프로세스는 여러 흐름이 동시에 작업할 수 있다는 공통점이 있다. 하지만 차이점은 다음과 같다.

 

 

 MultiThread

MultiProcess 

 메모리

Stack 영역을 제외한 메모리 공유

독립적으로 별개의 메모리 차지

 동작 비용(Cost)

낮음

높음

 동작(task)

모든 접속사에게 똑같은 기능 수행

부모, 자식 프로세스간 다른 동작 가능

 구현의 어려움

어려움

쉬움

 

 

→ 멀티쓰레드가 구현이 어려운 부분은, 메모리 자원을 서로 공유하게 됨으로 deadlock과 같은 자원 충돌이 안일어 나게끔 구현이 되어야 한다. 

 

→ 적은 량의 쓰레드를 사용시에 처리 속도면에서 빠르다는 장점이 있지만, 멀티쓰레드도 결국 Context Switching을 하게되므로 클라이언트가 많을 수록 처리 속도가 빠르다고 할 수 없다.

 

 

 

 

 

 

 

 

 

'Computer Science > 예상면접' 카테고리의 다른 글

[JAVA] BigDecimal  (0) 2015.10.12
[Network #4] TCP 제어 알고리즘  (0) 2015.10.12
[DB] 예상 문제  (0) 2015.09.28
[Network #2] Blocking VS non-Blocking  (0) 2015.06.04
[Network #1] TCP와 UDP  (0) 2015.06.04
Comments