RedHat Linux >> Server Administration for Redhat Linux
|
[목차] |
제1장 네트워크 기초
2. 4단계로 이뤄진 TCP/IP 사실, TCP/IP는 지금의 인터넷을 이해하는 과정에서 결코 없어서는 안될 만큼 중요하다. 과연 이 TCP라는 프로토콜을 모르고서 어찌 인터넷이라는 것을 말할 수 있을까. 이 TCP/IP를 대신할 수 있는 다른 기술들이 많이 이야기가 되고 있지만, 아직까지는 이 TCP/IP의 확실한 대안이 되지 못하고 있다.(물론 이 말은 이 프로토콜이 문제가 있다는 말은 아니다.) 1980년대부터 시작한 이 TCP/IP는 초기에 가지고 있던 문제들을 보완해 가면서 현재까지 이르렀다.(단적인 예로는 DNS 같은 것이 그 예이다.DNS란 IP가 아닌 하나의 이름으로 컴퓨터를 이해하게 하는 것이다. 사실 1980년 초기엔 컴퓨터 시스템이 적어 사실 이름을 외우지 않고 숫자만을 외워도 별 어려움이 없었다.) 이제 인터넷은 눈부신 속도로 발전하고 있다. 과연 이것이 어디까지 갈 것인지는 아무도 모른다. 어떤 프로토콜로 대체될지 아니면 현재의 문제점을 보완해 나가면서 끊임없이 벌전할지 아무도 모른다. 우선 전송이 이루어지는 과정을 잠시 보도록 하자. <그림2>를 보면,
<그림 2> 통신의 개념
통신은 계층적인 구조를 통해서 전달되고 또 전달받는다. 이것에 대한 표준을 정한 것이 바로 OSI 7 모델이다. <그림3>을 보자.
<그림3> OSI 7 Layer
각각 하는 일이 모두 정해져 있긴 하지만, 그것들을 일일이 다 알아야 할 필요는 없을 것이다. 단지 통신이 이렇게 계층적으로 이루어진다는 것만 생각하자. TCP/IP는 4단계의 계층으로 이루어진다. 그럼, 이제 TCP/IP를 이용해 통신이 이루어지는 모습은 <그림4>에서 좀더 확실하게 나타나고 있다.
<그림 4> TCP/IP 전송
각 프로토콜이 하는 역할은 밑에서 좀더 자세히 설명하기로 한다. 다만 TCP/IP의 전송이 이렇게 이루어진다는 것만 기억하자.
가. 데이터 전송 전령사 TCP
TCP는 Transmission Control Protocol 의 약자이다. 이것은 하나의 규약이다. 이 TCP의 특징은 신뢰성 있는 전송을 특징으로 한다. 즉 상대방과의 연결이 확실히 이루어져야 모든 통신이 가능하다는 것이다. 이 TCP와는 다르게 UDP(User Datagram Protocol) 은 신뢰성을 보장하지 못한다. 즉 데이터 전송이 이뤄지면 데이터가 전달되는지 확인하지 않는다는 것이다. 그래서 이 UDP를 화상채팅이나 동영상의 전송 등에 많이 사용한다. 이 TCP가 하는 일은 다음과 같다. 접속의 설정, 데이터의 전송(오류시의 재전송), 접속의 해제 등이 그 역할이다. 그럼 하나씩 알아보기로하자.
- 접속설정 3way handshaking을 토대로 접속이 이루어진다. 한쪽에서 접속을 요청하면 다른 한쪽에서 이 요청에 대한 응답을 하고, 접속을 요청했던 쪽은 그 응답에 대한 응답을 보냄으로써 3단계를 거쳐 접속이 이루어진다.<그림5>
<그림 5> 3way handshaking
- 데이터 전송 가장 중요한 단계로 데이터 전송을 위한 에러 검사와 그 에러에 대한 제어 그리고 흐름에 대한 제어를 하게된다. 에러 검사는 checksum을 통해 이루어지며 그 외에도 중복되는 패킷의 검사, 고장여부의 검사를 하게된다.
- 접속해제 설명할 필요 없이 접속을 끊는 것이다.
패킷에 대해 설명하자면 패킷은 데이터를 전송하는 한 단위이다. 여기서 한번에 받을 수 있는 패킷의 사이즈는 데이터전송 이전에 접속설정 부분에서 모든 협상을 하게 되는데, 한번에 받을 수 있는 패킷의 개수를 윈도우 사이즈(Window size)라고 한다. 물론 이 사이즈의 기본 값은 각 운영체제에 따라 달라질 있으며, 네트웍의 상태에 따라서 수시로 재 설정 될 수 있다. 초기에는 패킷의 사이즈가 너무 작은 경우에 문제가 되었다.(이런 것을 Silly Window syndrome 이라고 한다.)
패킷엔 전송하고자 하는 데이터뿐만 아니라 패킷에 대한 정보도 포함되어있다. 작게 나눌수록 그만큼 오버헤드가 커진다. 그렇다고 패킷 사이즈를 크게 하면 에러가 패킷을 잃어버렸을 때 다시 전송해야 하는데 이때에도 문제가 있다. 그만큼 큰 패킷을 다시 전송해야 한다는 소리가 된다. 즉 패킷 사이즈를 결정하는데는 어느 정도 트레이드오프가 있다. 더 자세한 사항이 알고 싶은 독자는 TCP/IP 관련 서적을 참조하기 바란다.
나. 비연결형 데이터그램을 전달하는 IP 이제 IP에 대해서 알아보도록하자. IP는 Internet Protocol로, 비연결형 데이터그램(Datagram)의 전달을 담당한다. 이 IP가 비연결형이고, 비신뢰적이라는 것은 조금 의아하게 생각할 수 있다. TCP가 신뢰적 전송을 하려면 IP도 신뢰적이어야 하지 않을까 할지 모르지만 꼭 그렇지는 않다. TCP가 알아서 해주는 일을 IP까지 할 이유는 없기 때문이다.
비연결형에 이어 나오는 데이터그램이란 TCP에서 데이터를 한번에 전달 못하고 쪼개서 전달하듯이 IP도 마찬가지이다. 즉 IP의 데이터 전송단위는 데이터그램이란 뜻이다. 이 IP에서는 MTU의 단위를 설정하며, 그 크기에 맞추어 데이터를 자르고 다시 붙이는 일 따위를 하게 된다.
- MTU는 처리 가능한 최대크기의 데이터 MTU란 Maximum Trasfer Unit의 약자로, 하부계층에서 처리 할 수 있는 최대 크기의 데이터를 말한다. 내 기계가 처리할 수 있는 크기가 1500이고, 상대방의 기계 또한 1500을 처리한다고 해도 중간의 싸구려 라우터가 600밖에 처리를 못한다면 MTU는 600으로 설정된다. 내가 100메가의 랜카드가 있어도 허브가 10메가용이면 10메가가 최고의 속도가 되는 것과 마찬가지이다. 가끔 데이터가 날아오는 것은 상대방과 내가 1대1로 직접 연결되기 때문이라고 생각할지도 모르지만, 사실 많은 서버와 라우터를 경유하게 된다.(의심스러우면 tranceroute www.leelab.co.kr으로 확인해보기 바란다.) 참고로 패킷을 뜯어보면 IP에서는 라우터를 지날 때마다 숫자가 1씩 늘어나서 자신이 얼마나 파란만장한 길을 왔는지를 도착지에서 말해준다. 모든 패킷이 같은길을 오는 것은 아니므로, 라우터는 이 패깃의 정보를 보면서 경로설정이나 가장 빠른 길을 찾을 수 있다. 물론 LAN과 같이 근접한 거리에 있는 사용자들의 패킷이야 라우팅 테이블을 고정으로 적어주면 되겠지만, 멀리 떨어져 있는 곳에서 오는 것들은 그렇지 못하기에 항상 동적으로 라우터가 알아서 이 경로에 대한 정보를 읽고 갱신한다.
- 물리적망을 통해 나가는 프레임 마지막으로 물리적 망을 통해 나가는 것을 프레임이라고 부른다.(사실 이런 용어를 모두 구분해서 부르거나 하는 경우는 거의 없을 것이다. 그냥 이런 것이 있다는 것 혹은 이렇게 구분이 된다는 것 정도만 알아두자.) 이제까지 설명한 것을 토대로 네트웍을 흐르는 데이터를 <그림6>으로 보자.
<그림 6> Encapsulation
보는바와 같이 데이터는 각각의 데이터에 프로토콜이 추가하는 정보가 덧씌워져서 간다. 즉 단위가 캡슐이 씌워지는 것처럼 된다는 뜻이다. 이러한 데이터는 수신측에서 각 프로토콜의 위치에서 헤더를 제거해서 마지막에 최상위까지 도달하게 된다. 이제 마지막으로 통신이 이루어지는 모습을 전체적으로 한번 그려보자. <그림7>은 통신이 이루어지는 모습을 전체적으로 나타내고 있다.
<그림 7> 통신이 이뤄지는 과정
지금까지 대강의 TCP/IP에 대해서 알아보았다. 사실 TCP/IP라는 것을 말하려면 해야할 이야기들이 아직도 산더미 같지만, 너무 많은 이야기를 하는 것은 더 혼란만 줄 수도 있으므로, 이 정도에서 이야기를 마친다. TCP/IP이 구조에 대해서 깊이 알 필요는 사실 없다고 생각한다. 누군가가 만들어준 프로토콜을 우리는 그저 쓰기만 하면 된다. TCP/IP 모른다고 게임을 못하거나 인터넷을 못하지는 않기 때문이다. 이장에서 다룰 내용은 이 정도 개념만으로 충분하다. 네트웍에 관심이 너무너무 많거나 프로그래밍이 주목적인 사람들은 서적을 참고하고 리눅스의 공개된 네트웍 프로그램이 많으므로(리눅스의 소스만 하더라도 꽤 많이 있다) 직접 소스를 보기 바란다.
|
[목차] |