'이론'에 해당되는 글 18건

* 포워딩과 라우팅


포워딩 - 패킷이 라우터의 입력 링크에 도달했을 때 라우터는 그 패킷을 적절한 출력링크로 이동시켜야 한다.


라우팅 - 송신자가 수신자에게 패킷을 전송할 때 네트워크 계층은 패킷 경로를 결정해야 한다. 이러한 경로를 계산하는 알고리즘을 라우팅 알고리즘이라 한다.


포워딩은 라우터가 입력 링크 인터페이스에서 적당한 출력링크 인터페이스로 데이터그램을 전송하는 내부적인 동작을 말한다. 반면에, 라우팅은 네트워크 전반에 걸쳐 출발지에서 목적지까지 데이터그램의 종단간의 경로를 결정하는 것이다.


라우팅 알고리즘은 라우터 포워딩 테이블에 삽입되는 값을 결정한다.


패킷 스위치(링크 계층 스위치) - 링크 게층 프레임의 필드값에 근거하여 포워딩을 결정한다. 


라우터 - 네트워크 계층 필드값에 근거하여 포워딩을 결정한다.


* 가상회선과 데이터그램 네트워크 


데이터그램 네트워크(비연결형) - 데이터 그램 네트워크는 각 패킷의 전달 경로가 다를 수 있다. 이 때문에 목적지에 도착하는 패킷의 순서가 송신지에서 보낸 순서와 맞지 않을 수 있기 때문에, 목적지에서 패킷의 재조합이 필요하다. 송신지와 목적지 경로를 설정할 필요없이 그냥 목적지 주소만 넣어서 패킷을 보내면 된다. 또한 고정된 경로만을 이용하는 것이 아닌, 네트워크 상황에 따라 일부 경로에 장애가 생긴 경우 다른 경로를 사용하여 목적지까지 전송될 수 있다.


가상회선 네트워크(연결형) -  가상회선 네트워크는 송신지에서 목적지로 패킷을 보내기 전에 전달될 패킷이 이용할 경로를 미리 예약한다. 패킷을 전달하기 전에 경로를 설정해야 한다는 부담이 있지만 한번 경로가 설정되면 송신지에서 목적지로 전달되는 패킷들은 순서가 보장되어 전달되기 때문에 목적지에서 재조합 될 필요가 없다.


* 라우팅 기법의 분류


정적 라우팅 기법 - 정적 라우팅 기법은 입력된 라우팅 정보가 재입력을 하기 전까지 변하지 않고 고정된 값을 유지하는 라우팅 기법이다. 전체 네트워크에 대한 라우팅 정보를 관리자가 수동으로 입력해 준다. 만일 네트워크의 규모가 커져서 연결된 라워의 숫자가 늘어나게 되면 관리자가 입력해야 할 정보도 함께 늘어나게 되는 것이다.


동적 라우팅 기법 - 동적 라우팅 기법은 정적 라우팅 기법에서 라우팅 정보를 네트워크 관리자가 일일이 입력해야 하는 불편함을 해결한다. 라우팅 프로토콜은 라우터가 가지고 있는 라우팅 정보를 인접한 다른 라우터들과 자동으로 교환할 수 있게 해준다. 하나의 라우터의 라우팅 정보고 네트워크상의 모든 라우터들로 전파된다.


디폴트 라우팅 기법 - 임의의 라우터가 패킷을 수신하게 되면 라우팅 테이블 상 네트워크 주소를 검색하여 수신된 패킷을 어디로 보낼 것인가를 결정하게 된다. 이와 같은 라우터에 디폴트 라우터가 설정이 되어 있다면 라우팅 테이블에 등록되어 있지 않는 주소를 갖는 패킷들은 디폴트 라우터에서 지정된 경로로 전송된다.


* 영역에 따른 라우팅 프로토콜의 분류 


1. AS(자치시스템) 

  독자적인 관리체계와 동일한 운영정책을 가지는 네트워크 집합이다. 예) ISP


2. IGP

  하나의 AS내에서 라우팅 정보를 교환하는 데 사용되는 프로토콜이다.


3. EGP

  AS와 AS 간의 정보를 교환하는 데 사용되는 프로토콜이다.


IGP 에는 RIP, IGRP, OSPF 프로토콜이 있으며

EGP 에는 BGP가 잇다. 


* 라우팅 알고리즘 


- 거리벡터 알고리즘 - 각 라우터가 인접해 있는 라우터와 경로설정 정보를 교환하여 네트워크의 구성이나 장치 배치에 관한 모든 정보, 즉 네트워크 토폴로지에 관한 정보를 교환하는 구조를 말한다. 이때의 라우팅 메트릭에는  네트워크 지연시간, 대역폭, 신뢰성, 부하율등이 고려된다.


거리벡터 알고리즘은 비교적 간단해서 쉽게 설정할 수 있다. 그러나 네트워크 규모가 점점 커지게 되면 네트워크 정보에 관한 프로세스 처리나 통신량이 많아져서 네트워크에 부담이 가중된다. 거리 벡터 알고리즘은 기본적으로 인접 라우터가 어떤 정보를 가지고 있는 지 고려하지 않기 때문에 네트워크 토폴로지 변화에 대한 경로설정 정보의 재편성과 같은 사태에 대해 진단하지 못한다는 단점이 있다.또한,라우팅 테이블 전파속도가 느리며 RIP의 경우 최대 Hop Count15를 넘지 못하며, 라우팅 테이블에 대한 정보를 주고받을 때 네트워크 대역폭을 많이 소비하고, 대규모 네트워크에는 적당하지 않다.


라우팅 테이블에 변화가 생겼을 경우 이 변화된 내용을 다른 라우터가 인식하는데 까지 걸리는 시간을 컨버전스 타임(Convergence time)이라 한다.


- 링크상태 알고리즘 


한 라우터가 목적지 네트워크로 가는 모든 경로에 대한 정보를 모두 가지고 있는 방식

- 라우터는 먼저 어디에 어떤 네트워크가 있는지, 그 네트워크로 갈려면 어떤 라우터를 통과해야 하는지에 대한 정보를 토폴로지 데이터베이스로 만든다.

SPF(Shotest Path First) : 라우터는 이렇게 만들어진 토폴로지 데이터베이스를 기초로 하여 어떤 경로로 가야 가장 빠른 길인지를 계산하는데 이때 사용하는 알고리즘이며, SPF TreeSPF의 계산의 결과물이다.

절차 : 라우터간의 정보를 취합하여 토폴로지 데이터베이스 생성->SPF 알고리즘을 이용해 가장 빠른 경로 계산

-> SPF 트리 생성->라우팅 테이블 생성

목적지 경로를 다 알고 있기 때문에 어떤 한 경로에 문제가 생기더라도 알아내는 시간이 훨신 짧다. 또한 주변의 라우터들과 라우팅 테이블을 주고 받을 때 변화가 있는 부분만 주고 받기 때문에 네트워크 트래픽 발생도 적다.

단점 : 각각의 라우터가 모든 경로에 대한 정보를 다 관리해야 하기에 메모리 소비가 심하고, SPF 계산등 연산할 일이 많기 때문에 CPU에 부담을 준다.

대규모 네트워크에 설치되는 고성능 라우터에 적합한 방식이다.

대표적인 링크 상태 알고리즘에는 OSPF(Open Shortest Path First)가 있다.


* 라우팅 프로토콜 구현 사례


- 역내 라우팅 프로토콜의 예(IGP)


RIP - 거리,벡터 라우팅 기법을 사용하는 가장 보편적인 프로토콜로, 라우터가 가지고 있는 모든 라우팅 정보를 다른 라우터에 주기적으로 전송한다. 그러나 이는 홉의 제한을 소규모나 중간규모의 네트워크에 적합하다.


OSPF - OSPF 라우팅 프로토콜은 최근에 주목받고 있는 경로설정 프로토콜이다. OSPF는 동일한 AS 내에서 사용되는 IGP이며, RIP의 문제점을 해결하기 위해 고안된 링크 상태 프로토콜이다. 


- 역외 라우팅 프로토콜의 예(EGP)


EGP - 경로제어 정보를 교환하는 두 IP 라우터가 서로 다른 두 AS에 속할 때 이를 역외환경이라 한다. 이와 같이 역외환경에서 라우터가 도착 가능성 정보를 다른 AS에 알리기 위해 사용하는 프로토콜이 EGP이다.




* OSPF 라우팅 프로토콜 


- OSPF의 라우팅 계위


OSPF에서는 RIP와 달리 라우팅 알고리즘을 적용하기 위한 계위구조를 취한다. 자치시스템은 공통적인 라우팅 정보를 공유하면서 하나의 관리 체제에 의해 관리되는 네트워크의 집합으로 정의된다. AS는 다시 여러 개의 서브네트워크로 나누어지고, 연속적인 네트워크 및 접속된 시스템들의 집합으로 구성된다. 하나의 AS내에서 서브네트워크을 연결해주는 네트워크를 '백본 네트워크'라고 한다. 


내부라우터 - 서브네트워크에 직접 접속한 라우터이며 백본 네트워크에 접속한 라우터도 이 범주에 속한다.


영역경게 라우터 - 서브네트워크와 백본 네트워크를 연결시켜주는 라우터


백본 라우터 - 백본 네트워크에 접속한 모든 라우터 


AS 경계라우터 - 다른 AS 속한 라우터와 경로 정보를 주고 받는 라우터









'이론 > 컴퓨터통신' 카테고리의 다른 글

Network Layer(L3)  (0) 2015.10.17
Transport Layer(L4)  (0) 2015.10.17
Application Layer(L7)  (0) 2015.10.14
컴퓨터 네트워크 개론  (0) 2015.10.13
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

* 개요 


트랜스포트 계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들 간의 논리적 통신을 제공한다.


송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를 인터넷 용어로는 트랜스포트 계층 세그먼트인 트랜스포트 계층 패킷으로 변환한다. 이러한 변환은 애플리케이션 메시지를 트랜스포트 계층 세그먼트로 만들기 위해 작은 조각으로 분할하고, 각각의 조각에 트랜스포트 계층 헤더를 추가함으로써 수행된다. 그런 후에 트랜스포트 계층은 송신 종단 시스템에 있는 네트워크 계층으로 세그먼트를 전달하고 여기서 세그먼트가 네트워크 계층 패킷안에 캡슐화되어 목적지로 전달된다.


* 트랜스포트 계층과 네트워크 계층 사이의 관계 


트랜스포트 계층은 서로 다른 호스트에서 동작하는 프로세스들 사이의 논리적통신을 제공하지만, 네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 제공한다. 미묘하지만 이러한 차이점은 중요하다. 


* 인터넷 트랜스포트 계층의 개요 


인터넷에서 트랜스포트 계층 패킷을 세그먼트로 일컫는다. 


인터넷, TCP/IP 네트워크는 애플리케이션 계층에게 두가지 구별되는 트랜스포트 계층 프로토콜들을 제공한다.



하나는 비연결형 서비스를 제공하는 UDP이고, 다른 하나는 애플리케이션에게 신뢰적이고 연결지향형 서비스를 제공하는 TCP이다.


인터넷의 네트워크 계층 프로토콜은 '인터넷 프로토콜' 줄여서 IP라고 부른다. IP 서비스 모델은 호스트들 간에 논리적 통신을 제공하는 '최선형' 전달 서비스이다. 이것은 IP가 통신하는 호스트들 간에 세그먼트를 전달하기 위해서 최대한 노력하지만, 어떠한 보장도 하지 않는다는 것을 의미한다. 



 

 UDP

 TCP

 공통점

1. 종단 시스템 사이의 IP 전달 서비스를 종단 시스템에서 동작하는 두 프로세스 간의 전달서비스로 확장하는 것, 두 프로세스 간의 전달 서비스. 트랜스포트 계층 다중화 & 역다중화


2. 헤더에 오류 검출 필드를 포함함으로써 무결성 검사를 제공한다. 

 TCP의 추가적인 기능

 x

1. 신뢰적인 데이터전달


Flow Control, 순서번호, 확인응답, 타이머등을 사용해서 송신하는 프로세스로부터 수신하는 프로세스에게 데이터가 순서대로 정확하게 전달되도록 한다.


2. 혼잡제어(Congestion Control)


TCP연결이 과도한 양의 트래픽으로 통신하는 모든 호스트들 사이의 스위치와 링크를 폭주되게 하는 것을 방지하는 것이 TCP 혼잡제어이다. TCP는 혼잡한 네트워크 링크에서 각 TCP 연결이 링크의 대역폭을 공평하게 공유하여 통과하도록 해준다.



* 다중화와 역다중화 



네트워크 계층이 제공하는 호스트 대 호스트 전달 서비스에서 호스트에서 동작하는 애플리케이션에 대한 프로세스 대 프로세스 전달 서비스로 확장하는 것.


네트워크 어플리케이션의 한 부분으로서 프로세스가 소켓을 가지고 있다. 이를 통해 네트워크에서 프로세스로 데이터를 전달하며 또한 프로세스로 부터 네트워크로 데이터를 전달하는 출입구 역할을 한다. 그러므로 수신측 호스트의 트랜스포트 계층은 실제로 데이터를 직접 프로세스로 전달하지 않고, 중간에 매개자인 소켓에게 전달한다. 


이때, 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 역다중화라고 한다. 출발지 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위해서 각 데이터에 헤더 정보로 캡슐화하고 세그먼트들을 네트워크 계층으로 전달하는 작업을 다중화라고 한다.


호스트의 각 소켓은 포트번호를 할당받는다. 그리고 세그먼트가 호스트에 도착하면, 트랜스포트 계층은 세그먼트 안의 목적지 포트번호를 검사하고 상응하는 소켓으로 세그먼트를 보내게 된다. 그러면 세그먼트의 데이터는 소켓을 통해 해당되는 프로세스로 전달된다. 



다중화 역다중화 방식 

 UDP

TCP 

세그먼트 헤더 정보

출발지 포트번호, 목적지 포트번호, 길이, 체크섬

 출발지 포트번호, 목적지 포트번호, 출발지 IP 목적지 IP, 길이, 체크섬

동작

UDP 소켓 19157을 가진 호스트A의 프로세스가 호스트 B의 UDP 소켓 46428을 가진 프로세스에게 애플리케이션 데이터 전송.


각 포트번호와 길이, 체크섬을 포함하는 헤더를 가지는 세그먼트를 생성하고 네트워크 계층으로 전달한다. 네트워크 계층은 세그먼트를 IP데이터 그램으로 캡슐화하고 최선형 전달 서비스로 세그먼트를 수신호스토 전달한다. 수신호스트는 세그먼트 헤더의 목적지 포트번호를 검사하고 그 세그먼트를 포트 46428로 식별되는 소켓에 전달한다. 호스트 B에 여러 프로세스가 수행될 수 있다는 것에 유의.


UDP 소켓은 목적지 IP주소와 목적지 포트번호로 구성된 두요소로 된 집합에 의해 구별, 

 TCP 서버 어플리케이션은 TCP 클라이언트로 부터 연결설정 요청을 기다린다


연결 설정요청은 목적지 포트 번호와 TCP 헤더에 특별한 연결설정 비트를 가진 TCP 세그먼트에 지나지 않는다. 이 출발지 포트 번호는 클라이언트에 의해서 선택된 번호이다. 


서버 프로세스로 동작하는 컴퓨터의 호스트 운영체제가 목적지 포트를 포함하는 연결 요청 세그먼트를 수신하면 이 세그먼트를 포트너머로 연결수락을 기다리는 서버 프로세스로 보낸다.


서버는 연결요청 세그먼트의 다음과 같은 네 가지 값을 주목한다 (1) 출발지 포트넘버 (2) 출발지 IP주소 (3) 목적지 포트번호 (4) 목적지 IP주소, 새롭게 생선된 연결 소켓은 이들 네가지 값에 의해서 식별된다. 




* 신뢰성 있는 데이터 전송의 원리(rdt) 


신뢰적인 채널에서는 전송된 데이터가 손상되거나 손실되지 않고 순서대로 전달된다.


데이터 전송 프로토콜의 송신 측은 rdt_send() 호출에 의해서 위쪽으로부터 호출될 것이다. 수신 측에서는 상위 계층으로 전달될 데이터를 넘길 것이다.


rdt_rcv()는 패킷의 채널의 수신 측으로부터 도착했을 때 호출된다. rdt 프로토콜이 상위 계층에 데이터를 전달하려고 할 때 deliver_data()를 호출한다. 



* 완벽하게 신뢰적인 채널 상에서의 신뢰적인 데이터 전송 : rdt 1.0



rdt의 송신측은 rdt_send 이벤트에 의해 상위 계층으로 부터 데이터를 받아들이고 데이터를 포함한 패킷을 생성한다. 그리고 패킷을 채널로 송신한다. 

수신측에서는 rdt는 rdt_rcv(packet) 이벤트에 의해 하위의 채널로 부터 패킷을 수신하고, 패킷으로부터(extract) 데이터를 추출한 후 데이터를 상위계층으로 전달한다 (deliver_data(data)) rdt_rcv(packet)는 하위 계층 프로토콜 프시저의 호출에 의해서 발생한다.


* 비트 오류가 있는 채널 상에서의 신뢰적 데이터 전송 rdt 2.0 


패킷 안의 비트들이 하위 채널에서 손상되는 모델이다. 


ACK, NAK 둘다사용한다. 재전송을 기반으로 하는 신뢰적인 데이터 전송 프로토콜은 ARQ(자동재전송요구) 프로토콜로 알려져 있다.


송신자 프로토콜은 수신자로부터 ACK 또는 NAK 패킷을 기다린다. ACK 패킷이 수신된다면 송신자는 가장 최근에 전송된 패킷이 정확하게 수신되었다는 것을 알게된다. 만약 NAK가 수신되면 프로토콜은 마지막 패킷을 재전송하고 재전송된 데이터 패킷에 대한 응답으로 수신자에 의해 응답되는 ACk, NAK를 기다린다.


ACK 또는 NAK를 기다리는 상태에 있을 때 application layer 로 부터 더이상의 데이터를 전달받을 수 없다는 것에 유의한다. 즉 rdt_send() 이벤트는 발생할 수 없다. 오직 송신자가 ACK를 수신하고 이 상태를 떠난 후에만 발생한다. 


이러한 행동 때문에 rdt2.0과 같은 프로토콜은 전송-후-대기(stop and wait) 프로토콜로 알려져있다.


rdt2.0은 ACK또는 NAK 패킷이 손상될 수 있다는 가능성을 고려하지 않았다.


* 순서번호를 반영하는 신뢰적인 데이터 전송 rdt 2.1 


rdt 2.1에서는 ack및 nak의 손실은 없고 손상은 있다.


순서가 바뀐 패킷이 수신되면 수신자는 이미 전에 수신한 패킷에 대한 긍정 확인 응답을 전송한다. 손상된 패킷이 수신되면 수신자는 부정 확인응답을 전송한다.


같은 패킷에 대해 2개의 ACK를 수신한 송신자는 수신자가 두 번 ACK한 패킷의 다음 패킷을 정확하게 수신하지 못했다는 것을 안다. 






* rdt 2.2 


rdt 2.2는 nak가 없고 ack에 순서번호를 포함한다. 


rdt 2.1과 rdt 2.2 사이의 미묘한 차이는 수신자가 반드시 ACK 메시지에 의해서 확인응답하는 패킷의 순서번호를 포함해야 한다는 것이다. 







* 비트 오류와 손실이 있는 채널 상에서의 신뢰적 데이터 전송 : rdt 3.0 


패킷 손실을 어떻게 검출? -> 타임아웃 


송신자가 어떤 패킷을 손실했다는 것을 확신하기 위해 얼마나 오랫동안 기다려야 할까? 송신자는 적어도 송신자와 수신자 사이의 왕복시간 지연에 수신 측에서 패킷을 처리하는 데 필요한 시간을 더한 만큼 기다린다.



'

이렇게 Stop&Wait 프로토콜 rdt 1.0, 2.0~2.2, 3.0을 다루어 보았다. 하지만 Stop&Wait 프로토콜의 문제점은 링크 이용률이 낮다는 것이다. 이러한 성능 문제대한 해결책은 전송 후 대기방법으로 동작하는 대신에 송신자에게 확인응답을 기다리지 않고 여러 패킷을 전송하도록 허용하는 것이다. 이것을 파이프라이닝 이라고 한다. 


파이프라이닝을 쓰는 프로토콜을 슬라이딩 윈도우 프로토콜이라하며 슬라이딩 윈도우 프로토콜에는 Go-Back-N과 Selective-AND-Repeat 방식이 있다. 




확인 응답이 안된 가장 오래된 패킷의 순서번호를 base로 정의하고 사용되지 않은 가장 작은 순서번호를 nextseqnum으로 정의한다면, 순서번호의 범위에서 4개의 간격을 식별한다.


[0,base-1] 에서 순서번호는 이미 전송되고 확인 응답이 된 패킷에 대응된다.

[base, nextseqnum-1]은 송신은 되었지만 아직 확인응답되지 않은 패킷에 대응된다.

[nextseqnum,base+N-1]은 상위 계층으로부터 데이터가 도착하면 바로 전송될 수 있는 패킷을 위하여 사용.

[base+N] 이상의 순서번호는 파이프라인에서 확인응답이 안 된 패킷의 확인응답이 도착될 때까지 사용될 수 없다. 


* 슬라이딩 윈도우 프로토콜 - Go-Back-N(N부터 반복)


상위로부터 호출 : rdt_send()가 어플리케이션 레이어로 부터 호출되면, 송신자는 첫째로 윈도우가 가득찼는지, 즉 N개의 아직 확인응답되지 않은 패킷이 있는지 확인한다. 만약 윈도우가 가득 차 있다면, 송신자는 윈도우가 가득 차 있다는 것을 가리키는 함축적인 의미로 단지 데이터를 상위 계층으로 반환한다. 상위 계층은 나중에 다시 시도할 것이다. 실제적인 구현에서 송신자는 이 데이터를 버퍼링한다.


ACK의 수신 : GBN 프로토콜에서 순서번호 n을 가진 패킷에 대한 확인응답은 누적확인 응답으로 인식된다.sliding 윈도우가 한꺼번에 한칸이상 밀려갈 수 있다. 프레임이 0,1,2 를 전송한 후 ack3가 온 경우 프레임 2까지 잘 전송된 것으로 판단하여 sliding window가 세간 이동.



타임아웃 이벤트 : GBN 프로토콜의 이름은 손실이 있거나 아주 긴 지연된 패킷이 있을 때의 송신자의 동작으로부터 유래되었다. 전송 후-대기 프로토콜에서와 같이, 타이머는 손실된 데이터 또는 손실된 확인응답 패킷으로부터 회복하는 데 사용된다. Go-Back-N에서의 타이머는 한개뿐이다. 만약 타임아웃이 발생한다면 송신자는 이전에 전송되었지만 아직 확인응답되지 않은 모든 패킷을 다시 송신한다. 예를들어 6번 프레임을 보냈는데 3번 프레임의 타이머가 만료된 경우 3,4,5,6을 다시 전송.


수신측 : 수신측의 슬라이딩 윈도우 크기는 1이다. 받고자 하는 프레임의 번호만 가리키고 있는다. 기다리고 있는 프레임의 번호에 해당하는 패킷이 아닌경우 패킷들을 버린다.



* 슬라이딩 윈도우 프로토콜 - Selective-and-Repeat



GBN은 패킷 하나의 오류 때문에 많은 패킷을 재전송하므로, 많은 패킷을 불필요하게 재전송하는 경우가 발생한다. 


- Timer는 각 프레임당 한개씩 동작한다. 


- 송신자와 수신자의 윈도우 사이즈가 동일하다.(수신자의 윈도우 사이즈가 1이 아니다)


-중요한건 수신자가 sliding window 범위 안의 프레임이 순서가 뒤바뀌어 온경우 버리지 않고 저장하고 ack를 보낸다.


- 송신자는 타임 아웃이 발생한 패킷에 대해서만 다시 보낸다. 









 








































'이론 > 컴퓨터통신' 카테고리의 다른 글

Network Layer(L3)  (0) 2015.10.17
Transport Layer(L4)  (0) 2015.10.17
Application Layer(L7)  (0) 2015.10.14
컴퓨터 네트워크 개론  (0) 2015.10.13
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

* 애플리케이션 구조(개발자가 직접 설계)

 

 애플리케이션 개발자 관점에서 네트워크 구조는 고정되어 있고 애플리케이션에 특정 서비스 집합을 제공한다. 애플리케이션 구조는 애플리케이션 개발자에 의해 설계되고 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지를 지시한다. 애플리케이션 구조 선택에 있어서 애플리케이션 개발자는 현대 네트워크 애플리케이션에 사용되는 두가지 우수한 구조, (클라이언트/서버) 구조 혹은 P2P 구조 중의 하나로 작성할 것이다.

 

클라이언트/서버 구조  - 항상 켜져있는 호스트를 서버라고 부르며, 서버는 클라이언트라는 다른 많은 호스트의 요청을 받는다.

 

P2P 구조 - 애플리케이션은 피어라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신하도록 한다. 피어는 서비스 제공자가 소유하지 않고, 사용자들이 제어하는 데스크톱과 랩톱이 소유한다. 특정 서버를 통하지 않고 피어가 직접통신하므로 이를 P2P(피어투피어)라고 한다.

 

P2P구조의 가장 주목할 만한 특성 중의 하나는 자가확장성이 있다는 것이다. 예를들어, P2P 파일 공유 애플리케이션에서 비록 각 피어들이 파일을 요구함으로써 작업 부하를 만들어 내지만 각 피어들은 또한 파일을 다른 피어들에게 분배함으로써 그 시스템에 서비스 능력을 추가한다.

 

* 애플리케이션이 이용 가능한 트랜스포트 서비스

 

 어플리케이션의 요구에 가장 적합한 서비스를 제공하는 전송 프로토콜을 선택해야한다.

 

고려사항 : 신뢰적 데이터 전송, 처리량(두 프로세스간의 비트를 전달할 수 있는 비율), 시간, 보안

 

* 인터넷 전송 프로토콜이 제공하는 서비스

 

 인터넷은 2개의 전송 프로토콜 UDP와 TCP를 제공한다.

 

TCP와 UDP는 트랜스포트 계층을 설명할때 자세히 다룬다.

 

 

* 어플리케이션 계층 프로토콜

 

어플리케이션 계층 프로토콜은 다른 종단 시스템에서 실행되는 애플리케이션의 프로세스가 서로 메시지를 보내는 방법을 정의한다.

 

1) HTTP(HyperText Transfer Protocol)

 

하이퍼텍스트(Hypertext, 문화어: 초본문, 하이퍼본문)는 참조(하이퍼링크)를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트이다.

기존의 문서가 순차적이면서 서열형 구조라면, 하이퍼텍스트는 링크에 따라 그 차례가 바뀌는 임의적이면서 나열형인 구조를 가진다

 

WWW 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. TCP를 사용하며, 80번 포트를 사용한다.

 

HTTP 서버는 클라이언트에 대한 정보를 유지하지 않으므로, HTTP를 비상태 프로토콜이라고 한다.

 

HTTP 메시지 포맷

 

요청라인 : 방식필드, URL필드, HTTP버전 필드

 

헤더라인 : HOST, Connection(지속연결, 비지속연결 설정), User-agent(브라우저), Accept Language

 

웹에서의 사용자와 서버간의 상호 작용 - 쿠키

 

쿠기 - 처음으로 사이트에 접속 요청이 들어오면 그 서버는 유일한 식별번호를 만들고 이 식별번호로 인덱스되는 백엔드 데이터베이스 안에 엔트리를 만든다.

 

Set - cookie : 1678

 

그후 계속 그 사이트를 살펴봄에따라 그녀의 브라우저는 쿠키파일을 참조하고 이 사이트에 대한 그녀의 식별번호를 발췌하고 HTTP 요청에 식별번호를 포함하는 쿠키 헤더파일을 넣는다.  이러한 방식으로 사이트 서버는 사용자의 활동을 추적한다.

 

2) SMTP

 

인터넷에서 이메일을 보내기 위해 사용되는 프로토콜이다. 사용하는 TCP 포트 번호는 25번이다.

 

1)송신자는 메시지를 작성하고 사용자 에이전트에게 메시지를 보내라고 명령한다.

 

2) 사용자 에이전트는 메시지를 메일 서버로 보내고 메시지 큐에 놓인다

 

3) 송신자 메일 서버에서 동작하는 SMTP 클라이언트 측은 메시지 큐에 있는 메시지를 본다. 수신자의 메일서버에서 수행되고 있는 SMTP 서버에게 TCP연결 설정

 

4) 3-way HandShaking 이후에 SMTP 클라이언트는 송신자의 메시지를 TCP연결로 보낸다.

 

5) 수신자의 메일서버 에서 SMTP 서버측은 메시지를 수신하고 메일박스에 놓는다.

 

5) 수신자는 편한시간에 사용자 에이전트를 가동하여 메시지를 읽는다.

 

HTTP는 풀 프로토콜이다(사용자 요청시 서버로부터 정보를 가져오기위해 HTTP사용) SMTP는 푸시 프로토콜(송신자가 먼저 TCP를 통해 메일서버로 보냄)이다.

 

 

3) DNS

 

사람은 좀 더 기억하기 쉬운 호스트 네임 식별자를 좋아하지만 라우터는 고정 길이의 계층구조를 가진 IP 주소를 선호합니다. 이러한 선호차이를 절충하기 위해 호스트 네임을 IP주소로 변환해 주는 서비스인 DNS가 존재한다.

 

4) FTP(File Transfer Protocol)

 

TCP연결을 통해 원격호스트의 호스트네임을 제공하여 로컬 호스트에 있는 FTP 클라이언트 프로세스가 원격호스트에 있는 FTP와 연결하게 한다.

 

HTTP 와 다른 점은 두 TCP연결, 제어연결과 데이터연결을 동시에 사용한다는 것이다.

 

여기서 제어연결은  두 호스트 간에 사용자 계정 및 비밀번호와 같은 정보를 보내는데 사용된다.

 

FTP가 별도의 제어 연결을 사용하므로 FTP는 제어 정보를 아웃밴드로 보낸다고 표현한다. HTTP는 TCP연결로 요청과 응답 헤더라인을 보낸다. 즉 제어종보를 인밴드로 보낸다 .

 

 

또한 FTP 서버는 세션을 통해 사용자에 대한 상태를 유지해야 한다. 반면 HTTP는 비상태유지 애플리케이션이다.

 

 

 

 

 

 

 

 

 

 

'이론 > 컴퓨터통신' 카테고리의 다른 글

Network Layer(L3)  (0) 2015.10.17
Transport Layer(L4)  (0) 2015.10.17
Application Layer(L7)  (0) 2015.10.14
컴퓨터 네트워크 개론  (0) 2015.10.13
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

* 컴퓨터네트워크


컴퓨터 네트워크라는 용어는 인터넷에 연결되는 많은 비전통적인 장치들로 인해 진부한 것처럼 느껴지기 시작하고 있다.

인터넷 용어로, 이들 모든 장치는 호스토 혹은 종단 시스템이라고 부른다.


종단 시스템은 통신 링크패킷스위치의 네트워크로 연결된다.

이때 각각 링크들은 다양한 전송률을 이용하여 데이터를 전송하며 전송률은 bps(bit per seconds)를 사용한다.


송신 종단 시스템은 그 데이터를 세그먼트로 나누고 각 세크먼트에 헤더를 붙인다.

이렇게 만들어진 정보 패키지는 패킷이라고 한다.

패킷은 목적지 종단 시스템으로 네트워크를 통해 보내지고 목적지에서 원래의 데이터로 다시 조립된다.


패킷 교환기(스위치)는 입력 통신 링크의 하나로 도착하는 패킷을 받아서 출력 통신 링크의 하나로 그 패킷을 전달한다.


패킷 스위치는 라우터링크계층 스위치가 있다.


패킷이 송신 종단 시스템에서 수신 종단 시스템에 도달하는 동안 거쳐 온 일련의 통신링크와 패킷 스위치들을 네트워크상의 라우트 혹은 경로라고 한다.


종단 시스템은 ISP를 통해서 인터넷에 접속하는데, 지역 케이블 혹은 전화 회사와 같은 가정 ISP, 법인 ISP, 대학 ISP, 더 나아가 공항,호텔,커피숍,기타 공공 장소 등에서 와이파이 접근을 제공하는 ISP를 포함한다 각 ISP는 패킷 스위치와 통신링크로 이루어진 네트워크다.

인터넷은 종단 시스템을 서로 연결하는 것이므로 종단 시스템에 접속을 제공하는 ISP들도 서로 연결되어야만 한다.


종단 시스템, 패킷 스위치, 인터넷의 다른 구성요소는 인터넷에서 정보 송수신을 제어하는 여러 프로토콜을 수행한다. TCP IP는 인터넷에서 가장 중요한 프로토콜이다. IP 프로토콜은 라우터와 종단 시스템 사이에서 송수신되는 패킷 포맷을 기술한다. 


인터넷 표준은 IETF에서 개발하며, IETF 표준문서를 RFC라고 한다..


* 프로토콜


프로토콜은 둘 이상의 통신 개체 간에 교환되는 메시지 포맷과 순서 뿐 아니라, 메시지의 송수신과 다른 이벤트에 따른 행동들을 정의한다.


* 접속 네트워크


종단 시스템을 그 종단 시스템으로부터 다른 먼 거리의 종단 시스템까지의 경로상에 있는 첫 번째 라우터에 연결하는 네트워크


접속네트워크 - 가정접속 


DSL(digital subscriber line)


일반적으로 가정은 지역전화회사로 부터 DSL 인터넷 접속 서비스를 받는다. 고객의 DSL 모뎀은 지역전화회사의 DSLAM과 데이터를 교환하기 위해 기존 전화회선을 이용한다. 가정의 DSL모뎀은 디지털 데이터를 받아서 전화선을 통해 CO로 전송하기 위해 고주파 신호로 변환한다. 여러 가정으로부터의 아날로그 신호는 DSLAM에서 디지털 포맷으로 다시 변환.


DSL과 케이블 네트워크가 현재 광대역 접속의 90% 이상을 제공하지만 미래기술은 FTTH의 구축이다. 지역전화회사로 부터 가정까지 직접 광섬유 경로를 제공하는 것이다. FTTH는 Gbps범위의 인터넷 접속속도를 제공할 수 있다.


접속네트워크 - 기업접속 


기업과 대학 캠퍼스 점진적으로 가정환경에서 LAN은 일반적으로 종단 시스템을 가장자리 라우터에 연결하기 위해 사용한다. 여러 유형의 LAN 기술이 있지만 이더넷 기술이 기업, 대학, 홈네트워크에서 가장 널리 사용되는 접속기술이다.


이더넷 스위치에 상호연결된 네트워크는 다시 더 큰 인터넷으로 연결된다.


접속네트워크 - 무선접속


IEEE 802.11 WIFI


3G, LTE, 5G..



* 물리 매체


꼬임쌍선 - 가장 싸고 가장 많이 이용하는 전송 매체가 꼬임쌍선이다. 두개의 절연 구리선이 나선 형태로 배열된다.


동축케이블 - 2개의 구리선이 평행하지 않고 동심원을 이룬다. 꼬임쌍선보다 더 높은 데이터 전송률을 얻을 수 있다.


광섬유 - 빛의 파동을 전하는 가늘고 유연한 매체, 도청 힘듬


지상 라디오 채널 - 전자기 스펙트럼으로 신호를 전달한다.


위성 라디오 채널 - 통신에는 두 가지의 위성, 정지 위성과 저궤도 위성이 이용된다. 위성 3개면 지구 커버


저궤도 위성은 달이 지구를 돌듯이 회전하며 지상국 뿐만 아니라 서로 통신가능.


* 패킷 교환 


송신 시스템에서 목적지 종단 시스템으로 메시지를 보내기 위해 송신 시스템은 긴 메시지를 패킷이라고 알려진 작은 데이터 덩어리로 분할 한다.

송신 측과 수신 측 사이에서 각 패킷은 통신 링크와 패킷 스위치를 거치게 된다. 패킷은 링크의 최대 전송속도와 같은 속도로 각각의 통신 링크상에서 전송된다.


대부분의 패킷 스위치는 저장 후 전달 전송 방식을 이용한다.


소스로부터 목적지 노드까지 N개의 링크로 구성되고, 각각은 R 전송속도를 갖는 경로를 통해 하나의 패킷을 전송하는 일반적인 경우를 고려해 보자


d(종단간 지연) = N*(L/R)


- 큐잉 지연과 패킷 손실


각 링크에 대해 패킷 스위치는 출력버퍼를 갖고 있으며, 그 링크로 송신하려고 하는 패킷을 저장하고 있다. 출력버퍼는 패킷 스위칭에서 중요한 역할을 한다.

도착하는 패킷이 한 링크로 전송될 필요가 있는데 그 링크가 다른 패킷을 전송하고 있다면, 도착하는 패킷은 출력버퍼에서 대기해야 한다. 큐잉지연을 겪게 된다.

패킷은 버퍼가 전송을 위해 대기 중인 다른 패킷들로 꽉차있는 경우를 당할 수 있다. 패킷손실이 발생한다.


- 전달 테이블과 라우팅 프로토콜


라우터는 어떻게 그 패킷을 어느 링크로 전달해야 하는지를 결정하는가? 패킷 전달은 실제 여러 다른 유형의 컴퓨터 네트워크에서 다른 방식으로 실행된다. 


라우터는 목적지 주소를 라우터의 출력 링크로 맵핑하는 전달 테이블을 갖고있다. 패킷이 라우터에 도착하면, 라우터는 올바른 출력 링크를 찾기 위해 주소를 조사하고 이 목적지 주소를 이용하여 전달 테이블을 검색한다. 그런 후에 라우터는 그 패킷을 출력 링크로 보낸다.


* 회선 교환


링크와 스위치의 네트워크를 통해 데이터를 이동시키는 방식에는 회션교환과 패킷 교환이라는 두 가지 기본 방식이 있다.


회선 교환 네트워크에서 종단 시스템 간에 통신을 제공하기 위해 경로상에 필요한 자원은 통신 세션 동안에 예약된다. 패킷 교환네트워크에서는 이들 자원을 예약하지 않는다. 송신자와 수신자 간의 경로에 있는 스위치들이 해당 연결 상태를 유지해야 하는 연결이다. 전기통신 용어로 이 연결을 회선이라고 한다.


주어진 전송속도가 송신자 - 수신자 연결을 위해 예약되므로 송신자는 수신자에게 보장된 일정 전송률로 데이터를 보낼 수 있다.


- 회선 교환 네트워크에서의 다중화


링크 내 한 회선은 주파수분할 다중화 혹은 시분할 다중화로 구현된다.


FDM의 경우에는 주파수 영역이 4개 대역으로 분할되었고  1/4 대역폭을 갖는다.

TDM의 경우에는 시간 영역이 시간 프레임으로 분할되고 각 프레임은 4개 시간 슬롯을 갖는다 TDM 회선의 전송률은 한 슬롯 안에 비트수에 프레임 전송률을 곱한 것과 같다. 



- 패킷 교환대 회선 교환


(1) 패킷 교환이 회선 교환보다 전송 용량의 공유에서 더 효율적이다

(2) 패킷 교환이 더 간단하고, 효율적이며, 회선교환보다 구현 비용이 적다.



* 네트워크의 네트워크 


종단 사용자들과 컨텐츠 제공자들을 접속 ISP로 연결하는 것은 인터넷을 구성하는 수십억 개의 종단 시스템을 연결하는 퍼즐의 해결방법 중 극히 일부분에 해당된다.. 이 퍼즐을 완전히 풀기 위해서는 접속 ISP들이 서로 연결되어야만 한다. 


접속 ISP -  지역 ISP - 글로벌 ISP (네트워크의 네트워크)



* 패킷 교환 네트워크에서의 지연, 손실과 처리율




- 처리지연


패킷 헤더를 조사하고 그 패킷을 어디로 보낼지를 결정하는 시간이 처리지연이다. 


- 큐잉 지연


큐에서 링크로 전송되기를 기다리면서 큐잉 지연을 겪는다.


- 전송 지연


패킷의 길이를 L비트로, 라우터 A에서 라우터 B까지 링크의 전송률은 Rbps로 나타내자. R은 라우터B로 가는 링크의 전송률에 의해 결정된다.


전송지연은 L/R이다. 이것은 패킷의 모든 비트를 링크로 밀어내는 데 필요한 시간이다.


- 전파지연


링크의 처음부터 라우터 B까지의 전파에 필요한 시간이 전파 지연이다.


전송 지연과 전파 지연 비교


진송지연은 라우터가 패킷을 내보내는 데 필요한 시간이다. 반면, 전파 지연은 비트가 한 라우터에서 다음 라우터로 전파되는 데 걸리는 시간이다(두 라우터 사이의 거리에 대한 함수이며 피킷 길이나 링크 전송률과는 관계가 없다)


* 큐잉지연과 패킷손실


언제 큐잉 지연이 크고, 언제 미미한가? 이것에 대한 답변은 트래피이 큐에 도착하는 비율, 링크의 전송률, 도착하는 트래픽의 특성, 즉 그 트래픽이 주기에 맞춰서 또는 버스트하게 도착하느냐에 의해 주로 결정된다.


패킷손실


큐 용량이 유한하므로 트래픽 강도가 1에 접근함에 따라 패킷 지연이 실제로 무한대가 되진 않는다. 패킷을 저장할 수 없는 경우에 라우터는 그 패킷을 버린다. 즉, 그 패킷을 잃어버리게 된다(lost).



* OSI 7계층 


어플리케이션 계층(L7) - HTTP, SMTP, FTP 프로토콜


사용자가 네트워크에 직접 접근할 수 있도록 해주는 계층이다.

전자우편, 파일전송, 데이터베이스 관리등의 서비스를 제공한다.

HTTP, SMTP, FTP 등이 있다.


Presentation Layer(L6) - 표현계층


운영체계의 한 부분으로 입력또는 출력되는 데이터를 하나의 표현형태로 변환한다.


Session Layer(L5) - 세션계층


통신세션을 구성하는 계층으로 포트연결이라고 할 수 있다.


Transport Layer(L4) - 전송계층


종단과 종단간의 제어와 에러를 관리한다.

패킷들의 전송이 유효한지 확인하고 실패한 패킷은 다시 보내는 등의 신뢰성 있는 통신을 보장하며, 머리말에는 세그먼트가 포함된다.

대표적인 프로토콜은 TCP이다.


예) TCP, UDP


Network Layer(L3) - 네트워크 계층


패킷을 발신지로 부터 목적지로 전달할 책임을 갖는다(라우팅 할 책임).

2계층은 노드대 노드 전달을 감독하는 것이고 3계층은 각 패킷이 시작지점에서 최종 목적지까지 성공적이고 효과적으로 전달되도록 하며,

대표적인 프로토콜은 IP이다.


예) IP


DataLink Layer(L2) - 데이터링크 계층


오류없이 한 장치에서 다른 장치로 프레임을 전달하는 역할 

스위치 같은 경우 MAC 주소를 이용하여 정확한 장치로 정보 전달. 

3계층에서 정보를 받아 주소와 제어정보를 헤더와 테일에 추가.


예) IEEE 802.2(LLC), IEEE802.3(CSMA/CD), IEEE 802.5(Token Ring)


Physical Layer(L1) - 물리계층


물리적 매체(통신 케이블)을 통해 비트의 흐름을 전송하는 계층, 단지 데이터의 전달만을 할 뿐이다. 


예) 케이블, 리피터, 허브, 동축케이블, 꼬임쌍선, 광섬유









'이론 > 컴퓨터통신' 카테고리의 다른 글

Network Layer(L3)  (0) 2015.10.17
Transport Layer(L4)  (0) 2015.10.17
Application Layer(L7)  (0) 2015.10.14
컴퓨터 네트워크 개론  (0) 2015.10.13
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

[TCP/IP] TCP 연결 3 way handshake (SYN, SYN/ACK, ACK) 


Client와 Server 또는 P2P Socket 통신 등, 네트워크를 사용한 통신시 TCP 통신을 많이 사용한다.


TCP 통신을 위한 네트워크 연결은 3 way handshake 라는 방식으로 연결된다.


쉽게 이야기 하면, 서로의 통신을 위한 관문(port)을 확인하고 연결하기 위하여 3번의 요청/응답 후에 연결이 되는 것이다.




그림을 보면 이해가 쉬울 것이다.


먼저 Server에서 열려있는 포트는 LISTEN 상태이고 Client에서는 Closed 상태이다.


1. Client에서 Server에 연결 요청을 하기위해 SYN 데이터를 보낸다.


2. Server에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV로 상태가 변경된다.

  그리고 요청을 정상적으로 받았다는 대답(ACK)와 Client도 포트를 열어달라는 SYN 을 같이 보낸다.


3. Client에서는 SYN+ACK 를 받고 ESTABLISHED로 상태를 변경하고 서버에 요청을 잘 받았다는 ACK 를 전송한다.

 ACK를 받은 서버는 상태가 ESTABLSHED로 변경된다.


위와 같이 3번의 통신이 정상적으로 이루어지면, 서로의 포트가 ESTABLISHED 되면서 연결이 되게 된다.


* Status


- Closed : 닫힌 상태

- LISTEN : 포트가 열린 상태로 연결 요청 대기 중

- SYN_RCV : SYNC 요청을 받고 상대방의 응답을 기다리는 중

- ESTABLISHED : 포트 연결 상태


현재의 포트 상태 확인은 netstat 명령어로 할 수 있다.

'이론 > 데이터통신' 카테고리의 다른 글

3way handshake  (0) 2015.10.11
http header  (0) 2015.10.11
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

Http Header 정리

 

HyperText Transfer Protocl은 www(World Wide Web)으로 접속하는 통신 수단이고 오늘날의 웹에 적용해서 사용되고 있습니다. 정적인 페이지에서 동적인 페이지로 만들기위해 발전되었고 복잡하고 웹 애플리케이션을 지원하기 위하여 만들어진 프로토콜입니다. HTTP는 고객이 Request를 보낸 메시지에 근거한 모델을 사용합니다. 그리고 서버는 Response를 돌려줍니다. 덧붙여 HTTP 필터가 가끔 사용자들에게 돌아가는 경우도 있다. 예를 들어 서버에서 발생한 오류 코드들을 브라우저로 보여줄 때가 있다.

 

 HTTP Request

 다음은 전형적인 HTTP request 내용이다.

 

GET /books/search.asp HTTP/1.1

Accept: image/gif, image/xxbitmap, image/jpeg, image/pjpeg,

application/xshockwaveflash, application/vnd.msexcel,

application/vnd.mspowerpoint, application/msword, */*

Referer: http://wahh-app.com/books/default.asp

Accept-Language: en-gb,en-us;q=0.5

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

Host: wahh-app.com

Cookie: lang=en; JSESSIONID=0000tI8rk7joMx44S2Uu85nSWc_:vsnlc502

(                           공백행                               )


GET /books/search.asp HTTP/1.1

- GET메소드를 이용하여 search.asp라는 문서를 요청하며, 이 때 HTTP1.1버전을 사용한다.


User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

  Accept: image/gif, image/xxbitmap, image/jpeg, image/pjpeg,

- 클라이언트는 서버에게 옵션헤더 정보를 보내 자신이 설정한 내용과 받아들일 문서의 형식을 알린다. 모든 헤더 정보는 각 헤더 이름과 값을 가즌 행별로 주어진다. 그리고 사용자는 헤더의 끝을 알리기 위해 공백행을 보낸다.


- 요청과 헤더를 보낸 후에, 클라이언트는 추가로 다른 데이터를 보낼수있다. 이 때 POST메소드를 사용하는 CGI프로그램을 이용한다.


Request에는 크게 세가지 부분으로 이루어져있다.

첫번째 라인에는 HTTP명령어와 사용자가 질의한 파일이나 자원을 표시하는 URL, 그리고 HTTP 버전 번호로 이루어진다. 두번째 부분은 사용자와 서버에서 보내는 데이터ENTITY에 대한 정보를 제공하는 헤더 정보가 포함되고, 세번째 부분은 사용자 요청으로 서버에게 보내는 데이터인 ENTITY의 몸체이다.


 메소드

메소드는 사용자 요구 사항의 첫째 라인에서 시작한다. 서버에게 사용자의 목적을 알리는 역할을 하는데, HTTP에서는 미리 정의 된 GET, HEAD, POST가 있다. 물론 다른 메소드도 지원하지만 현재 서버에서 폭넓게 지원하지는 않는다. 참고로 메소드는 대소문자를 구분한다.


 GET 메소드

GET 메소드는 서버에서 명시된 URI에 위치 정보에 대한 요청으로 웹 브라우저가 문서를 받아 보는데 사용되는 일반적인 방법이다. GET 요청의 결과는 서버에서 접근할 수있는 파일, 프로그램이나 CGI등의 결과 값, 하드웨어 장치로부터의 출력등의 여러방식으로 생성될 수 있다.

 사용자가 GET 메소드를 사용하여 요청할 때, 서버는 상태 표시줄, 헤더, 요청된 데이터로 응답한다. 서버에서 오류가 발생하거나 권한이 아닌 상태로 인해 요청을 진행시킬수 없다면 서버는 적절한 오류 메세지를 보낸다.


GET이 요청하는 실제 데이터 부분은 항상 비어있다. GET메소드는 근본적으로 파일을 달라는 요청상태로 이용된다. 사용자가 요청하는 파일이나 프로그램은 일반적으로 서버에서 전체 경로명에 의해 식별된다. 또한 GET 메소드는 폼 태그를 통해 CGI같은 프로그램으로 입력된 데이터를 보내는데 사용되기도 한다. 위에서도 언급했듯이 비어있는 ENTITY몸체를 가지고 있으므로 입력된 자료는 요청의 GET행에 있는 URL에 덧붙혀진다.

GET /books/search.asp?q=wahh HTTP/1.1

위의 예는 서버에서 클라이언트가 입력한 q의 값 wahh를 나타낸다.

q와 wahh는 <form>태그의 키와 값을 나타내며 2개 이상의 키와 값을 전송할때는 &기호에 의해 추가 할수있다.


 HEAD 메소드

 HEAD 메소드는 서버가 응답해야 할 데이터를 보내지 않는다는 것을 제외하면 GET 메소드와 같다.  HEAD 메소드는 파일이나 자원에 대한 헤더 정보만을 요구한다.

 클라이언트는 다음과 같은 예의 정보를 원한다.

 - 캐시 관련 질의에 유용한 문서의 수정 시간

 - 도착 시간을 측정하거나 문서의 더 작은 버전을 요청을 결정하는 페이지

 레이아웃에 유용한 문서의 크기

 - 클라이언트가 특정 문서만 검색할 수 있도록 해주는 문서의 유형

 - 주문형 서버 질의를 가능하게 하는 서버의 유형

 서버가 제공하는 헤더 정보의 대부분은 선택적이며 모든 서버들이 제공하는 것은 아니다. 또한 클라이언트에게 유익한 설계는 요구하는 헤더 정보를 서버가 전달하지 못할 경우, 서버가 융통성 있게 응답하고 기본적인 조치를 취하도록 하는것이다.


POST 메소드

 POST 메소드는 클라이언트가 요청한 데이터를 서버에게 보내게 한다. 데이터는 서버에서 접근할 수 있는 데이터를 다룰 수 있는 프로그램(CGI등)에 전달된다.

POST 메소드는 다음과 같은 애플리케이션에서 사용될 수 있다.

 - 글을 올릴수 있는 네트워크 서비스

 - 명령행에서 실행되는 프로그램

 - 서버에 있는 문서의 주석

 - 데이터베이스 조작

서버는 POST 메소드와 각종 헤더들을 처리한 후, ENTITY 몸체를 URI에 지정된 프로그램에 전달한다. POST 메소드에서 가장 일반적으로 사용되는 인코딩 방법은 URL인코딩이다. 폼으로부터 전달된 데이터가 CGI처리를 위한 변수와 값으로 변환되게 한다.


기타 메소드들에는 LINK, UNLINK, PUT, DELETE, OPTIONS, TRACE, CONNECT 등이 있다.(자세한 정보는 구글신에게 기도를 드리자!)



HTTP Response

다음은 전형적인 HTTP Respose 내용이다.

 

HTTP/1.1 200 OK

Date: Sat, 19 May 2007 13:49:37 GMT

Server: IBM_HTTP_SERVER/1.3.26.2 Apache/1.3.26 (Unix)

Set-Cookie: tracking=tI8rk7joMx44S2Uu85nSWc

Pragma: no-cache

Expires: Thu, 01 Jan 1970 00:00:00 GMT

Content-Type: text/html;charset=ISO-8859-1

Content-Language: en-US

Content-Length: 24246

(                                공백행                                    )


HTTP/1.1 200 OK

서버는 HTTP버젼, 상태코드, 설명으로 응답을 한다. HTTP버전은 서버가 응답하기 위해 사용하는 HTTP의 버전을 나타내며, 상태코드는 사용자가 요청한 서버의 결과를 나타내는 세자리 숫자이다. 설명은 우리들이 이해할 수 있는 텍스트로 되어있다.

 위의 내용의 서버가 사용자의 요청에 HTTP 1.1버전을 사용했다는 것을 나타내고 200이란 상태 코드는 사용자의 요청이 성공적으로 됐다는 것을 의미한다. OK는 200에 대한 우리들이 이해할 수 있는 텍스트이다.


공백행은 헤더의 끝을 나타낸다.


HTTP Header

 HTTP 헤더는 클라이언트와 서버 사이에서 모든 종류의 정보를 전송하는데 이용되며 크게 4가지로 분류할 수 있다.

 General - 클라이언트, 서버 또는 HTTP와 관계된 정보

 Request - 문서 양식과 서버의 매개 변수들

 Response - 응답을 보내는 서버에 대한 정보

 Entitiy - 클라이언트와 서버 사이에 전송되는 데이터에 대한 정보

HTTP메시지에 있는 모든 헤더는 헤더 이름을 포함하여 콜론, 공백, 헤더의 값 순으로 구성된다. 헤더 이름은 대소문자를 구별하지 않는다. 또한 헤더의 값은 적어도 하나의 공백이나 탭 문자를 각행에 붙임으로써 여러 줄로 확장하여 쓸 수 있다.

일반 헤더와 ENTITY헤더는 서버와 클라이언트 모두 동일하다.


 General Header

 일반 헤더는 클라이언트의 요청과 서버의 응답 양쪽에서 사용될 수있다.

일반 헤더는 다음과 같은 내용을 가지고 있다.

- Cache-Control

 Cache-control:  directives

 쉼표로 구분된 목록에 캐싱 지시문을 지정


캐시 요청 지시문

 ㄱ. no-cache           캐시 하지 않는다.

 ㄴ. no-store            신속히 넘긴 후에 정보를 제거한다.

 ㄷ. max-age = seconds      seconds에 지정한 것보다 오래된 응답은 보내지 않는다.

 ㄹ. max-stale [=seconds] 만료된 데이터를 보낸다. 만약 seconds가 지정되어

있다면 지정한 숫자보다 적은 만료된 데이터를 보

낸다.

 ㅁ. min-fresh = seconds     명시된 seconds의 수 이후의 변경된 새 데이터만 보낸다.

 ㅂ. only-if-cached   새로운 데이터를 검색하지 않고 캐시에 있는 데이터만 반환한다.


캐시 응답 지시문

 ㄱ. public                 어떠한 캐시라도 캐시할수 있다.

 ㄴ. private               공유된 캐시는 캐시하지 않는다.

 ㄷ. no-cache           캐시하지 않는다.

 ㄹ. no-transform      데이터를 변환하지 않는다.

 ㅁ. must-revalidate  클라이언트는 데이터를 재확인 해야 한다.

 ㅂ. proxy-revalidate 개인적인 클라이언트 캐시를 제외하고 데이터를 재확인 해야한다.

 ㅅ. max-age=seconds        문서는 지정된 seconds만큼만 변화가 없는 상태라고 생각


Connection

Connection:  options

 options에서는 연결을 위해 지정하는데 프록시 서버에 의한 연결은 포함하지 않는다. close연결 옵션은 클라이언트나 서버 둘 중 하나가 연결을 해제하기를 원한다는 것을 알린다.


Date

 Date:  dateformat

 현재의 날짜와 시간을 표시한다.

예) Mon, 11 May 2000 07:45:00 GMT

때로는 이전과 호환을 위해 RFC-850과 ANSI C asctime() 도 사용할 수 있다.

Monday, 11-May-98 07:45:00 GMT

Mon May 11 07:45:00 2000

단 년도 항목에 2자리를 사용으로 인한 문제가 발생할 수 있다.


MIME-Version

MIME-Version:  version

HTTP 트랜젝션에서 사용되는 MIME(RFC-2045[7])의 버전을 말한다.

메시지의 ENTITY몸체가 MIME를 따르지 않으면 이 헤더는 생략될 수 있다. 만약 틀랜잭션에서 MIME-encoded데이터를 호출하지만 이 헤더가 삭제되었다면 디폴트로 1.0을 사용한다.


Progma

 Pragma: no-cache

 프록시 시스템에 대한 지시문을 말한다. 이 헤더는 목표가 되는 서버에서는 무시된다.

HTTP는 이 헤더를 위해 no-cache라는 지시어만 정의 한다. HTTP 1.0에서, 이 것은 그 로컬 캐시 대신 서버로부터의 문서를 요구하도록 프록시 서버에 명령한다.

단, HTTP1.1은 Cache Control:no-cache를 주로 사용한다.


Transfer-Encoding

 Transfer-Encoding:  encoding_type

안전한 전송을 위해 메시지 본체에 어떤 종류의 변환이 적용이 됐는지 나태낸다.


Upgrade

 Upgrade:  protocol/version

 우선하는 프로토콜을 명시한다. 응답 코드 101 Switching Protocols과 연결하여 사용된다.

예) Upgrade: HTTP/1.2


Via

 Via:  protocol host   [comment]…

 게이트웨이와 프록시에 의해 사용되어 클라이언트와 서버 간의 트랜잭션을 처리하는 프로토콜과 호스트를 표시한다.



클라이언트 요청 헤더


Accept

 Accept:  type/subtype [; q=qvalue]

 클라이언트가 우선적으로 받아들이는 미디어 형을 명시한다. 여러 개의 미디어 형을 쉼표로 구분해서 나열할 수있다. 옵션인 qbalue는 받는 형태의 수준 순서로써 0 에서 1까지 나타낸다.


Accept-Charaset

 Accept-Charset: character_set [;q=qvalue]

 클라이언트가 우선하는 문자 세트를 지정한다. 여러 개의 문자 세트는 쉼표로 구분하여 나열한다. 옵션인 qvalue는 우선하지 않는 문자 세트의 수준 순서로 0 에서 1까지 나타낸다.


Accept-Encoding

 Accept-Encoding:  endoding_types

 compress 또는 gzip과 같은 클라이언트가 받아들일 수 있는 인코딩 방식을 지정한다.
여러 개의 인코딩 방식을 쉼표로 구분하여 나열한다.
만약 인코딩 형태를 지정하지 않으면 어떤 형태도 클라이언트에게 받아들여지지 않는다.


Accept-Language

Accept-Language: language [; q=qvalue]

 클라이언트가 우선적으로 지원하는 언어를 지정한다.
쉼표로 구분해서 여러 개의 언어를 지정할 수 있다.
옵션인 qvalue는 우선하지 않는 언어 순서로 0에서 1까지로 나타낸다.
 언어는 두문자로 축약해서 쓴다.(예)en, fr, kr 등


Authorization

Authorization: scheme credentials

 URI에 클라이언트가 데이터에 접근할 수 있는 권한을 제공한다. 요청된 문서가 권한을 요구하면 서버는 요구된 권한의 유형을 설명하는 WWW-Authenticate헤더를 반환한다. 그리고 나서 클라이언트는 적당한 권한 정보를 요청할 때마다 이것을 반복한다.

 HTTP에 일반적으로 사용된 권한 계획은 BASIC이며, BASIC방식에서는 권한을 인증하기 위해 base64로 인코딩된 username:password 형태를 따른다. 예를 들면, 사용 자명이 ‘webmaster’ 이고 패스워드가‘zrma4v’라면 authorization 헤더는 이것을 다음과 같이 보이게 한다.

Authorization: BASIC d2VibWFzdGVyOnpycW1hNHY=

이것의 디코딩 값은 webmaster : zrma4v이다


Cookie

Cookie: name=value

 URL을 위해 저장된 정보의 이름=값을 포함한다. 여러 개의 쿠키는 세미콜론으로 구분하여 나열된다. 넷스키이프도 쿠키를 지원한다. HTTP표준에는 포함되어 있지 않다.


From

From: email_address

 현재 사용하고 있는 클라이언트의 전자 우편 주소를 반환한다.


Host

Host: hostname[:port]

 호스트의 이름과 URI의 port번호를 지정한다. 클라이언트는 HTTP1.1에 반드시 이정보를 공급해야 하는데 이것은 여러 개의 호스트명이 갖는 애매한 URL을 쉽게 구별하는 데 도움이 된다.


If-Modified-Since

If-Modified-Since: date

 헤더의 값으로 주어진 날짜 이후 수정이 되었다면 URI데이터를 보낸다는 것을 명시한다. 이것은 클라이언트 측 캐시에 대해 유용하다. 만약 문서가 수정되지 않았다면 서버는 304코드를 반환하여 클라이언트에게 로컬에 있는 사본을 보여준다. 단 지정한 날짜는 Date헤더 아래에 설명된 형식을 따라야 한다.


If-Match

If-Match: entity_tag

 조건적으로 요청하는 것으로 주어진 ENTITY태그와 매치된다. *기호는 어떠한 ENTITY와도 매치되며, ENTITY가 존재해야만 트랜잭션이 계속된다.


If-None-Match

If-None-Match: entity_tag

조건적으로 요청하는 것으로 주어진 엔티티 태그와 어떠한 것도 매치되지 않는다.

*기호는 어떠한 엔티티와도 매치되며 엔티티가 존재하지 않아야만 트랜잭션이 계속된다.


If-Range

If-Range: entity_tag | date

 조건적으로 요청하는 것으로 실체의 일부가 변하지 않았는데 찾을 수 없고, 그것이 실체의 전부를 나타낸다. Range헤더와 함께 사용되어야 한다. ENTITY 태그나 날짜 둘 중 하나는 이미 주어진 실체의 일부분을 식별할 수 있다.


If-Unmodified-Since

If-Unmodified-Since: date

 주어진 날짜 이후로 수정되지 않았다면 URI데이터를 보내도록 지정한다. 지정한 날짜는 Date헤더 아래에 설명된 형식을 따라야 한다.


Max-Forwards

Max-Forwards: n

 요청을 전달한 프록시나 게이트 웨이의 개수를 제한한다. TRACE 메소드와 함께 사용하여 디버깅에 유용하며, 무한 루프를 피할 수 있다.


Proxy-Authorization

Proxy-Authorization: credentials

 클라이언트가 권한을 요구하는 프록시에 대해 자신을 식별하기 위해 사용한다.


Range

Range: bytes= n-m

 문서가 요구하는 부분적인 범위를 명시한다. 여러 개의 범위는 세미콜론으로 구분하여 나열한다. 만약 쉼표로 구별된 바이트 범위인 첫번째 숫자가 없다면 범위는 문서의 끝에서부터 없어진다고 가정한다. 만일 두번째 숫자가 없다면 범위는 끝에서 n바이트까지이다. 첫번째 바이트는 0바이트이다.


Referer

Referer: url

 요청된 URI를 참조하는 문서의 URI에 전달한다.


User-Agent

User-Agent: string

클라이언트 프로그램에 대한 식별 가능한 정보를 준다.



서버 응답 헤더


Accept-Ranges

Accept-Ranges: bytes|none

 URI를 위한 요청 범위의 승인을 나타내며 또는 받아들인 요청의 범위가 없을 경우 none을 지정한다. 범위의 단위는 byte이다.


Age

Age: seconds

seconds에 문서의 나이를 지시한다.


Proxy-Authenticate

Proxy-Authenticate: scheme realm

 확인 계획과 이URI와 그 현재의 연결에 대해 프록시에 대한 적용할 수 있는 매개변수를 나타낸다. 응답으로 407을 사용한다.


Retry-After

Retry-After: dateseconds

응답코드 5 0 3(Service Uncavailable)과 함께 사용된다. 정수나GMT 날짜와 시간(D a t e헤더 형태를 설명)둘 중 하나를 포함한다. 만일 값이 정수이면 seconds의 숫자로 해석하여 요청이 발생한 후 지정한 seconds만큼 기다린다.

예) Retry-After: 3500

Retry-After: Fri, 17 May 1999 12:24:17 GMT


Server

Server: string

서버의 이름과 버전 번호를 포함한다.

예) Server: NCSA/1.3


Set-Cookie

Set-Cookie: name=value [; option ]

U R L을 위해 보유한 정보의 이름/값 쌍을 포함한다. 넷스케이프 쿠키를 지원하기 위

한 것으로 HTTP 표준에는 포함되어 있지 않다.

옵션의 예)

expires=date

지정된 날짜가 지나면 쿠키가 유효하지 않게 된다.

path=pathname

쿠키가 유효한URL 범위

domain=domain_name

쿠키가 유효한 도메인명의 범위

secure

보안이 적용된 연결에서만 쿠키를 반환한다.


Vary

Vary: *| headers

엔티티가 다중 자원을 가지고 있으므로 요청한 헤더를 지정한 목록이 상황에 따라 변할 수 있다는것을 지정한다. 여러 개의 헤더는 세미콜론으로 구분하여 나열한다.

*기호는 요청한 헤더가 반환되는 문서에 영향을 미칠 수도 있는 다른 요인을 의미 한다.


Warning

Warning: code host [ :port] string

 프록시 캐싱에서 사용하기 위한 상태 코드의 추가 정보를 나타낸다. host필드는 이름 또는 서버 호스트의 익명을 포함하며, 선택적으로 포트 번호를 포함한다. 두 자리 경고 코드와 그것을 설명하는 문자열은 다음과 같다.

10 Response is stale

응답 데이터는 오래된 것으로 알려져 있다.

11 Revalidation failed

응답 데이터는 오래된 것으로 알려져 있으며 그 이유는 프록시가 데이터를 재검증하는 데 실패했기 때문이다.

12 Disconnected operation

캐시가 네트워크로부터 연결되지 않았다.

13 Heuristic expiration

데이터는2 4시간 이상 된 것이며, 캐시는2 4시간 보다 더 이전에 만들어진 것을 사용한다.

14 Transformation applied

프록시는Content-Encoding이나 Content-Type 헤더에 명시한 대로 인코딩이나 문서의 미디어 형을 변경시켰다.

99 Miscellaneous warning

임의의 정보가 클라이언트에게 접속되거나 나타났다.


WWW-Authenticate

WWW-Authenticate: scheme realm

 401(Unauthorized) 응답 코드와 함께 사용된다. 요청된 URI에서 클라이언트로부터 요청된 권한의 범위와 권한의 계획을 명시한다. 많은 다른 권한 범위는 서버에 존재한다. 일반적인 권한 계획은 BASIC이며 사용자명과 패스워드를 요구한다.

예) WWW-Authenticate: BASIC realm="admin"



ENTITY Header

Allow

Allow: methods

지정한 URI에서 허락하는 메소드를 쉼표로 구분된 목록을 포함한다. 요청된 정보에 유용한 메소드들을 클라이언트에게 알리는 코드 405(Method Not Allow)를 서버 응답에 사용한다.


Content-Encoding

Content-Encoding: encoding_schemes

엔티티 몸체를 전송할 때 사용할 인코딩 체계(scheme)를 지정한다. 값으로는gzip(또는 x-gzip)과 compress(또는 x-compress)를 사용할 수 있다. 만약 여러 개의 인코딩 체계(쉼표로 구별한 목록 안에)가 지정되어 있다면 소스 데이터에 적용한 명령을 나열해야 한다.


Content-Language

Content-Language: languages

전송될 엔티티 몸체에서 의도하는 언어를 지정한다. 언어는 두 자리 숫자 코드로 나타낸다.(예, en, kr 등)


Content-Length

Content-Length: n

이 헤더는 전송된 엔티티 몸체가 가진 데이터의 길이(byte 단위로)를 지정한다. 어떤요청은 동적인 성질을 가질 수 있기 때문에 컨텐츠의 길이를 알 수 없을 경우도 있고, 이 경우에는 이 헤더를 제거한다.


Content-Location

Content-Location: uri

엔티티에 대한 URI를 제공한다. 이 경우 문서가 독립적으로 접근 가능한 위치에 다중 엔티티를 갖고 있을 수 있다. U R I는 절대 혹은 상대 경로로 지정할 수 있다.


Content-MD5

Content-MD5: digest

인수한 메시지의 완전성을 검사하기 위해 엔티티의 MD5 다이제스트를 제공한다.


Content-Range

Content-Range: bytes n-m/length

수반하는 엔티티 몸체 일부에 삽입되며, 전체 엔티티 몸체의 크기를 지정한다.

예)Content-Range: bytes 6143-7166/15339


Content-Transfer-Encoding

Content-Transfer-Encoding: scheme

네트워크에 전달되는 엔티티 몸체에 적용되는 어떤 변화를 지정한다. 일반적인 값으로는 7bit, 8bit, binary, base64, 그리고 quoted-printable이 있다.


Content-Type

Content-Type: type/subtype

엔티티 몸체의 미디어 형과 부미디어 형을 설명한다. 이는 같은 값을 클라이언트의Accept 헤더로 사용하며, 서버는 그 클라이언트가 우선적으로 지원하는 포맷 양식에 따르는 미디어 형을 반환해야 한다.


ETag

ETag: entity_tag

If-Match와 If-None-Match 요청 헤더를 위한 태그를 정의한다.


Expires

Expires: date

문서가 변경될 수도 있을 때의 시간 또는 그것의 정보가 유효하지 않을 때의 시간을명시한다. 그 시간 이후, 문서는 변경 또는 삭제되거나 그렇지 않을 수 있다. 값은 Date 헤더에서 설명한 것과 같은 유효한 형태의 날짜와 시간이다.


Last-Modified

Last-Modified: date

지정한 URI가 마지막으로 변경된 때를 명시한다. 값은Date 헤더에 설명한 것과 같은 유효한 형태의 날짜와 시간이다.


Location

Location: uri

문서의 새로운 위치를 지정한다. 일반적으로 응답 코드 201(Created), 301(MovedPerm anently), 또는302(Moved Temporarily)와 함께 사용된다. 주어진URI는 절대 주소로 지정해야 한다.


쿠키

 

항구적인 상태에 있는 클라이언트측 쿠키는 넷스케이프 네비게이터에서 소개한 것으로, 서버가 클라이언트의 장치에서 클라이언트가 지정한 정보를 저장할 수 있게 하기 위한 것이다. 서버는 클라이언트에 의해 다시 특정한 페이지나 서버에 접근할 때 그 정보를 이용할 수 있다. 쿠키 작동 형태는 서버가 각 클라이언트에 보내는 페이지를 개별화할 수 있도록 해주거나 사이트의 다양한 페이지들을 브라우징할 때 클라이언트가 선택했던 것들을 기억할 수 있게 해준다. 따라서 서버측에서 복잡한 CGI나 데이터베이스 시스템을 사용하지 않아도 된다.

쿠키는 다음과 같은 방법으로 작동한다. CGI 프로그램은 새로운 사용자를 식별할 때,서버가 클라이언트의 입력에서 조금씩 모아둔 정보와 그 사용자에 대한 식별자를 포함에 부가 헤더를 추가한다. 이 헤더는 클라이언트의 쿠키 파일에 사용자의 쿠키정보를 추가하라고 쿠키를 사용할 수 있는 브라우저에 알린다. 그러면, 웹 브라우저 URL의 모든 요청은 기타 헤더의 요청에 그 쿠키 정보를 포함시킬 것이며, CGI 프로그램은 특정한 사용자에게 맞추어진 문서를 보여줄 때 이 정보를 사용한다.

쿠키는 클라이언트의 하드 드라이브에 저장되므로 정보는 웹 브라우저가 닫히고 다시 열어도 남아 있다.


Set-Cookie 응답 헤더

 

사용자가 처음으로 사이트나 페이지를 방문하면 쿠키가 생성된다. CGI 프로그램은 사용자 요청을 받으면 이전의 쿠키 정보를 검색한다. 만약 쿠키가 없다면 Set-Cookie 헤더를 포함하는 응답을 보낸다. 이 헤더에는 클라이언트에 대해 유지하고자 하는 정보를 담고 있는 이름/값 으로 포함되어 있다. 헤더에 다른 선택 필드들도 포함시킬 수 있다.

Set-Cookie 헤더는 다음과 같은 구문을 사용한다.

Set-Cookie: name=value; expires=date;

path=pathname; domain=domain-name; secure

여러 개의 Set-Cookie 헤더는 서버 응답에 포함될 수 있다. ‘이름=값’으로 이루어진쌍은 이 헤더에 요구되는 유일한 속성이며, 처음에 와야 한다. 그 다음 속성들은 순서 없이 사용할 수 있고 다음과 같이 정의한다.

name=value

이름과 값 모두에 세미콜론, 공백(space), 또는 탭(tab)을 포함하지 않는 문자열을 지정한다. 스크립트를 다룰 준비가 되는 한, 실체가 그 이름이나 값에서URL 인코딩과 같은 인코딩을 요구한다면 사용할 수 있다.

expires=date

이 속성으로 쿠키의 유효 기간이 끝나는 날짜를 설정한다. 날짜의 형식은 표준적인 방법을 따르지 않고 다음과 같이 지정한다.

Wednesday, 01-Sep-96 00:00:00 GMT

이 날짜가 지나면 쿠키의 유효성이 만료하여 웹 브라우저가 더 이상 쿠키를 보내지 않는다. 만료일 표시에는 G M T(Greenwich Mean Time)만 사용된다. 만료일을 지정하지 않으면 쿠키는 현재 세션에서만 사용된다.

path=pathname

path 속성은 쿠키가 유효한 URL의 범위를 제공한다. 예를 들어, 경로명을/ pub라고 설정하면 /pub에 있는 /pub/docs나 /pub/images와 같은 하위 수준의 URL에도 쿠키를 보낸다. ‘/’의 pathname을 나타낸다면 쿠키가 지원하는 사이트의 모든 URL에 쿠키를 사용할 것이라는 뜻이다. path 속성이 없다면 쿠키는 URL에 지원하는 곳에서만 유효하다는 것을 뜻한다.

domain=domain-name

이 속성은 쿠키가 반환되는 범위의 도메인 이름을 지정한 것이다. domain-name에는 적어도 두 개의 점(.)이 포함되어 있어야 한다. 예를 들면,  .naver.com이라는 값은 www.naver.com와 cafe.naver.com, 그리고 기타 다른 naver.com 도메인을 갖는 서버 전체를 포괄한다.

secure

이 속성은 보안이 되는 연결(SHTTP와 SSL을 통한)에서만 쿠키를 반환한다는 것을 뜻한다. 이 속성이 없으면 쿠키는 연결에 상관없이 항상 반환된다.

 



쿠키 요청 헤더

웹 브라우저는 매번 웹 페이지로 가서 U R L을 위해 저장된 쿠키에 대한 쿠키 파일이있는지 검사한다. 파일이 있으면 웹 브라우저는 요청에 쿠키의‘이름=값’쌍을 포함하는 Cookie 헤더를 포함시킨다.

Cookie: name1=value1;name2=value2;…

쿠키 파일 안에 반환된 쿠키가 여러 개의 항목으로 구성되어 있다면, 경로명 범위와도메인의 범위로 구성한다. 다음 헤더에 같은 사이트에 대해 두 개의 쿠키가 설정되어 있는 예이다.

Set-Cookie: AbcBook=book; path=/

Set-Cookie: AbcBook=Bitems; path=/books

브라우저가 /books 경로에 있는 사이트의 한 페이지를 요청하면, 그것을 반환한다.

Cookie: AbcBook=Bitems; AbcBook=Bitems

양쪽 항목이 같은 이름을 공유하지만, 그것은 별개의 쿠키이며, 양쪽 다 /books 같은 특정한 URL에 적용된다. 쿠키가 반환될 때, 웹 브라우저는 매치 여부를 따져 가장 정확한 경로명이나 도메인을 먼저 반환한다.

Cookie 헤더를 만나면 많은 서버들은 HTTP_COOKIE 환경 변수를 사용하는CGI 프로

그램으로 헤더의 값을 전달한다.

 또한 쿠키들의 개수와 크기에 대한 제약이 있다.

- 클라이언트는 합쳐서 적어도 3 0 0개의 쿠키를 지원할 수 있어야 한다. 서버는 사

용자가 더 이상 저장하는 것을 기대해서는 안 된다.

- 각 쿠키(이름과 값을 조합해서)의 크기는4 K B를 넘어서는 안 된다.

- 각각의 서버 또는 도메인은 최대 2 0개의 쿠키를 지원한다. 이 제약 사항은 각기 지정한 서버 또는 도메인에 적용되므로 www.naver.com에서 20개를 저장할 수 있고 cafe.naver.com에서도 20개가 가능하며, 쿠키들의 이름 전체를 각기 명시 할 수 있다.


하지만 문제는 헤더와 관련된 프록시 서버에서 일어난다. 페이지가 캐시되거나 수정되지 않았을지라도, Set-Cookie와 Cookie 헤더 모두는 프록시를 통해 전파되어야 한다(If-Modified-Since 조건에 따라서). 또한 Set-Cookie 헤더는 프록시에 의해 결코 캐시 되어서는 안 된다.



상태 코드

 

 위에서 언급한 서버의 응답에서 요청한 상태를 표시하는 세자리 숫자와 상태를 설명하는 짧은 문구를 포함하는 것을 다음과 같이 나눌 수 있다.

 

코드 범위
 응답의 의미
 
100 ~ 199

200 ~ 299

300 ~ 399

400 ~ 499

500 ~ 599
 정보

클라이언트의 요청이 성공적이다.

다른 동작이 더 필요해 클라이언트의 요청을 리다이렉트 했다.

클라이언트의 요청이 불완전하다.

서버오류
 


100 ~199 정보 응답

100 Continue

요청된 초기 부분은 접수되었고 클라이언트는 계속해서 요청할 수 있다.

101 Switching Protocols

서버는 Upgrade 헤더 필드에 명시된 프로토콜로 교환하기 위한 클라이언트 요청

에 따르고 있다.


200~299 클라이언트 요청의 성공 응답

200-299의 범위에 있는 응답은 클라이언트의 요청이 성공적이었다는 것을 의미한다.

200 OK

클라이언트의요청이성공적이였으며, 서버는요청한데이터를포함하여응답한다.

201 Created

이 상태 코드는 새로운 URI가 만들어질 때마다 사용된다. 결과 코드와 함께 새로

운 데이터가 위치한 곳을 지정하기 위해 Location 헤더가 서버에 의해 주어진다.

202 Accepted

요청은 받아들여 졌지만 즉시 실행되지는 않는다. 트랜잭션에 대한 심층 정보가 서버 응답의 엔티티 몸체에서 주어지기도 한다. 주의할 점은 요청이 정당한 것처럼 보였을 수도 있지만 서버가 요청을 실제로 승인하리라는 보장은 없다는 것이다.

203 Non-Authoritative Information

엔티티 헤더에 있는 정보는 원래 서버가 아니라 로컬이나 다른 서버로부터 온다.

204 No Content

이 코드는 응답할 때 주어지는 헤더이다. 그러나 응답된 실제 내용은 없다는 뜻이다. 이런 응답을 받는 이유는 웹 브라우저가 문서를 보기 위해 갱신을 하지 않았기 때문이다. 이미지맵에서 클라이언트가 이미지의 영역 중 사용하지 않거나 공백인 부분을 클릭했을 때를 처리할 때 유용하다.

205 Reset Content

웹 브라우저가 추가적인 입력을 위해 사용된 트랜잭션을 지우는 것이다. CGI 애플리케이션에서 데이터를 입력받을 때 적합하다.

206 Partial Content

서버가 요청된 크기의 부분 데이터를 반환하고 있다. Range 헤더 지정 요청에 응답하는 데 이용된다. 서버는 반드시 Content-Range 헤더와 응답에 포함된 범위를 지정해야 한다.


300~399 리다이렉션

300~399 범위에 있는 응답 코드는 요청이 수행되지 않았다는 것을 나타내며, 클라이언트는 요청을 성공시키기 위해 다른 행위가 필요하다는 것을 나타낸다.

300 Multiple Choices

요청된 URI는 하나 이상의 리소스를 참조한다. 예를 들면, URI는 여러 개의 언어로 변환된 문서를 참조할 수 있다. 서버에 의해 반환된 엔티티 몸체는 올바른 리소스를선택하는 방법에 대한좀 더 특정한 데이터의 목록을 가지고 있을수 있다.

301 Moved Permanently

요청된 URI는 더 이상 사용되지 않으며 요청에서 지정한 연산은 수행되지 않았다. 요청된 문서를 위한 새로운 위치는 Location 헤더에 명시한다. 앞으로 요청될 모든 문서는 새로운 URI를 사용할 것이다.

302 Found

요청된 URI는 일시적으로 새로운 URI를 가진다. Location 헤더는 새로운 장소를 가리킨다. 만일 이것이 GET이나 HEAD 메소드에 대한 응답이라면 클라이언트는 응답을 받자마자 요청을 해결하기 위해 새로운 URI를 사용해야 한다.

303 See Other

요청된 URI는 다른 URI(Location 헤더에 명시한)에서 찾을 수 있으며, 리소스는 GET 메소드로 구할 수 있다.

304 Not Modified

이것은 If-Modified-Since 헤더에 대한 응답 코드로써 지정한 날짜 이래로 수정되지 않았다. 엔티티 몸체는 보내지 않으며, 클라이언트는 자신의 로컬 사본을 사용해야 한다.

305 Use Proxy

요청된 URI는 Location 헤더에 있는 프록시를 통해서만 접근할 수 있다.

307 Temporary Redirect

요청된 URI가 일시적으로 옮겨졌다. Location 헤더가 새로운 장소를 가리킨다. 이 상태 코드를 받는 즉시, 클라이언트는 요청을 해결하기 위해 새로운 URI를 사용해야 하지만, 앞으로 모든 요청들은 이전의 URI를 사용할 것이다.


400~499 클라이언트 요청의 불안전 응답

400~499 범위에 있는 응답 코드는 클라이언트의 요청이 불안전하며, 클라이언트가 요

청을 성공시키려면 다른 정보가 필요하다는 것을 나타낸다.

400 Bad Request

이 응답 코드는 클라이언트의 요청에 문법적인 오류가 있는 것을 서버가 알아냈다는 것을 의미한다.

401 Unauthorized

이 결과 코드는 WWW-Authenticate 헤더와 함께 그 요청에 적당한 권한이 부족했다는 것을 나타내기 위해 주어지며, 이 URI를 다시 요구하면 클라이언트는 적당한 권한으로 접속해야 한다.

402 Payment Required

이 코드는 아직 HTTP로 구현되지 않았다. 하지만 언젠가는 서버의 문서를 받아 보기 위해 지불이 필요하다는 것을 나타낸다.

403 Forbidden

이 요청은 서버가 클라이언트를 가리키고 싶어하지 않아(또는 아무 이유 없이) 거부되었다.

404 Not Found

지정한 URI에 문서가 존재하지 않는다.

405 Method Not Allowed

이 코드는 Allow 헤더와 함께 클라이언트가 사용한 메소드가 이 URI에 대해 지원되지 않는다는 의미이다.

406 Not Acceptable

클라이언트가 지정한 URI는 존재하지만 클라이언트가 원하는 형식이 아니다. 이 코드와 함께 서버는 Content-Language, Content-Encoding, 그리고 Content-Type 헤더를 제공한다.

407 Proxy Authentication Required

프록시 서버는 요청된 문서를 보여주기 전에 권한을 필요로 한다. Proxy-Authenticate헤더와 함께 사용한다.

408 Request Time-out

이 응답 코드는 클라이언트의 모든 요청이 지정한 시간(일반적으로 서버의 구성할때 명시한다) 동안 처리되지 않았음을 뜻하며, 서버는 네트워크 연결을 끊는다.

409 Conflict

이 코드는 다른 요청이나 서버의 구성과 충돌이 있음을 나타낸다. 충돌에대한 정보는 응답되는 데이터의 일부로 반환된다.

410 Gone

이 코드는 요청된 URI가 더 이상 존재하지 않고, 서버에서 완전히 사라졌음을 나타낸다.

411 Length Required

서버는Content-Length 헤더가 없는 요청을 받아들이지 않는다.

412 Precondition Failed

하나 이상의 If…헤더에 의해 명시된 조건에 의해 요청을 평가하여 false 값을 가지는 경우이다.

413 Request Entity Too Large

서버는 실제 본문이 너무 커서 요청을 처리할 수 없다.

414 Request-URI Too Long

서버는 요청된 URI가 너무 커서 요청을 처리할 수 없다.

415 Unsupported Media Type

서버는 실제 본문이 지원되는 않는 형식이라 처리할 수 없다.

416 Requested Range Not Satisfiable

서버는 목표에 대해 어떤 유효한 값도 포함하지 않은 Range 헤더를 찾아냈다. 추

가로 If-Range 헤더는 없어졌다.

417 Expectation Failed

Expect 헤더에서 명시된 조건은 만족될 수 없다.


500~599서버 오류

500~599 범위에 있는 응답 코드는 서버가 오류를 만나거나, 클라이언트의 요청을 수행할 수 없음을 나타낸다.

500 Internal Server Error

이 코드는 서버의 일부(예를 들면, CGI 프로그램)가 멈추었거나 설정에서 오류가 났음을 나타낸다.

501 Not Implemented

이 코드는 클라이언트의 요청된 행위가 서버에서 수행할 수 없음을 나타낸다.

502 Bad Gateway

이 코드는 서버(또는 프록시)가 다른 서버(또는 프록시)로부터의 응답이 적절하지 않음을 나타낸다.

503 Service Unavailable

이 코드는 서비스를 일시적으로 제공할 수 없으나, 앞으로 복구된다는 의미이다.만일 서버가 복구될 때를 알기 위해서는 Retry-After 헤더도 함께 제공해야 한다.

504 Gateway Time-out

이 응답은 게이트웨이나 프록시의 시간이 경과했다는 것만 빼고는 408(Request Time-out)과 같다.

505 HTTP Version not supported

서버가 요청에 사용된HTTP 프로토콜 버전을 지원하지 않는다.

'이론 > 데이터통신' 카테고리의 다른 글

3way handshake  (0) 2015.10.11
http header  (0) 2015.10.11
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

Tag HTTP

댓글을 달아 주세요

01 데이터 통신

 

1) 데이터 통신

 

데이터 통신은 컴퓨터의 발달을 배경으로 하여 생겨난 것으로, 컴퓨터와 각종 통신 기기 사이에서 디지털 형태로 표현된 2진 정보를 송수신 하는 것을 말한다.

 

* 데이터 통신 = 데이터 전송 기술 + 데이터 처리 기술

 

2) 정보통신

 

정보통신은 컴퓨터와 통신 기술의 결합에 의해 통신처리 기능과 정보처리기능을 합한것

 

3) 통신의 3요소

 

1. 정보원

2. 수신원

3. 전송 매체

 

02 데이터 통신 시스템의 기본 구성

 

1) 데이터 통신 시스템의 기본 구성

 

 

 

- 단말장치

 

단말장치는 데이터 통신 시스템과 외부 사용자의 접속점에 위치하여 최종적으로 데이터를 입*출력하는 장치이다.

 

- 신호 변환장치

 

신호 변환장치는 컴퓨터나 단말장치의 데이터를 통신 회선에 적합한 신호로 변경하거나, 통신 회선의 신호를 컴퓨터나 단말장치에 적합한 데이터로 변경하는 신호 변환 기능을 수행한다.

 

- 통신회선

 

통신 회선은 단말장치에 입력된 데이터 또는 컴퓨터에서 처리된 결과가 실질적으로 전송되는 선로이다.

 

- 통신 제어장치

 

통신 제어장치는 데이터 전송 회선과 주 컴퓨터를 연결하는 장치이다.

 

- 통신 제어 프로그램

 

통신 제어 프로그램은 데이터 전송 회선과 통신 제어장치를 이용하여 컴퓨터와 단말장치 간의 데이터를 송수신하기 위해 사용되는 프로그램을 총칭합니다.

 

데이터 송*수신 : 컴퓨터와 단말장치에 내장된 통신 소프트웨어를 통해 정확한 데이터 송수신 수행

통신 하드웨어 제어 : 통신 하드웨어를 제어하는 드라이버를 통한 제어 수행

이용자 인터페이스 제어 : 사용자에게 데이터의 입*출력에 관한 절차를 제공하여, 사용자로 하여금 통신 관련 동작을 지시할 수 있게 하는 기능

 

 

 

 

03 통신회선

 

 

1) 유선매채

 

- 꼬임선(Twisted Pair Wire) 

 

꼬임선은 전기적 간섭 현상을 줄이기 위해 균일하게 서로 감겨있는 형태의 케이블이다.

 

* 가격이 저렴하고, 설치가 간편하다

* 거리, 대역폭, 데이터 전송률 면에서 제약이 많다.

* 다른 전기적 신호의 간섭이나 잡음에 영향을 받기가 쉽다.

* 최근에는 100Mbps이상의 전송속도가 가능한 꼬임선이 개발되어 짧은 거리에서는 고속전송이 가능하다

 

 

- 동축 케이블(Coaxial Cable)

 

동축 케이블은 중심 도체를 플라스틱 절연체를 이용하여 감싸고, 이를 다시 외부 도체를 이용하여 감싸는 형태로 구성된다.

 

* 주파수 범위가 넓어서 데이터 전송률이 높다.

* 꼬임선에 비해 외부 간섭과 누화의 영향이 적다.

* 신호의 감쇠 현상을 막기위해 일정 간격마다 중계기를 설치해야 한다,

(아날로그 전송에서는 증폭기, 디지털 전송에서는 리피터를 이용하여 새로운 신호 생성)

* 아날로그와 디지털 신호 전송에 모두 사용한다.

* 고주파 특성이 양호하며, 광대역 전송에 적합하다.

* CATV, 근거리 통신망, 장거리 전화 등에 다양하게 사용된다.

 

- 광섬유 케이블(Optical Fiber Cable)

 

유리를 원료로 하여 제작된 가느다란 광섬유를 여러 가닥 묶어서 케이블의 형태로 만든것, 광 케이블

 

* 데이터를 전기 신호가 아닌 빛으로 바꾸어 빛의 전반사 원리를 이용하여 전송.

* 가늘고 가벼워 취급이 용이하며, 도청하기 어려워 보안성이 뛰어나다

* 넓은 대역폭을 제공함으로 데이터의 전송률이 높고, 대용량, 장거리 전송이 가능하다.

* 감쇠율이 적어 리피터의 설치 간격이 넓으므로 리피터의 소요가 적다.

* 설치 비용이 비싸지만 리피터의 소요가 적고, 대용량 전송이 가능하여 단위 비용은 저렴하다.

 

2) 무선 매체

 

- 라디오 파

 

라디오파는 통신 장비의 이동이 빈번하고 통신 회선을 이용하기 어려운 지역 간의 통신에 이용하도록 무선 주파수를 사용하는 방식이다.

 

* 주로 장거리 통신 서비스에 이용되며, 동축 케이블이나 광섬유 케이블의 대용으로 TV나 휴대폰 등의 음성 전송에 이용된다.

* 감쇠율이 적어 동축 케이블에 비해 중계기가 훨씬 적게 든다.

 

- 위성 마이크로파

 

위성 마이크로파는 지상에서 쏘아올린 마이크로 주파수를 통신 위성을 통해 변환, 증폭한 후 다른 주파수로 지상에 송신하는 방식으로, 위성 통신에 사용된다.

 

* 위성 통신 시스템은 통신 위성, 지구국, 채널로 구성된다.

* 대역폭이 넓어 고속, 대용량 통신이 가능하고, 통신 비용이 저렴하다.

* 오류율이 적어 고품질의 정보 전송이 가능하다.

* 한 대의 통신 위성은 지구 표면의 약 1/3 이상을 커버할 수 있으므로, 통신 범위가 넓다.

* 다중 접속 방식 : 위성 통신 시스템에서는 하나의 통신 위성에 여러 개의 지구국이 접속하여 사용하므로, 통신 위성을 공동으로 사용하기 위한 다중 접속 방식이 필요하다. 다음은 다중 접속 방식에 대한 설명이다.

 

- FDMA : 주파수 대역을 일정 간격으로 분할하는 방식

- TDMA : 사용시간을 분할하는 방식

- CDMA : 주파수나 시간을 모두 공유하면서 각 데이터에 특별한 코드를 부여하는 방식

 

 

02 통신 제어장치

 

통신 제어장치는 데이터 전송 회선과 주컴퓨터 사이에 위치하여, 컴퓨터가 데이터 처리에 전념할 수 있도록 컴퓨터를 대신해 데이터 전송에 관한 전반적인 제어 기능을 수행한다.

 

1) 기능

 

- 전송제어

- 동기 및 오류 제어

- 그 밖의 기능

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

01 파일과 파일시스템

 

1) 파일디스크립터

 

파일을 관리하기 위한 시스템이 필요로 하는 파일에 대한 정보를 갖고 있는 제어 블록을 의미하며, 파일 제어 블록이라고도 한다.

 

* 파일 디스크립터는 파일마다 독립적으로 존재하며, 시스템에 따라 다른 구조를 가질 수 있다.

 

* 보통 파일 디스크립터는 보조기억장치 내에 저장되어 있다가 해당 파일이 Open 될때 주기억장치로 옮겨진다.

 

 

 

02 파일 구조

 

1) 순차파일

 

순차파일은 레코드를 논리적인 처리 순서에 따라 연속된 물리적 저장공간에 기록하는 것을 의미한다.

 

순차 접근 방식이라고도 한다.

 

장점 : 파일의 구성이 용이하고, 순차적으로 읽을 수 있으므로 기억공간의 이용효율이 높다.

 

단점 : 파일에 새로운 레코드를 삽입하거나 삭제하는 경우 파일 전체를 복사한 후 수행해야 하므로 시간이 많이 걸린다.

 

파일의 특정 레코드를 검색하려면 순차적으로 모든 파일을 비교하면서 검색해야 하므로 검색 효율이 낮다.

 

 

2) 직접 파일

 

직접 파일은 파일을 구성하는 레코드를 임의의 물리적 저장공간에 기록하는 것으로 직접 접근 방식이라고도 한다.

 

* 레코드에 특정 기준으로 키가 할당되며, 해싱함수를 이용하여 이 키에 대한 보조기억장치의 물리적 상대 레코드 주소를 계산한 후 해당하는 주소에 레코드를 저장한다.

 

* 레코드는 해싱 함수에 의해 계산된 물리적 주소를 통해 접근할 수 있다.

 

3) 색인 순차 파일

 

* 색인을 이용한 순차적인 접근 방법을 제공하여 색인 순차 접근 방식이라고도 한다.

 

* 각 레코드를 키 값 순으로 논리적으로 저장하고, 시스템은 각 레코드의 실제 주소가 저장된 색인을 관리한다.

 

* 레코드를 참조하려면 색인을 탐색한 후 색인이 가리키는 포인터를 사용하여 참조할 수 있다.

 

기본영역, 색인 영역, 오버플로 영역

 

장점 - 순차처리와 임의처리 모두 가능

 

단점 - 색인 영역이나 오버플로 영역을 설정해야 하므로 기억공간이 필요하다.

 

 

02 디렉터리의 구조

 

1) 트리 디렉터리 구조

 

트리 디렉터리는 하나의 루트 디렉터리와 여러 개의 종속 디렉터리로 구성된 구조이다.

 

2) 비순환 그래프 디렉터리 구조

 

비순환 그래프 디렉터리는 하위 파일이나 하위 디렉터리를 공동으로 사용할 수 있는 것으로, 사이클이 허용되지 않는 구조이다.

 

* 디스크 공간을 절약할 수 있다.

* 하나의 파일이나 디렉터리가 여러 개의 경로 이름을 가질 수 있다.

* 디렉터리 구조가 복잡하고, 공유된 하나의 파일을 탐색할 경우 다른 경로로 두 번 이상 찾아갈 수 있으므로 시스템 성능이 저하될 수 있다.

* 공유된 파일을 삭제할 경우 고아 포인터가 발생할 수 있다.

 

3) 일반적인 그래프 디렉터리 구조

 

일반적인 그래프 디렉터리는 트리 구조에 링크를 첨가시켜 순환(cycle)을 허용하는 그래프 구조이다.

 

* 디렉터리와 파일 공유에 완전한 융통성이 있다.

* 탐색 알고리즘이 간단하여, 파일과 디렉터리를 액세스하기가 쉽다.

 

 

 

03 디스크 공간 할당 방법

 

1) 연속할당

 

연속 할당은 파일을 디스크의 연속된 기억공간에 할당하는 방법으로, 생성되는 파일 크기만큼의 공간이 있어야 한다.

 

* 논리적으로 연속된 레코드들이 물리적으로 인접한 공간에 저장되기 때문에 접근 시간이 빠르다.

* 디렉터리는 파일의 시작 주소와 길이에 대한 정보만 가지고 있으므로 디렉터리가 단순하고, 관리 및 구현이 용이하다.

* 파일 크기에 알맞은 연속 공간이 없을 경우 파일이 생성되지 않는다.

* 파일의 생성과 삭제가 반복되면서 단편화가 발생한다.

* 단편화를 줄이기 위해 재배치에 의한 주기적인 압축이 필요하다.

 

 

2) 불연속 할당

 

2-1) 섹터 단위 할당

 

* 섹터 단위 할당은 하나의 파일이 디스크의 섹터 단위로 분산되어 할당되는 방법으로 하나의 파일에 속하는 섹터들이 연결리스트로 구성되어 있다.

 

* 하나의 파일에 속하는 각각의 섹터는 연결을 위해 다음 내용이 있는 곳의 포인터를 가지고 있다.

 

* 디렉터리는 파일의 시작과 마지막 주소에 대한 정보만 가지고 있다.

 

* 섹터 단위로 저장되므로 디스크의 단편화가 발생되지 않고, 디스크 압축이 불필요하다.

 

* 파일 생성시 파일 크기를 알 필요가 없으며, 파일 크기만큼의 연속된 공간이 없어도 저장이 가능하다.

 

 

 

2-2) 블록 단위 할당

 

블록 단위 할당은 하나의 파일이 연속된 여러 개의 섹터를 묶은 블록 단위로 할당되는 방법이며 블록 체인 할당, 색인 블록 체인 할당, 블록 지향 파일 사상 기법이다.

 

- 블록 체인 기법

 

 

 

* 블록 체인 기법은 섹터 단위 할당 기법과 비슷하나 할당 단위를 블록 단위로 구성하는 방법이다.

* 하나의 블록은 여러 개의 섹터로 구성되어 있다.

* 디렉터리는 파일의 첫 번째 블록을 가리키는 포인터를 가지고 있다.

* 하나의 블록은 데이터와 다음 블록을 가리키는 포인터로 구성되어 있다.

 

- 색인 블록 체인 기법

 

* 색인 블록 체인 기법은 파일마다 색인 블록을 두고, 파일이 할당된 블록의 모든 포인터를 이 색인 블록에 모아 둠으로써 직접 접근을 가능하게 한 방법이다.

 

* 색인 블록 하나로 파일을 전부 나타낼 수 없는 경우 여러 개의 연속된 색인 블록을 서로 링크하여 사용할 수 있다.

 

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

01 기억장치 관리 개요

 

 

1) 기억장치 계층 구조

 

레지스터 <- 캐시 기억장치 <- 주기억 장치 <- 보조기억 장치

 

2) 기억장치의 관리 전략

 

- 반입(Fetch) 전략

 

보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략이다.

 

요구 반입 : 실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법

예상 반입 : 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 에상하여 적재

 

- 배치전략

 

최초적합(첫 번째 분할 영역에 배치), 최적 적합(빈 영역중에 단편화를 가장 작게 남기는 분할 영역에 배치)

, 최악적합(빈 영역중에 단편화를 가장 많이 남기는 분할영역에 배치)

 

- 교체전략

 

FIFO, OPT, LRU, LFU, NUR, SCR 등이 있다.

 

02 주기억장치 할당 기법

 

1) 연속할당 기법

 

프로그램을 주기억장치에 연속으로 할당하는 기법으로, 단일 분할 할당 기법과 다중 분할 할당 기법이 있다.

 

단일 분할 할당 기법 : 오버레이, 스와핑

다중 분할 할당 기법 : 고정 분할 할당 기법, 동적 분할 할당 기법

 

 

1-1) 단일 분할 할당

 

단일 분할 할당 기법은 주기억장치를 운영체제 영역과 사용자 영역으로 나누어 한 순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용하는 기법이다.

 

* 가장 단순한 기법

* 운영체제 영역과 사용자 영역을 구분하는 경계 레지스터가 사용된다.

* 초기에는 주기억장치보다 큰 사용자 프로그램은 실행할 수 없었으나 오버레이 기법을 사용하면서 이 문제가 해결되었다.

 

- 오버레이 기법

 

오버레이 기법은 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법이다.

 

* 보조기억장치에 저장된 하나의 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 차례로 주기억장치에 적재하여 프로그램을 실행한다.

 

* 프로그램이 실행되면서 주기억장치의 공간이 부족하면 주기억장치에 적재된 프로그램의 조각 중 불필요한 조각이 위치한 장소에 새로운 프로그램의 조각을 중첩(overlay)하여 적재한다.

 

* 프로그램을 여러 개의 조각으로 분할하는 작업은 프로그래머가 수행해야 하므로 프로그래머는 시스템 구조나 프로그램 구조를 알아야 한다.

 

- 스와핑 기법

 

스와핑 기법은 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법이다.

 

* 주기억장치에 있는 프로그램이 보조기억장치로 이동되는 것을 Swap Out, 보조기억장치에 있는 프로그램이 주기억장치로 이동되는 것을 Swap In이라고 한다.

 

* 가상메모리 페이징 기법으로 발전되었다.

 

1-2) 다중 분할 할당 기법

 

1-2-1) 정적할당

 

주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비상태 큐에서 준비중인 프로그램을 각 영역에 할당하여 수행하는 기법이다.

 

1-2-2) 동적할당

 

고정 분할 할당 기법의 단편화를 줄이기 위한 것으로, 미리 주기억장치를 분할해 놓는 것이 아니라 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분할 하는 기법이다.

 

 

2) 분산 할당 기법

 

프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당하는 기법으로, 페이징 기법과 세그먼테이션 기법으로 나눌 수 있다.(가상메모리기법)

 

 

03 주기억장치 관리 기법의 문제점과 해결 방법

 

1) 단편화

 

- 내부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 크기 때문에 프로그램이 할당된 후 사용되지 않고 남아 있는 빈 공간

 

- 외부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 작기 때문에 프로그램이 할당될 수 없어 사용되지 않고 빈공간으로 남아 있는 분할된 전체 영역

 

 

2) 단편화 해결방법

 

- 통합 기법

 

통합 기법은 주기억장치 내에 인접해 있는 단편화된 공간을 하나의 공간으로 통합하는 작업을 의미한다.

 

- 압축 기법

 

주기억장치 내에 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 가용 공간을 만드는 작업을 의미한다.

가비지 콜렉션이라고도 한다.

 

가비지 콜렉션후 분할영역 주소를 새롭게 지정해줘야 하는데, 이를 기억장소의 relocation이라고 한다.

 

 

04 가상메모리

 

 

1) 가상메모리

 

페이징 기법 - 프로그램을 동일한 크기로 나눈 단위를 페이지라 하며 이 페이지를 블록으로 사용하는 기법

 

세그먼테이션 기법 - 프로그램을 가변적인 크기로 나눈 단위를 세그먼트라 하며, 이 세그먼트를 블록으로 사용하는 기법

 

 

1-1) 페이징 기법

 

- 프로그램을 일정한 크기로 나눈 단위를 페이지라고 하고, 페이지 크기로 일정하게 나누어진 주기억장치의 단위를 페이지 프레임이라고 한다.

 

- 외부 단편호는 발생하지 않으나 내부 단편화는 발생할 수 있다.

 

- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 테이블이 필요하다.

- 페이지 맵 테이블 사용으로 비용이 증가되고, 처리속도가 감소한다.

 

가상주소 형식  =  페이지번호 + 변위값

 

 

실기억주소 형식  = 페이지 프레임 + 변위값

 

 

페이지 테이블 = 디스크 주소 + 페이지 프레임 번호 + 상태비트

 

주소 변환 순서

 

1. 가상주소의 페이지 번호에 해당하는 페이지 프레임 번호와 가상주소의 변위값을 이용하여 실기억주소를 만든다.

 

2. 만들어진 실기억주소를 이용하여 주기억장치를 액세스한다.

 

 

 

 

페이지 폴트 ?

 

페이지 폴트란 프로그램 실행 시 참조한 페이지가 주기억장치에 없는 현상을 의미한다.

페이지 폴트 현상이 발생하면 다음과정에 따라 페이지 부재 현상을 처리한다.

 

페이지 폴트 발생시 처리 순서

 

1. 운영체제에서 트랩 요청 - > 2. 사용자 레지스트리와 프로그램의 상태저장 -> 현재 사용가능한 페이지를 페이지 맵 테이블에서 검색

-> 가상기억장치에 있는 페이지를 주기억장치로 가져옴 -> 페이지 맵 테이블 갱신 -> 프로그램 상태를 불러와 계속 작업을 진행함

 

 

1-2) 세그먼테이션 기법

 

* 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법이다.

 

* 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트라고 하며, 각 세그먼트는 고유한 이름과 크기를 갖는다.

 

* 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법이다.

 

* 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블이 필요하다.

 

 

세그먼테이션 기법의 일반적인 주소 변환

 

 

세그먼트 + 페이징

 

 

 

 

05 페이지 교체 알고리즘

 

1) OPT

 

OPT는 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법이다. 미래예측. 

 

2) FIFO

 

FIFO는 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법이다.

 

3) LRU

 

LRU는 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다.

 

4) LFU 

 

LFU는 사용 빈도가 가장 적은 페이지를 교체하는 기법이다.

 

5) NUR

 

NUR은 LRU와 비슷한 알고리즘으로, 최근에 사용하지 않은 페이지를 교체하는 기법이다.

 

NUR은 참조 비트와 변형 비트가 필요한 교체 알고리즘이다. NUR 하면 참조 비트와 변형 비트를 기억하고, 참조 비트와 변형 비트에 따른 교체 우선순위를 기억하자.

 

참조 비트 : 페이지가 호출되지 않았을 때는 0, 호출되었을 때는 1로 지정된다.

변형 비트 : 페이지 내용이 변경되지 않았을 때는 0, 변경되었을 때는 1로 지정된다.

 

6) SCR(Second Chance Replacement)

 

SCR은 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로, FIFO기법의 단점을 보완하는 기법이다.

 

* 각 페이지마다 참조 비트를 두고, FIFO 기법을 이용하여 페이지 교체 수행중 참조 비트가 0일 경우에는 교체하고, 참조 비트가 1일 경우에는 참조 비트를 0으로 지정한 후 FIFO리스트의 맨 마지막으로 피드백시켜 다음 순서를 기다리게 한다.

 

* 교체 대상이 되기 전에 참조 비트를 검사하여 1일 경우 한 번의 기회를 더 부여하기 때문에 Second Chance 라고도 한다.

 

 

06 가상기억장치 기타 관리 사항

 

1) 페이지 크기

 

- 페이지 크기가 작을 경우

 

페이지 단편화가 감소되고 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어든다.

국부성에 더 일치할 수 있기 때문에 기억장치 효율이 높아진다.

 

- 페이지 크기가 클 경우

 

페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라진다.

디스크 접근 횟수가 줄어들어 전체적인 입*출력의 효용성이 증가된다.

 

 

2) 국부성(Locality)

 

Locality는 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론이다.

 

* 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 되었다.

 

* 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상기억장치 관리의 이론적인 근거가 된다.

 

* 캐시메모리 시스템의 이론적 근거이다.

 

3) Locality의 종류

 

- 시간구역성

 

* 시간 구역성은 프로세스가 실행되면서 하나의 페이지를 일정시간 동안 집중적으로 액세스하는 현상이다.

 

* 한번 참조한 페이지는 가까운 시간 내에 게속 참조할 가능성이 높음을 의미한다.

 

- 공간구역성

 

* 공간 구역성은 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상이다.

* 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미한다.

 

4) 워킹 셋

 

워킹 셋은 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합이다.

 

- 프로그램의 Locality의 특징

 

- 자주 참조되는 워킹 셋을 주기억장치에 상주 시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정된다.

 

5) 페이지 폴트 빈도 방식

 

페이지 폴트 빈도 PFF(Page Fault Frequency)는 페이지 부재가 일어나는 횟수를 의미한다.

 

* 페이지 폴트 빈도 방식은 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식이다.

 

6) 프리페이징

 

* 프리페이징은 처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 기법이다.

 

6) 스래싱

 

스래싱은 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상이다.

 

* 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정중 자주 페이지 부재가 발생함으로써 나타나는 현상으로, 전체 시스템의 성능이 저하된다.

 

* 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소하게 된다.

 

 

 

07 디스크 스케쥴링

1) 디스크 스케줄링의 개요

 

* 디스크 스케줄링은 사용할 데이터가 디스크 상의 여러 곳에 저장되어 있을 경우 데이터를 액세스하기 위해 디스크 헤드가 움직이는 경로를 결정하는 기법이다.

 

* 디스크 스케줄링은 일반적으로 탐색 시간을 최적화하기 위해 수행되며, 다음과 같은 목적을 갖고 있다.

 

처리량 최대화, 응답 시간 최소화, 응답 시간 편차의 최소화

 

2) fcfs

 

디스크 대기 큐에 가장 먼저 들어온 트랙에 대한 요청을 먼저 서비스하는 기법이다.

 

3) sstf

 

sstf는 탐색거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스하는 기법이다.

 

4) scan

 

scan은 sstf가 갖는 탐색 시간의 편차를 해소하기 위한 기법이다.

 

* 현재 헤드의 위치에서 진행 방향이 결정되면 탐색 거리가 짧은 순서에 따라 그 방향의 모든 요청을 서비스하고,

끝까지 이동한 후 역방향의 요청 사항을 서비스한다.

 

5) c-scan

 

c-scan은 항상 바깥쪽에서 안쪽으로 움직이면서 가장 짧은 탐색 거리를 갖는 요청을 서비스하는 기법이다.

 

* 헤드는 트랙의 바깥쪽에서 안쪽으로 한 방향으로만 움직이며 서비스하여 끝까지 이동한 후, 안쪽에 더 이상의 요청이 없으면

헤드는 가장 바깥쪽의 끝으로 이동한 후 다시 안쪽으로 이동하면서 요청을 서비스한다.

 

 

6) n-step scan

 

n-step scan은 scan 기법의 무한 대기 발생 가능성을 제거한 것으로, 어떤 방향의 진행이 시작될 당시에 대기 중이던 요청들만 서비스하고, 진행 도중 도착한 요청들은 한데 모아서 다음의 반대 방향 진행 때 서비스하는 기법이다.(scan방식은 진행 도중 도착한 요청도 서비스 한다)

 

* sstf나 scan 기법보다 응답 시간의 편차가 적다.

 

7) 에션바흐 기법

 

* 헤드는 c-scan처럼 움직이며 예외적으로 모든 실린더는 그 실린더에 요청이 있던 없던 간에 전체 트랙이 한 바퀴 회전할 동안에 서비스를 받는다.

 

8) sltf

 

섹터 큐잉이라고 하며 회전 지연 시간의 최적화를 위해 구현된 기법이다.

 

* 디스크 대기 큐에 있는 여러 요청을 섹터 위치에 따라 재정렬하고, 가장 가까운 섹터를 먼저 서비스한다.

 

* 헤드의 이동이 거의 없는 고정 헤드 장치인 드럼과 같은 장치에서 사용된다.

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

01 프로세스 개요

 

1) 프로세스의 정의

 

실행중인 프로그램

 

2) pcb(프로세스 제어블록)

 

저장정보

 

1) 프로세스의 현재 상태(준비, 대기, 실행 등의 프로세스 상태)

2) 포인터( 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터)

3) 프로세스 고유 식별자( 프로세스를 구분할 수 있는 고유번호)

4) 스케줄링 및 프로세스의 우선순위

 

3) 프로세스 상태 전이

 

 

 

4) 스레드

 

스레드는 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위이다.

 

스레드의 분류

 

사용자 수준의 스레드

커널 수준의 스레드

 

스레드 사용의 장점

 

- 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성 증진

- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상

- 응용 프로그램의 응답 시간을 단축

- 스레드는 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신한다.

 

02 스케줄링 개요

 

 

1) 개요

 

대부분의 시스템은 다중 프로그래밍 방식으로 동작하는데 이는 여러 개의 프로세스를 주기억장치에 적재하여 실행 중이던 프로세스가 중앙처리장치 동작이 아닌 다른 사건이 발생하기를 기다리는 동안 다른 프로세스가 실행되도록 하여 중앙처리장치 이용률을 최대화하는 개념이다.

 

2) 스케줄링 기법

 

비선점 스케줄링

 

이미 할당된 cpu를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법이다.

 

선점 스케줄링

 

하나의 프로세스가 cpu를 할당받아 실행할 때 우선순위가 높은 다른 프로세스가 cpu를 강제로 빼앗아 사용할 수 있는 스케줄링 기법이다.

 

3) 비선점 스케줄링

 

- FCFS 준비상태 큐에 도착한 순서에 따라 차례로 cpu할당 하는 기법

 

- SJF

 

SJF는 준비상태 큐에서 기다리고 있는 프로세스들 중에서 실행시간이 가장짧은 프로세스에게 cpu할당

 

- HRN

 

실행 시간이 긴 프로세스에 불리한 SJF 기법 보완

 

우선순위 =  (대기시간+서비스시간) / 서비스시간

 

우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은 순으로 우선순위가 부여된다.

 

- 우선순위 스케줄링

 

프로세스마다 우선순위를 부여하여 그 우선순위가 가장 높은 프로세스에게 먼저 cpu 할당

가장 낮은 순위를 부여받은 프로세스는 기아 상태가 발생 하여 aging해야 함.

 

4) 선점 스케줄링

 

- 선점 우선순위

 

우선순위 스케줄링과 동일하나, 선점할 수 있다는 차이

 

- SRT

 

선점가능한 SJF

 

- RR(라운드 로빈)

 

시분할 시스템을 위해 고안된 방식

 

FCFS 기법과 같이 준비상태 큐에 먼저 들어온 프로세스가 먼저 cpu를 할당받지만, 시간 할당량 동안만 실행한 후 실행이 완료되지 않으면 다음 프로세스에게 cpu를 넘겨주고 준비상태 큐의 가장 뒤로 배치된다.

 

- 다단계 큐

 

프로세스를 특정 그룹으로 분류할 수 있을 경우 그룹에 따라 각기 다른 준비상태 큐를 사용하는 기법이다.

 

프로세스 우선순위에 따라 시스템 프로세스, 대화형 프로세스, 편집 프로세스, 일괄 처리 프로세스 등으로 나누어 준비상태 큐를 상위, 중위, 하위 단계로 배치한다.

 

각 준비상태 큐는 독자적인 스케줄링을 가지고 있으므로 각 그룹의 특성에 따라 서로 다른 스케줄링 기법을 사용할 수 있다.

 

- 다단계 피드백 큐

 

특정 그룹의 준비상태 큐에 들어간 프로세스가 다른 준비상태 큐로 이동할 수 없는 다단계 큐 기법을 준비상태 큐 사이를 이동할 수 있도록 개선한 기법이다.

 

준비상태 큐마다 시간 할당량을 부여하여 그 시간 동안 완료하지 못한 프로세스는 다음 단계의 준비상태 큐로 이동된다.

 

상위 단계 준비상태 큐일수록 우선순위가 높고, 시간 할당량이 적다.

 

 

03 병행프로세스와 상호 배제

 

 

 

1) 병행 프로세스

 

두 개 이상의 프로세스들이 동시에 존재하며 실행 상태에 있는 것을 의미한다.

 

2) 임계 구역

 

임계 구역은 다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유하는 데이터 및 자원에 대하여 어느 한 시점에서는 하나의 프로세스만 자원을 사용하도록 지정된 공유 자원을 의미한다.

 

* 임계 구역에는 하나의 프로세스만 접근할 수 있으며, 해당 프로세스가 자원을 반납한 후에만 다른 프로세스가 자원이나 데이터를 사용할 수 있다.

 

* 임계 구역은 특정 프로세스가 독점할 수 없으며, 임계 영역에서 수행 중인 프로세스는 인터럽트가 불가능하다.

 

* 프로세스가 임게 구역에 대한 집입을 요청하면 일정 시간 내에 진입을 허락해야 한다.

 

3) 상호 배제 기법

 

상호 배제는 특정 프로세스가 공유 자원을 사용하고 있을 경우 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법을 의미한다.

 

* 여러 프로세스가 동시에 공유 자원을 사용할 때 각 프로세스가 번갈아가며 공유자원을 사용하도록 하는 것으로, 임계구역을 유지하는 기법이다.

 

소프트웨어적 구현 방법

 

* 두 개의 프로세스 기준 : 데커 알고리즘, 피터슨 알고리즘

* 여러개의 프로세스 기준 : Lamport의 빵집 알고리즘

 

하드웨어적 구현 방법

 

* Test & Set 기법과 Swap 명령어 기법이 있다.

 

4) 동기화 기법

 

동기화 기법은 두 개 이상의 프로세스를 한 시점에서는 동시에 처리할 수 없으므로 각 프로세스에 대한 처리 순서를 결정하는 것으로, 상호 배제의 한 형태이다.

 

- 세마포어

 

* 세마포어는 '신호기', '깃발'을 뜻하며, 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법이다.

* 세마포어는 다익스트라가 제안하였으며, p와 v라는 두개의 연산에 의해서 동기화를 유지시키고 상호 배제의 원리를 보장한다.

 

* S는 P와 V연산으로만 접근 가능한 세마포어 변수로, 공유 자원의 개수를 나타내며 0과 1혹은 0과 양의 값을 가질 수 있다.

 

P연산 : while s<=0 do skip;  s =s -1  (자원이 점유중이면 기다리다가 사용할 수있으면 점유한다)

 

v연산 : s=s+1;

 

1. 프로세스가 자원을 사용하려고 할 경우 세마포어 변수를 통해 다른 프로세스가 자원을 점유하고 있는지 조사한다. 자원을 사용할 수

있으면 해당 자원을 점유한 후 자원이 점유되었다는 것을 알리고, 다른 프로세스가 이미 자원을 점유한 상태라면 자원을 사용할 수 있을 때까지 기다린다.

 

p연산 : 자원을 사용하려는 프로세스들의 진입 여부를 자원의 개수를 통해 결정하는 것으로 wait 동작이라 한다.

s = s-1; 자원 점유를 알리는 것으로, 자원의 개수를 감소시킨다.

 

2. 프로세스가 자원 사용을 마치면 자원을 반납하므로 자원의 사용을 위해 기다리는 프로세스에게 이 사실을 알린다.

 

v연산 : 대기중인 프로세스를 깨우는 신호로서 signal 동작이라고 한다.

s = s+1; 자원을 반납하였으므로 자원의 개수를 증가시킨다. 

 

 

- 모니터 

 

* 모니터는 동기화를 구현하기 위한 특수 프로그램 기법으로 특정 공유 자원을 프로세스에게 할당하는 데 필요한 데이터와 이 데이터를 처리하는 프로시저로 구성된다. 

 

* 모니터 내의 공유 자원을 사용하려면 프로세스는 반드시 모니터의 진입부를 호출해야 한다.

 

* 외부의 프로시저는 직접 액세스 할 수 없다.

 

* 모니터의 경계에서 상호 배제가 시행된다.

 

* 모니터에는 한 순간에 하나의 프로세스만 진입하여 자원을 사용할 수 있다.

 

* 모니터에서는 Wait와 Signal 연산이 사용된다.

 

 

 

04 교착상태

 

 

1) 교착상태 개요

 

- 교착상태(Dead Lock)은 상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상을 의미한다.

 

- 아래 그림과 같이 자동차들이 현재 위치한 길을 점유함과 동시에 다른 차가 사용하는 길을 사용하려고 대기하고 있지만 다른 길을 사용할 수 없으며 현재 길에서도 벗어나지 못하는 상태이다.

 

2) 교착상태 발생의 필요 충분 조건

 

교착상태가 발생하기 위해서는 다음의 네 가지 조건이 충족되어야 하는데, 이 네 가지 조건 중 하나라도 충족되지 않으면 교착상태가 발생하지 않는다.

 

상호 배제 - 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다.

 

점유와 대기 - 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.

 

비선점- 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.

 

환형 대기 - 공유 자원과 공유 자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다.

 

3)  교착상태 해결 방법

 

- 예방 기법

 

교착 상태 예방 기법은 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법으로, 교착상태 발생의 네 가지 조건 중에서 어느 하나를 제거함으로써 수행된다..

 

* 상호 배제 부정 - > 한번에 여러개의 프로세스가 공유자원을 사용할 수 있도록 한다.

 

* 점유 및 대기 부정 -> 프로세스가 실행되기 전 피요한 모든 자원을 할당하여 프로세스 대기를 없애거나 자원이 점유되지 않은 상태에서만 자원을 요구하도록 한다.

 

* 비선점 부정 -> 자원을 점유하고 있는 프로세스가 다른 자원을 요구 할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.

 

* 환형 대기 부정 -> 자원을 선형 순서로 분류하여 고유 번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한쪽 방향으로만 자원을 요구하도록 하는 것이다.

 

- 회피 기법

 

교착상태 회피 기법은 교착상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해나가는 방법으로, 주로 은행원 알고리즘이 사용된다.

 

* 은행원 알고리즘

 

* 은행원 알고리즘은 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데서 유래한 기법이다.

* 각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태를 안전상태, 교착상태가 발생할 수 있는 상태는 불안전 상태라고 한다.

* 은행원 알고리즘을 적용하기 위해서는 자원의 양과 사용자 수가 일정해야 한다.

* 은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간 안에 할당하는 것을 보장한다.

 

 

- 회복 기법

 

교착상태 회복 기법은 교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점*하여 프로세스나 자원을 회복하는 것을 의미한다.

 

프로세스 종료 - 교착상태에 있는 프로세스를 종료

 

자원 선점 - 교착상태의 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요