HTTP 프로토콜

네트워크 2015. 8. 8. 01:31

HTTP 프로토콜 이란?

HTTP 프로토콜은 웹 브라우저와 웹 서버 사이의 데이터 통신 규칙을 말한다.


즉 HTTP 통신 규약에 맞추어서 요청한다면

HTML파일을 요청하면 HTML파일을 보내주고, 이미지 파일을 요청하면 이미지 파일을 보내준다는 것이다.


http요청 응답에 대한 내부적으로 어떻게 동작하고 있는가?

요청과정(Request)

요청라인, 요청헤더, 공백라인과 요청 데이터로 구성


GET /web04/member/list HTTP/1.1

Host: localhost:9999

Cache-Control: max-age=0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36

Accept-Encoding: gzip, deflate, sdch

Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4


요청 라인(Request-Line)


요청헤더

  * 요청이나 응답 모두에 적용 할 수 있는 "일반헤더(General Header)"

  * 요청 또는 응답 둘 중에 하나에만 적용 할 수 있는 "요청 헤더 또는 응답 헤더(Request Header / Response Header)"

  * 보내거나 받는 본문 데이터를 설명하는 "엔티티 헤더(Entity-Header)"


HTTP헤더들

 헤더 유형

헤더명 

일반헤더

(General Header Fields) 

Cache-Control

Connection

Date

Pragma

Trailer

Transfer-Encoding

Upgrade

Via

Warning 

 요청헤더

(Request Header Fields)


Accept

Accept-Charset

Accept-Encoding

Accept-Language

Authorization 

Expect

From

Host

If-Match

If-Modified-Since

If-Range

If-Unmodified-Since

Max-Forwards

Proxy-Authorization

Range

Referer

TE

User-Agent

응답헤더

(Response Header Fields)

Accept-Ranges

Age

ETag

Location

Proxy-Authenticate

Retry-After

Server

Vary

WWW-Authenticate

본문헤더

(Entity Header Fields) 


Allow

Content-Encoding

Content-Language

Content-Location

Content-MD5

Content-Range

Content-Type

Expires

Last-Modified

기타확장헤더


GET요청 

공백 라인으로 끝납니다. 서버에 보낼 데이터가 있다면 URL주소에 붙여 보냅니다.

POST요청

그에 비해 로그인이나 게시글을 등록하는 경우 POST를 사용하는데, POST요청은 공백 라인 다음에 메시지 본문이 들어갑니다.



응답과정(Response)

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/html;charset=UTF-8

Content-Length: 1138

Date: Sun, 12 Jul 2015 07:16:42 GMT


<html><head><title>회원목록</title></head>

<body><h1>회원목록</h1>

.........<생략>


상태라인

응답 메시지의 첫 라인은 응답 결과에 대한 상태 정보. 프로토콜 버젼과 상태 코드, 설명으로 구성

 상태코드

상태설명 

200 

 요청이 성공 이루어졌다.

301

 요청한 자원이 이동되었다. 헤더 정보에 이동 위치를 알려줄 테니 다시 요청하라.

304

 클라이언트가 임시 보관한 응답결과에 다르지 않다.

400

 잘못된 요청이다.

404

 요청한 자원을 못 찾았다.

500

 서버 내부에서 오류가 발생했다.


http는 웹브라우저와 웹 서버간의 통신을 위한 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 동작한다.

요청과정, 응답과정으로 이루어져 있습니다.

요청메시지는

RequestLine - Header - 공백 - Body

RequestLine에는 GET, POST와 같은 메소드와 URL, HTTP버젼 등이 포함되며

헤더에는 HTTP프로토콜을 통해 전송할 정보들을 다루는 헤더를 포함시킵니다.

공백을 하나 두고 POST요청과 같은 경우 본문 메세지를 보냅니다.

응답메시지는

status line - Header - 공백 - Body로 구성되바니다.

STATUS LINE200, 404 등등 상태 번호와 버젼 등이 작성되어 전달되며,

헤더와 공백과 함께 POST와 같은 경우 BODY가 함께 전송됩니다.

 

요청과정는 요청라인과 요청헤더로 이루어져 있는데, GET, POST 등의 메서드와 요청 URI 등이 전달되며

요청 헤더에 필요한 정보들이 섞여 들어갑니다. 예를 들어 Cache-control같은 일반헤더, UserAgent, Host와 같은 요청헤더

GET요청과 같은 경우에는 본문 메시지를 넣지 않고, POST요청과 같은 경우에는 이러한 헤더 밑에 본문 메세지를 같이 보내게 됩니다.

응답과정은 응답에 대한 상태코드와 헤더, 그 아래에 메시지 본문을 같이 보내게 됩니다.

 

- http란 무엇인지에 대해서

HyperText Transfer Protocol : 하이퍼텍스트 기반으로 데이터를 전송하겠다는 뜻. 간단히 말하면 링크기반으로 데이터에 접속하겠다는 의미이다.

웹서버는 보통 표준포트 80번 포트로 서비스한다.

httpconnectionless방식으로 작동한다. 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다. 기본적으로 자원하나에 대해서 하나의 연결을 만든다.

이런 방식에 대해서 장, 단점이 있는데

장점) 불특정 다수를 대상으로 하는 서비스에 적합한 방식. 수십만명이 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에 더 많은 유저의 요청을 처리할 수 있음

단점) 연결을 끊어버리기 때문에 클라이언트의 이전 상태를 알 수 없다. 이러한 http의 특징을 stateless라고 하는데, connectless로 부터 파생되는 특징이다.

예컨데 이전에 로그인 접속이 되었는데도 그에 대한 정보를 알지 못하는 상황을 말한다. 이러한 문제를 http는 쿠키를 통해 해결하고 있다.(또는 세션에 의해서 처리하기도)

 

URI와 메서드

URI는 자원의 위치를 알려주기 위한 프로토콜이다. Uniform Resource Identifiers의 약자이다.

메서드는 GET, POST, PUT, DELETE 등의 메서드를 명세한다. 보통 GETPOST만 있으면 되지만, RESTful API를 위해서

GET, POST, PUT, DELETE등의 메소드를 모두 활용하여 CRUD를 구성하는 것이 좋다.

 

HTTP 1.1부터는 KEEP-ALIVE 속성을 지원하는데 이 것은 무엇을 말하는가?

예를 들어 한 번의 웹 요청으로 많은 리소스들을 받게 되는데

HTML페이지, CSS, JS, 이미지 등등 그런데 KEEP-ALIVE속성이 없다면

다음과 같이 동작하게 될 것이다.

1) 웹서버에 연결한다.

2) HTML문서를 다운로드한다.

3) 웹서버를 끊는다.

4) HTML문서의 image, css, javascript 링크들을 읽어서 다운로드해야 할 경로를 저장한다.

5) 웹 서버에 연결한다.

6) 첫 번째 이미지를 다운로드

7) 연결을 끊는다.

8) 웹 서버에 연결한다.

9) 두 번째 이미지를 다운로드

10) 연결을 끊는다.

11) ....


Keep-Alive 속성은 연결의 시간을 정해두고, 동작하게 된다. 

Keep-Alive 속성을 이용해서 연결이 이루어지고 여러 요청을 한 꺼번에 처리하기 때문에 효율적이다.

하지만 그만큼 서버의 운영체제에서는 연결이라는 유한한 자원을 사용하고 있는 것이므로 최대 연결 개수를 설정해놓는다

'네트워크' 카테고리의 다른 글

GET방식 과 POST방식  (0) 2015.08.08
HTTP 와 HTTPS  (0) 2015.08.08
쿠키와 세션의 차이  (0) 2015.08.08
DNS서버  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
Posted by slender ankles
,

저장되는 곳이 다르다. 쿠키는 클라이언트에 저장되고, 세션은 서버에 저장된다.

쿠키의 경우 서버의 자원을 전혀 사용하지 않지만, 세션의 경우에는 서버에 저장되기 때문에 서버의 자원을 사용 할 수 있다. 쿠키와 세션이 만료되는 기간도 다르다.

 

구분

쿠키

세션

저장 위치

클라이언트(클라이언트 하드디스크)

서버

저장 형식

텍스트 형식

Object

종료 시점

쿠키 저장 시 설정(설정하지 않으면 브라우저

종료 시 소멸)

정확한 시점을 알 수 없다.

자원

클라이언트 자원을 사용

서버의 자원을 사용

용량 제한

한 도메인 당 20, 쿠키 하나 당 4KB,

300

서버가 허용하는 한 용량에 제한이 없음



쿠키란 무엇인가?

(1) 쿠키란 서버측에서 클라이언트 측에 상태 정보를 저장하고 추출할 수 있는 메커니즘

(2) 클라이언트의 매 요청마다 웹 브라우저로부터 서버에게 전송되는 정보패킷의 일종

(3) HTTP에서 클라이언트의 상태 정보를 클라이언트의 하드 디스크에 저장하였다가 필요 시 정보를 참조하거나 재 사용 할 수 있음

(4) 사용 예) 방문했던 사이트에 다시 방문하였을 때 아이디와 비밀번호 자동 입력

** 하나의 도메인에서 설정한 쿠키값이 20개를 초과하면 가장 적게 사용된 쿠키부터 지워짐. 또한 쿠키는 기존에 설정한 값이 있는 곳에 저장하거나 배열형태의 쿠키에 단일 값을 저장하려고 할 때 아무런 경고 없이 덮어쓰기 때문에 주의를 해야 한다


세션이란 무엇인지?

(1) 세션이란 클라이언트와 웹서버 간에 네트워크 연결이 지속적으로 유지되고 있는 상태를 말함

(2) 클라이언트가 웹서버에 요청하여 처음 접속하면 JSP(혹은 ASP)엔진은 요청한 클라이언트에 대하여 유일한 ID를 부여하게 되는데, ID를 세션이라고 한다.

(3) 세션 ID를 임시로 저장하여 페이지 이동 시 이용하거나, 클라이언트가 재 접속 했을 때 클라이언트를 구분 할 수 있는 유일한 수단이 된다.

(4) 세션의 장점

1) 각각의 클라이언트마다 고유 ID 부여

2) 세션 객체마다 저장해 둔 데이터를 이용하여 서로 다른 클라이언트의 요구에 맞게 서비스 제공

3) 클라이언트 자신만의 고유한 페이지를 열어놓아서 생길 수 있는 보안상의 문제 해결 용이

'네트워크' 카테고리의 다른 글

HTTP 와 HTTPS  (0) 2015.08.08
HTTP 프로토콜  (0) 2015.08.08
DNS서버  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
TCP와 UDP차이  (0) 2015.08.08
Posted by slender ankles
,

DNS서버

네트워크 2015. 8. 8. 01:31

IP주소의 이진 주소 체계는 사람들이 기억하기 어렵기 때문에 도메인 네임을 통해 주소를 관리.

도메인 네임 서버를 통해 어떻게 IP주소를 얻어내는지에 대해서 알아보자.

1) PC자체 Cache를 확인하여 해당 도메인에 대한 IP정보(접속하려는 곳)을 탐색

    - IP정보발견시 -> 접속

    - 발견 못함-> 다음단계로

2) pc에서 지정한 Local DNSwww.naver.com 질의

3) local DNSROOT DNS에게 최상위 도메인(COM)에 대한 정보를 가진 네임서버를 질의

    - Cached -> 다음 단계로 진행하지 않고, 바로 응답(최종목적지)

4) Local DNSCOM ROOT에게 naver네임서버의 정보를 질의

    - cached -> 다음 단계로 진행하지 않고, 바로 응답(최종목적지)

5) Local DNSnaver네임서버에게 www.naver.com IP 정보를 질의

    - cached -> 다음 단계로 진행하지 않고, 바로 응답(최종목적지)

6) 네이버 네임 서버가 www.naver.comIP를 제공하면, PC에서 접속(IP주소이용)



'네트워크' 카테고리의 다른 글

HTTP 프로토콜  (0) 2015.08.08
쿠키와 세션의 차이  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
TCP와 UDP차이  (0) 2015.08.08
네트워크 데이터 전송되는 과정  (0) 2015.08.08
Posted by slender ankles
,

flow control(흐름 제어)

송신 측과 수신 측의 데이터 처리 속도 차이를 해결하기 위한 기법이다.

수신 측이 송신 측보다 속도가 빠른 것은 아무 문제가 없다하지만 송신 측이 수신 측보다 속도가 빠르면 문제가 발생한다.

수신 측에서 수신된 데이터를 처리해서 상위 계층으로 서비스 하는 속도보다 송신 측에서 보내는 데이터의 속도가 더 빠르다면 수신 측에서는 제한된 저장용량을 초과하여 이후에 도착하는 데이터는 손실될 수 있다만약 데이터가 손실 된다면 불필요하게 응답과 데이터의 재전송이 송신 측과 수신 측간에 빈번히 이동해야 한다.

따라서 이러한 위험을 줄이기 위해 송신 측의 데이터 전송 량을 수신 측의 에 따라 조절한다.

이러한 작업을 흐름 제어라고 한다.

(a) Stop and Wait 방식


(b) Windowing 방식

 

tcp흐름제어

TCP는 먼저 연결을 설정한 후에 전송을 시작하지만 수신 측의 처리 능력이나 네트워크 대역폭 문제로 세그먼트를 원활하게 전송하지 못할 수도 있다.

이를 위해 TCP는 송신 측 전송 속도를 제어하는 메커니즘인 슬라이딩 윈도우 기법을 사용한다.

(1) Sliding Window 정의

- TCP 슬라이딩 윈도우 기법은 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법이다이처럼 슬라이딩 윈도우 기법을 통하여 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜으로써 흐름제어를 수행하게 된다.

 

슬라이딩 윈도우는 일단 윈도우에 포함되는 모든 패킷을 전송하고그 패킷들의 전달이 확인 되는대로 이 윈도우를 옆으로 옮김(Slide)으로서 그 다음 패킷들을 전송하는 방식이다.

 

또한 윈도우의 크기만큼은 수신 쪽의 확인(응답)을 받지 않고도 보내는 것이 가능하므로 매번 전송한 패킷에 대해 확인을 받아야만 그 다음 패킷을 전송하는 방법(stop-and-wait)를 사용하는 것보다 훨씬 네트워크를 효율적으로 사용할 수 있다.

(2) window크기

- tcp/ip를 사용하는 모든 호스트들은 각각 2개의 window를 가지고 있다하나는 보내기 위한 window이며 또 다른 하나는 받기 위한 window이다.

호스트들은 실제 데이터를 보내기 전에 먼저 “TCP-3-way handshaking”을 통하여 수신컴퓨터의 receive window size에 자신의 send window size를 맞추게 된다즉 상대방이 받을 수 있는 크기에 맞추어 전송을 하겠다는 것이다.

즉 TCP 송신 윈도우 크기는 수신 측으로부터 확인응답 없이 전송할 수 있는 데이터의 개수를 의미한다윈도우 크기는 전송했으나 아직 확인 응답 받지 못한 데이터와 지연 없이 전송할 수 있는 데이터 크기를 합한 값이 된다.



congestion control(혼잡 제어)

- 송신 측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법이다. 송신 측의 데이터는 지역 망이나 인터넷으로 연결된 대형 네트워크를 통해 전달된다. 만약 한 라우터에 데이터가 몰릴 경우, 다시 말해 혼잡할 경우 라우터는 자신에게 온 데이터를 모두 처리 할 수 없다. 그렇게 되면 호스트들은 또 다시 재전송을 하게 되고 결국 더욱 더 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생 시킨다. 따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄이게 된다. 이러한 작업을 혼잡 제어라고 한다.

 

- 또한 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡(Congestion)이라고 하며 혼잡 현상을 방지하거나 제거하는 기능을 혼잡제어(Congestion Control)라고 한다. 흐름제어가 송신 측과 수신 측 사이의 전송 속도를 다루는데 반하여 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서의 전송 문제를 다룬다.

 

- 앞에서 본 흐름 제어는 두 장비 간의 데이터 송신을 통제하는 중요한 부분이지만 연결에 참여하는 두 장비의 상황만 고려할 뿐 두 장비 사이에 있는 라우터 같은 다른 장비는 고려하지 않는다. 이것은 사실 계층 구조상 당연한 일이지만, 실제로는 TCP3계층에서 어떤 일이 벌어지고 있는지 아는 것은 매우 중요하다. 왜냐하면 네트워크가 혼잡해지게 되면 라우터 버퍼들의 오버플로우가 발생하며 세그먼트를 송신하는 속도가 느려지거나 어떤 때에는 버려지기도 한다.

 

- 혼잡제어 알고리즘

(a) AIMD(Additive Increase / Multicative Decrease)

- 이 방식은 AIMD라고 불리는 방식이다. 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 창 크기(단위 시간 내에 보내는 패킷의 수)1씩 증가시켜가면서 전송하는 방법이다. 만일 패킷 전송을 실패하거나 일정한 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄이게 된다.

 

- 이 방식은 공평한 방식이다. 이 방식을 사용하는 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만 시간이 흐르면 평형 상태로 수렴하게 되는 특징이 있다.

 

- 문제점은 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지는 못한다. , 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식이다.

 

(b) slow start

합 증가/곱 감소 방식이 네트워크의 수용량 주변에서는 효율적으로 작동하지만 처음에 전송 속도를 올리는 데 걸리는 시간이 너무 길다는 단점이 있다. 느린 시작(Slow Start) 방식은 합 증가/곱 감소 방식과 마찬가지로 패킷을 하나씩 보내는 것부터 시작한다. 그러나 이 방식은 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 창 크기를 1씩 늘린다. , 한 주기가 지나면 창 크기가 2배로 된다. 따라서 전송 속도는 합 증가/곱 감소와는 다르게 지수 함수 꼴로 증가한다. 대신에 혼잡 현상이 발생하면 창 크기를 1로 떨어뜨린다. 처음에는 네트워크의 수용량을 예상할 수 있는 정보가 없지만 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있으므로 혼잡 현상이 발생하였던 창 크기의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킨다.

 

(c) Fast Retransmit(빠른 재전송)

빠른 재전송은 TCP의 혼잡 조절에 추가된 정책이다. 패킷을 받는 쪽에서 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보낸다. , 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보낸다. 따라서 중간에 패킷 하나가 손실되게 되면 보내는 측에서는 순번이 중복된 ACK 패킷을 받게 되고, 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송해 줄 수 있다. 빠른 재전송은 중복된 순번의 패킷을 3개 받으면 재전송을 한다. 그리고 이런 현상이 일어나는 것은 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지하고 창 크기를 줄이게 된다.

 

(d) Fast Recovery(빠른 회복)

빠른 회복 정책은 혼잡한 상태가 되면 창 크기를 1로 줄이지 않고 반으로 줄이고 선형 증가시키는 방법이다. 빠른 회복 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 합 증가/곱 감소 방식으로 동작한다.

 





이러한  TCP의 성질 때문에 Reliable한 특징을 가지는 것!




'네트워크' 카테고리의 다른 글

쿠키와 세션의 차이  (0) 2015.08.08
DNS서버  (0) 2015.08.08
TCP와 UDP차이  (0) 2015.08.08
네트워크 데이터 전송되는 과정  (0) 2015.08.08
OSI 7계층과 TCP/IP 4계층  (0) 2015.08.08
Posted by slender ankles
,

TCP와 UDP차이

네트워크 2015. 8. 8. 01:29

TCPUDP와 달리 연결지향이라고 배웠었다. 그렇다면 연결지향이란 무엇을 의미하는것일까 ? 우리는 바로 위에서 TCP/IP 에 의해서 데이타가 어떻게 전송되어지는지를 알아봤는데, 데이타가 전송되기전에, Browser Server 간의 연결을 성립하는 과정이 데이타를 전송하는 과정전에 이루어지게 된다. 연결을 만드는 과정은 이를테면 우리가 전화할때 어떤내용을 말하기에 앞서서, "안녕하세요 ?" "누구누구씨 맞아요" "아내 저 누구누구 맞습니다"라고 상대편을 먼저 확인하는 과정과 동일한 과정이다.

 

즉 데이타가 전송되기 전에, 먼저 Browser Server "서버 잘있읍니까?" 라고 메시지를 보내고, Server 는 다시 Browser(:12) 에게 "서버 준비되어 있으니, 데이타 보내시요" 라는 메시지를 보내고 Browser 는 다시 서버에게 ", 그럼 지금부터 데이타를 보내겠습니다" 라고 서로 의 존재를 확인하는 절차를 수행한후, 정식 데이타를 교환하기 위한 통신선로를 개설하게 된다. 통신선로를 하나 만들기 위해서는 3번의 데이타 전송이 일어나게 되므로, 이것을 three way handshake이라고 한다. 위 그림은 three way handshake 의 과정을 보여주고 있다.

 

이렇게 연결이 이루어지면 모든 정식데이타는 연결된 통신선로를 통해서 교환되게 되며, 이러한 이유로 TCP"연결 지향" 프로토콜이라고 부르는 것이다. UDP 는 이러한 과정이 없이 단순히 데이타만을 전송함으로 "데이타 그램" 프로토콜이라고 부른다.



'네트워크' 카테고리의 다른 글

DNS서버  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
네트워크 데이터 전송되는 과정  (0) 2015.08.08
OSI 7계층과 TCP/IP 4계층  (0) 2015.08.08
TCP가 필요한 이유  (0) 2015.08.08
Posted by slender ankles
,



WWW (World Wide Web)은 더이상 설멍이 필요없는 유명한 서비스로써, HTTP (HyperText Transfor Protocol)이라는 프로토콜을 이용한다.

 

위의 그림을 설명해 보자면, 일단 사용자는 Mozilla IE 같은 브라우저를 사용하여서 www.joinc.co.kr 같은 URL 입력을 통해서 웹페이지를 요쳥한다.

 

사용자의 요청(문자 메시지가 될것이다)은 인터넷상에서 전달되기 용이한 패킷으로 만들기 위해서 TCP 패킷으로 만들어지게 된다.

 

이것은 다시 인터넷 상에서 원하는 주소로 이동할수 있도록 하기 위해서 IP 패킷으로 다시 만들어 지고(IP 패킷에는 자신의 주소와, 도착해야될 상대방의 주소정보가 들어있을것이다) 이것은 이더넷 카드로 보내어져서 Internet 으로 나가게 된다.

 

Internet 상에서는 원하는 주소로 TCP/IP 패킷을 보내기 위한 여러가지 장치들이 존재하는데(라우터, 토큰링 같은), 이들 장치를 통해서, www.joinc.co.kr 의 이더넷카드로 TCP/IP 패킷이 전달되게 된다. 그럼 이더넷 카드는 TCP/IP 패킷을 바로 윗 계층(Internet Layer)으로 보내는데, 여기에서는 IP 패킷을 분석해서, 이 패킷이 어디에서 왔으며, 그 도착지가 어디인지를 판단하게 된다.(물론 이는 IP주소 기반으로 판단한다)

 

그리하여 목적지가 자신이면 이것을 다시 Transport Layer 로 보내고, TCP 프로토콜을 사용하여, 메시지가 누락된게 있으면 다시 요청하고, 순서를 재조합하는등 통신 메시지를 검사해서 이것을 다시 Application Layer 에게 보낸다

 

Application Layer 에서는 웹서버(IIS, Apache 같은)가 통신메시지를 HTTP 프로토콜에 준하여, 검사를 하여서 사용자가 요청한 웹페이지를 읽어들여서, Transport 계층으로 보내게 된다. 웹페이지를 브라우저까지 전송하는 과정은 위의 정반대의 과정을 순차적으로 거치게 된다.

 

최종적으로 웹브라우저는 웹페이지를 받아서(text) 역시 HTTP 프로토콜에 준하여, 렌더링 작업을 거친후 화면에 뿌려주게 된다.

 

위의 그림에서 보면 알겠지만 각각의 계층은 각각의 계층만을 상관하고 있음을 알수 있다. Application Layer 에 위치하는 브라우저와 webserver HTTP 프로토콜에 의해서 자신의 계층끼리만 통신을 하고, Transport Layer 은 역시 TCP 프로토콜에 의해서 Transport Layer 끼리 통시을 함을 알수 있을것이다. 말그대로 계층적 구조를 가지며, 각 계층은 대응되는 상대편의 계층에 대해서만 상관한다.



참조

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/Documents/IntroTCPIP



'네트워크' 카테고리의 다른 글

DNS서버  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
TCP와 UDP차이  (0) 2015.08.08
OSI 7계층과 TCP/IP 4계층  (0) 2015.08.08
TCP가 필요한 이유  (0) 2015.08.08
Posted by slender ankles
,

OSI 7 계층

OSI는 각종 시스템간의 연결을 위하여 ISO에서 제안한 모델로써, OSI(Open System Interconnection Reference Model)에서 유추할 수 있듯시스템에 상관없이 서로의 시스템이 연결될 수 있도록 만들어주는 모델이다.


레벨 

계층 

기능 

7계층

Application Layer(응용 계층)

응용계층

프로토콜 : DHCP, DNS, FTP, HTTP, FTP, Telnet

서비스 제공

 사용자가 네트워크에 접근 할 수 있도록 해주는 계층이다. 사용자 인터페이스, 전자우편, 데이터베이스 관리 등 서비스를 제공한다. 예로, 텔넷이나 HTTP, SSH, SMTP, FTP 등등

6계층

Presentation Layer(표현 계층)


표현계층 

프로토콜 : JPEG, MPEG, SMB, AFP

이해할 수 있는 포맷 변환

 운영체계의 한 부분으로 입력 또는 출력되는 데이터를 하나의 표현 형태로 변환한다. 필요한 번역을 수행하여 두 장치가 일관되게 전송 데이터를 서로 이해할 수 있도록 한다. 제어코드나 문자 및 그래픽등의 확장자(JPG, gif, mpg)를 생각하면 쉽다.

5계층

Session Layer

(세션 계층)

 세션계층

프로토콜 : SSH, TLS

응간의 질서 제어

 통신 세션을 구성하는 계층으로, 포트(Port)연결이라고도 할 수 있다. 통신장치 간의 상호작용을 설정하고 유지하며 동기화한다.사용자간의 포트연결(세션)이 유효한지 확인하고 설정한다.

4계층

Transport Layer(전송 계층)

 전송계층

프로토콜 : TCP, UDP

장비 : 게이트 웨이

 전체 메시지를 발신지 대 목적지(종단 대 종단)간 제어와 에러를 관리한다. 패킷들의 전송이 유효한지 확인하고 실패한 패킷은 다시 보내는 등 신뢰성 있는 통신을 보장하며, 머리말에는 세그먼트(segment)가 포함된다. 대표적인 프로토콜은 TCP이다. 

3계층

Network Layer

(네트워크 계층)

네트워크 계층

프로토콜 : IP(v4/v6), ICMP, IGMP,ARP

장비 : 라우터

 다중 네트워크 링크에서 패킷(Packet)을 발신지로부터 목적지로 전달할 책임을 갖는다. 2계층은 노드대노드전달을 감독하는 것이고 3계층은 각 패킷이 시작 시점에서 최종 목적지까지 성공적이고 효과적으로 전달되도록하며, 대표적 프로토콜은 IP이다. 

2계층

Data Link Layer

(데이터 링크 계층)

 데이터링크 계층

프로토콜 : MAC(이더넷), PPP

장비 : 브리지, 스위치

 오류 없이 한 장치에서 다른 장치로 프레임(Frame, 비트의 모음)을 전달하는 역할. 스위치 같은 장비의 경우 MAC주소를 이용하여 정확한 장치로 정보 전달 3계층에서 정보를 받아 주소와 제어정보를 시작(헤더)와 끝(테일)에 추가

1계층

Physical Layer(물리 계층)

 물리계층

프로토콜 : RS-232C

장비 : 허브, 리피터

 물리적 매체를 통해 비트(Bit)흐름을 전송하기 위해 요구되는 기능들을 조정. 케이블, 연결장치 등과 같은 기본적인 물리적 연결기의 전기적 명세를 정하고 네트워크의 두 노드를 물리적으로 연결시켜 주는 신호방식을 다룸



데이터를 전송 할 때 각각의 층마다 인식할 수 있어야 하는 헤더를 붙이게 되는데 이러한 과정을 캡슐화라고 한다.

데이터를 전송하고 전송매체를 통해 전송된 후 1계층 부터 7계층으로 올라가게 되면서 헤더가 벗겨지는데 이러한 과정을 디캡슐레이션이라고 한다. 

각각의 층마다 이렇게 요청과 응답을 하면서 상호작용을 하기 때문에 서버와 클라이언트 관계라고 할 수 있다. 


컴퓨터와 컴퓨터 사이에 데이터 전송을 위해서는 위의 7개의 계층을 -간접적으로 거쳐서 전송이 된다.

7개의 계층으로 나눈 이유는, 각 계층에 대한 캡술화와 은닉이 가능하기 때문이다. 캡슐화, 은닉에 대해서는 아마도 C++ 을 공부해 본적이 있다면 많이 들어본 개념일건데, 예를들어 서비스 개발자는 Application Layer Prsentation Layer 만 신경쓰면 된다. 실제 어플리케이션 개발자는 Session Layer Transport Layer 정도만 신경쓰면 될것이다. Network Layer 계층 아래는 운영체제(:12)가 알아서 챙겨주므로 거의 신경쓸 필요가 없다. 마찬가지로 하드웨어를 만드는 사람은 Physical Layer 만 신경쓰면 되며, 그위의 계층에 대해서는 신경쓸필요가 없다.(물론 개발자가 Application Layer Presentation Layer 까지 몽땅 신경써서 개발하는 경우도 있지만 - 사실은 거의 대부분이겠지만)

OSI를 이렇듯 계층별로 나눔으로써, 각 계층에서 필요한 부분만을 개발자들이 신경쓰게 되고 통신서비스 개발시간을 줄일수 있도록 도와준다.


TCP/IP 4계층

TCP/IP 계층은 OSI 7계층을 더 단순화 시켜서 4개의 계층(Layer)로 만들어서 사용한다.

1) Application Layer 이 계층은 네트웍을 사용하는 응용프로그램(FTP, Telnet, SMTP) 등으로 이루어지며,

OSI 계층의 Application Layer Presentation Layer 를 모두 포함한다.

2) Transport Layer 계층의 이름에서 알수 있듯이, 도착을 원하는 시스템까지 데이타를 전송하기 위한 일을 하는 게층이다. OSI 모델의 Session Layer Transport Layer 를 포함하고 있으며, 각각의 시스템을 연결하고, TCP 프로토콜을 이용하여 데이타를 전송한다. 

3) Internet Layer 데이타를 정의하고 데이타의 경로를 배정하는일(라우팅)을 담당한다. 데이타를 정확히 라우팅 하기 위해서 IP프로토콜을 사용한다. OSI Network Layer Data Link Layer 를 포함한다.

4) Physical Layer 물리적 계층 즉 이더넷 카드와 같은 하드웨어를 말한다


참조

http://beansberries.tistory.com/44



'네트워크' 카테고리의 다른 글

DNS서버  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
TCP와 UDP차이  (0) 2015.08.08
네트워크 데이터 전송되는 과정  (0) 2015.08.08
TCP가 필요한 이유  (0) 2015.08.08
Posted by slender ankles
,

LAN과 WAN

LAN Local Area Network 의 줄임말로 우리나라 말로 풀어쓰자면 지역내트웍(근거리 통신망) 이며 WAN Wide Area Network 의 줄임말로 광역네트웍(원거리 통신망) 으로 해석할수 있을것이다. 

LAN 은 지역적으로 가까운 컴퓨터가 서로 연결(Network)된 상태를 말하며 WAN은 지역적으로 멀리떨어진 컴퓨터가 서로 연결 된 상태를 말한다. 다음의 그림은 이러한 LANWAN의 구성을 보여주는 가장 단적인 그림이다.



HOST HOST 그리고 HOST Router 는 다양한 종류와 다양한 품질을 가지는 네트웍연결 회선으로 연결될수 있다(광케이블, 구리선, 인공위성등...). 통화품질이 다르다는 것은 데이타를 보내는중 데이타 손상이 일어날수도 있으며, 데이타의 순서가 뒤바뀔수도 있다는걸 의미한다.


데이타의 순서가 뒤바뀔수 있는 이유는, 패킷이 전달되는데 하나의 고정된 전달 경로만을 이용하지 않고 임의의 경로를 사용하기 때문으로 각경로를 구성하는 회선의 품질이 다르게되면 먼저 보내어진 패킷이라도 나중에 보내어진 패킷보다 더 느리게 도착하는 문제가 생길 수 있다. 예를들어, 구리선으로 전달되는 패킷은 인공위성이나 광케이블로 전달된 패킷보다 아무래도 느리게 움직일 것이다.


TCP/IP는 이러한 연결된 상태에서 서로 올바른 통신을 하도록 도와준다. 정확히 말하자면 TCP가 올바른 통신을 하도록 도와주는 기능을 가지고 있으며, IP는 이러한 기능없이 오로지 TCP 패킷을 전송하는 일만을 한다.

 

올바른 통신을 위해 TCP가 가지고 있는 기능은

1) 패킷이 빠졌을경우, 재전송을 요청하는 기능

2) 패킷에 일련번호를 줌으로써, 서로 다르게 도착될지도 모르는 패킷의 순서를 재조합하는 기능

 


 

'네트워크' 카테고리의 다른 글

DNS서버  (0) 2015.08.08
TCP 흐름제어 혼잡제어  (0) 2015.08.08
TCP와 UDP차이  (0) 2015.08.08
네트워크 데이터 전송되는 과정  (0) 2015.08.08
OSI 7계층과 TCP/IP 4계층  (0) 2015.08.08
Posted by slender ankles
,

우선, 자바 제네릭(Generic)이 왜 필요한지에 대해 현실세계에 빚대어 보겠습니다.

우리가 소위 핸드폰을 판다고 해보자. iPhone6일 수도 잇고, iPhone6+일수도 있고 갤럭시 s6, edge, note4, G4일수도 있습니다.

핸드폰을 파는 사람은 여러가지 모델이 아니라 하나의 모델만 판다면 구분할 필요없이 한가지 색깔, 한가지 가격을 정해놓고 판매할수가 있게 된다. 제네릭은 여러 가지 모델을 취급하게 설계 할 수 있다. 그래서 형변환과 타입체크를 할 필요가 없게되는 것이다. 



이 것을 자바세계로 끌고오면, 

<String> 제네릭은 String만, <Interger>제네릭은 Integer클래스만 사용할 수 있습니다. 

<iPhone>제네릭에는 iPhone객체만 취급할 수 있고, <GalaxyS6>제네릭은 GalaxyS6만 취급  할 수 있다는 말입니다. 

그렇지 않으면 에러가 납니다. 


제네릭은 왜 사용할까?

여러 개의 타입을 취급할 때에 형변환이 이루어지는데, 형변환은 컴파일 타임에는 에러가 나지 않는다. 제네릭을 사용하게 되면 당연히 클래스를 여러개 만들고 형변환을 할 필요가 없다는 장점과 타입체크를 할 필요가 없다는 장점이 있고 잘못된 타입이 들어가게 되면 컴파일 타임에 오류를 확인 할 수 있다.  


와일드 카드

?는 알 수 없는 타입을 뜻한다.

<?> - 모든 객체 자료형, 내부적으로 Object로 인식한다.

<? super 객체자료형> - 명시된 객체 자료형과 그 상위 객체, 내부적으로 Object로 인식한다.

<? extends 객체자료형> - 명시도니 객체 자료형과 이를 상속한 하위객체, 내부적으로는 명시한 객체 자료형을 인식한다. 


'JAVA' 카테고리의 다른 글

인스턴스 메소드 vs 클래스(스태틱) 메소드  (0) 2015.08.25
자바 Null Pointer Exception막는 방법  (0) 2015.08.18
자바 리플랙션(Reflection) API  (0) 2015.08.05
자바 해시맵(HashMap)  (0) 2015.08.05
자바 문자열  (0) 2015.07.26
Posted by slender ankles
,

리플랙션(Reflection)

"어떤 것에 대한 설명 또는 묘사" "거울 등에 미친 모습"

자바에서는 클래스 메서드의 내부 구조 를 들여다 볼 때 사용하는 도구라는 뜻

구체적인 클래스 타입을 알지 못해도, 컴파일된 자바 바이트 코드를 이용하여 역으로 클래스에 대한 정보를 알아내어, 클래스를 사용할 수 있는 기법을 말한다. 마치 거울에 비친 모습과 비슷하다고 하여 리플랙션이라는 이름이 붙여진 것


Class.newInstance()                   주어진 클래스의 인스턴스를 생성

Class.getName()                       클래스의 이름을 반환

Class.getMethod()                     클래스의 선언된 모든 public 메서드의 목록을 반환

Method.invoke()                        해당 메서드를 호출

Method.getParameterTypes()         메서드의 매개변수 목록을 배열로 반환



리플랙션 API가 필요한 이유는 무엇일까?

코드의 재사용성 및 유지보수를 쉽게 하기 위해서 서블릿에서 클래스 파일을 분리시키는데요.

이렇게 되면, 원래의 클래스명과 타입같은 것을 알아내기가 힘들어집니다. 하지만 리플렉션 api를 이용해서 class의 이름이나 타입 등을 알아낼 수 있는데, 이렇게 되면 모델, 뷰, 컨트롤러를 분리하는 코드를 만들기가 쉬워집니다.

스프링에서는 리플렉션이 컨트롤러에 구현되어 있다고 할 수 있습니다. 


추가적으로, Junit과 같은 테스트 라이브러리에서는 reflection api를 통해서 불특정 클래스를 불러와서 실행시키거나 하는 동작에도 유용하게 사용된다고 합니다.



'JAVA' 카테고리의 다른 글

자바 Null Pointer Exception막는 방법  (0) 2015.08.18
자바 제네릭(Generic)이란?  (0) 2015.08.06
자바 해시맵(HashMap)  (0) 2015.08.05
자바 문자열  (0) 2015.07.26
자바가 확장한 객체지향  (0) 2015.06.30
Posted by slender ankles
,