용's
[Network #3] 기타 예상 질문 본문
▶ 라우팅란 무엇인가
→ Source에서 Destination으로 최적의 경로(즉, Shortest Path)를 찾는 것을 목적으로 Routing/Forwarding Table 만드는 것을 목적으로 함.
→ Shortest Path를 구하기 위해서는, Router들 사이에 정보(Routing Info)를 교환해야 함.
→ 교환하는 방식에 따라, 대표적으로 Link-State와 Distance-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 |