TCP/IP 발표자료 - 김연수

21
1 TCP/IP 스스스 2010-12-06 스스스 : 스스스

description

사내 세미나 TCP/IP 발표자료 (2010. 12. 06)

Transcript of TCP/IP 발표자료 - 김연수

Page 1: TCP/IP 발표자료 - 김연수

1

TCP/IP 스터디2010-12-06

발표자 : 김연수

TCP/IP 스터디2010-12-06

발표자 : 김연수

Page 2: TCP/IP 발표자료 - 김연수

2

Contents Table

Ⅰ. 소켓의 이해

1. 소켓이란 ?( 개요 , 타입 )

2. 인터넷 주소 체계

3. 소켓 생성 및 연결

4. 바이트 순서

5. 소켓 옵션

Ⅱ. TCP/IP 의 이해

1. TCP/IP 란 ?( 개요 , 헤더 등 )

2. TCP/IP 4 계층의 데이터 전송

3. TCP 의 내부 구조

Ⅲ. 자바 I/O 와 NIO 의 비교

1. 자바 I/O 와 NIO 의 비교

Page 3: TCP/IP 발표자료 - 김연수

3

Ⅰ. 소켓의 이해1. 소켓이란 ?

2. 인터넷 주소 체계3. 소켓 생성 및 연결4. 바이트 순서5. 소켓 옵션

Page 4: TCP/IP 발표자료 - 김연수

4

소켓이란 ?소켓이란 ? I. 소켓의 이해 I. 소켓의 이해

소켓이란 ?

인터넷 소켓 (Internet socket, socket' 혹은 network socket 라고 부르기도 한다 ) 은 네트워크로 연결되어 있는 컴퓨터의 통신의 접점에 위치한 통신 객체다 . 네트워크 통신을 위한 프로그램들은 소켓을 생성하고 , 이 소켓을 통해서 서로 데이터를 교환한다 . 소켓은 RFC 147에 기술사항이 정의 되어 있다 .

TCP

• 연결형 프로토콜- 연결이 성공해야 통신 가능

• 데이터 경계를 구분 하지 않음- 바이트 스트림 (byte-stream) 서비스

• 신뢰성 있는 데이터 전송- 데이터를 재전송함

• 1 대 1(unicast)

UDP

• 비 연결형 프로토콜- 연결 없이 통신 가능

• 데이터 경계를 구분함- 데이터 그램 (datagram) 서비스

• 비 신뢰적인 데이터 전송- 데이터를 재전송하지 않음

• 1 대 1(unicast)1 대 다 (broadcast)다 대 다 통신 (multicast)

소켓의 두 가지 타입인 TCP 와 UDP 비교

Page 5: TCP/IP 발표자료 - 김연수

5

인터넷 주소 체계인터넷 주소 체계 I. 소켓의 이해 I. 소켓의 이해

인터넷 주소 체계

IP 주소란 , 인터넷상에 존재하는 호스트들을 구분하기 위한 32 비트 주소 체계를 의미한다 . 4 바이트 IP 주소는 네트워크 주소와 호스트 주소로 나뉘며 , 주소의 형태에 따라 A, B, C, D, E 클래스로 분류할 수 있다 .IPv4 는 32Bit 이고 , IPv6 는 128Bit 로 구성되어 있다 .

1byte

1byte

1byte

1byteclas

sA

B

C

D

0

10

110

1110

Network ID

Network ID

Network ID

Multicast Address

Host ID

Host ID

Host ID

Page 6: TCP/IP 발표자료 - 김연수

6

소켓 생성 및 연결소켓 생성 및 연결 I. 소켓의 이해 I. 소켓의 이해

소켓 생성 및 연결

소켓으로 통신하기 위해서는 소켓을 생성 및 연결하여야 한다 .

socket()

bind()

listen()

accept()

recv(), send()

close()passive close

Server side Client side

socket()

bind()

connect()

recv(), send()

make connection

exchange data

close()active close

finish connection

socket() : 소켓의 생성

서버나 클라이언트나 통신을 위해서는 소켓을 생성해줘야 합니다 .(TCP, UDP 선택 )

bind() : 소켓의 부착

생성된 빈 소켓을 시스템에 부착하는 것은 소켓이 외부로의 연결을 만들 수 있는 접점을 가지게 되는 것이 됩니다 .

listen() : 서버측 연결 큐의 작성

클라이언트로부터 연결을 받기 위한 서버측 포트에 소켓이 부착됩니다 . 바인드를 했지만 TCP 는 연결 과정을 거쳐야 하기 때문에 연결큐가 필요합니다 . 연결 큐를 만드는 작업이 listen 을 호출하는 부분입니다 .

connect() : 서버로 연결

이제 서버측이 준비가 끝났으면 , 클라이언트 측은 서버가 LISTEN 하고 있는 포트로 접속하기 위해서 connect() 함수를 사용합니다 .

accept() : 클라이언트의 연결 수용

서버나 클라이언트나 통신을 위해서는 소켓을 생성해줘야 합니다 .(TCP, UDP 선택 )

close(), shutdown() : 연결 종료

해당 프로세스 내에 연결된 소켓이 닫힌다 (recv() 중인곳도 닫힘 )

Page 7: TCP/IP 발표자료 - 김연수

7

바이트 순서바이트 순서 I. 소켓의 이해 I. 소켓의 이해

바이트 순서

바이트 순서는 시스템이 내부적으로 데이터를 표현하는 방법을 의미한다 . 모든 시스템의 내부적인 데이터 표현 방식이 같은 것은 아니다 . 크게 두가지 방법으로 나뉘는데 , Big-Endian 방식과 Little Endian 방식이 있다 .

Big-Endian 방식 ( 상위 바이트의 값이 메모리상에 먼저 표시되는 방법 )

Little-Endian 방식 ( 하위 바이트의 값이 메모리 상에 먼저 표시되는 방법 )

0x12 0x34 0x56 0x78

메모리 번지수가 증가하는 방향

0x78 0x56 0x34 0x12

메모리 번지수가 증가하는 방향

어떤 방식을 쓰느냐 ?

시스템의 CPU 가 결정 ( 호스트 바이트

순서 )

Big-Endian Little-Endian

Motorola 68000 계열 Intel x86 계열

서로 다를 경우바이트 순서 변환 !

Page 8: TCP/IP 발표자료 - 김연수

8

소켓 옵션소켓 옵션 I. 소켓의 이해 I. 소켓의 이해

소켓 옵션

소켓의 특성을 변경시켜 사용하여야 할 경우 소켓에 옵션을 설정하게 된다 .

• 입력 및 출력 버퍼의 크기

• 데이터 전송 방식 (TCP or UDP)

• TTL(Time to live)

IP 패킷 내에 있는 값으로 , 그 패킷

이 네트웍 내에 너무 오래 있어서

버려져야하는지의 여부를 라우터

에게 알려준다 .

소켓의 기본적인 특성

Protocol Level Option Name get set

SOL_SOCKET SO_SNDBUF

SO_RCVBUF

SO_REUSEADDR

SO_KEEPALIVE

SO_BROADCAST

SO_DONTROUTE

SO_OOBINLINE

SO_ERROR

SO_TYPE

 

IPPROTO_IP IP_TOS

IP_TTL

IP_MULTICAST_TTL

IP_MULTICAST_LOOP

IP_MULTICAST_IF

IPPROTO_TCP TCP_KEEPALIVE

TCP_NODELAY

TCP_MAXSEG

소켓의 다양한 옵션들

Page 9: TCP/IP 발표자료 - 김연수

9

소켓 옵션소켓 옵션 I. 소켓의 이해 I. 소켓의 이해

소켓 옵션

• SOL_SOCKET : 소켓 레벨의 옵션을 변경

• IPPROTO_IP : IP 레벨의 옵션을 변경

• IPPROTO_TCP : TCP 레벨의 옵션을 변경

소켓 옵션의 종류

옵션 설명

SO_BROADCAST 방송형 메시지 전송 허용 (UDP)

SO_DEBUG DEBUG 모드를 선택

SO_RESUSEADDR

주소 재사용 선택

SO_LINGER 소켓을 닫을 때 미 전송된 데이터가 시간만큼 기다렸다가 소켓을 닫음 (TCP)

SO_KEEPALIVE TCP 의 Keep Alive 동작 선택 (TCP)

SO_OOBINLINE OOB 데이터를 일반데이터처럼 읽음

SO_RCVBUF 수신버퍼의 크기 변경

SO_SNDBUF 송신버퍼의 크기 변경

SOL_SOCKET 레벨의 옵션

Page 10: TCP/IP 발표자료 - 김연수

10

소켓 옵션소켓 옵션 I. 소켓의 이해 I. 소켓의 이해

소켓 옵션

옵션 설명

IP_TTL Time To Live 변경

IP_MULTICAST_TTL 멀티캐스트 데이터그램의 TTL 변경 (UDP)

IP_ADD_MEMBERSHIP 멀티캐스트 그룹에 가입 (UDP)

IP_DROP_MEMBERSHIP

멀티캐스트 그룹에서 탈퇴 )UDP)

IP_MULTICAST_LOOP 멀티캐스트 데이터그램의 loopback 허용 여부 (UDP)

IP_MULTICAST_IF 멀티캐스트 데이터그램 전송용 인터페이스 지정 (UDP)

옵션 설명

TCP_KEEPALIVE Keep Alive 확인 메시지 전송 시간 지정

TCP_MAXSEG TCP 의 MSS( 최대 메시지 크기 ) 지정(TCP)

TCP_NODELAY Nagle 알고리즘의 선택 (TCP)

IP_PROTO_IP 레벨의 옵션

IP_PROTO_TCP 레벨의 옵션

Page 11: TCP/IP 발표자료 - 김연수

11

Ⅱ. TCP/IP 의 이해1. TCP/IP 란 ?

2. TCP/IP 4 계층의 데이터 전송3. TCP 의 내부구조

Page 12: TCP/IP 발표자료 - 김연수

12

TCP/IP 란 ?TCP/IP 란 ? Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

TCP/IP 란 ?

전송 제어 프로토콜 (Transmission Control Protocol, TCP, 문화어: 전송조종규약 ) 는 네트워크의 정보 전달을 통제하는 프로토콜이다 . 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF) 의 RFC 793에 기술되어 있다 . TCP 는 IP 위에서 동작하는 프로토콜로 흔히 TCP/IP 로 표기한다 . 데이터의 전달을 보증하고 보낸 순서대로 받게 해 준다 .

TCP 는 패킷의 교환을 근간으로 하는 인터넷 프로토콜 (IP, Internet Protocol) 을 기반으로 작동한다 . 패킷은 헤더와 바디로 구성된 바이트 단위의 짧은 신호이다 . 헤더는 데이터의 수신처에 대한 정보가 들어가며 바디에 전달할 데이터가 실린다 . 패킷은 회선이 혼잡할 경우 IP 프로토콜에서 폐기될 수 있기 때문에 다른 경로를 가진 두 개의 라우터를 통해 수신처에 전달된다 . TCP 는 패킷의 폐기로 인해 잘못된 명령이 전달되더라도 어플리케이션으로부터 기반 패킷을 구성하여 폐기된 패킷을 다시 전달하도록 함으로써 네트워크 혼잡에 의한 피해를 최대한 줄이도록 구성되어 있다 .

플래그 설명

URG Uragent, 뒤의 uragent pointer 필드를 사용함 (긴급 데이터 )

ACK Acknowledgement, 앞의 ack number 필드를 사용함

PSH Push, 현재 세그먼트 데이터는 즉시 전달되어야 함

RST Reset, 현재 연결을 재설정함

SYN Synchronization, 새로운 연결 설정 요구함

FIN Finish, 연결의 종료를 요구함

TCP 헤더 제어 플래그

(bit)

(source port)

(destination port)(seq number)

(ack number)

(Len) (Reserved) (window size)

(Checksum)(urgent pointer)(TCP options)

Page 13: TCP/IP 발표자료 - 김연수

13

TCP/IP 4 계층에 의한 데이터 전송TCP/IP 4 계층에 의한 데이터 전송 Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

TCP/IP 4 계층에 의한 데이터 전송

실제로 TCP/IP 4 계층 어떻게 데이터가 전송되는지 웹 방식을 토대로 알아본다 .

1

2

3

4

URL 입력을 통한 웹페이지 요청

사용자의 요청 정보를 TCP 패킷으로 만듬

인터넷 상에서 원하는 주소로 이동하기 위해

IP 패킷으로 만듬

정보가 이더넷 카드로 보내지고 Internet

으로 나감

1 2 3 4

Application Layer(Presentation Layer 포함 )Transport Layer(Session Layer 포함 )Internet Layer(Network Layer, Data Link Layer 포함 )Physical Layer

Internet 으로 전송 되는 Flow 상세 설명

이더넷 카드는 TCP/IP 패킷을 바로 윗 계층 (Internet Layer) 로 보내는데 , 여기에서 IP 패킷을 분석해서 , 이 패킷에 어디에서 왔고 도착지가 어디인지를 판단한다 .그리하여 목적지가 자신이면 Transport Layer 로 보내고 , TCP 프로토콜을 사용하여 , 메시지가 누락된게 있으면 다시 요청하고 , 순서를 재조합하는 등 통신 메시지를 검사해서 이것을 다시 Application Layer 로 보낸다 .Application Layer 에서는 웹서버 (IIS, Apache 같은 ) 가 통신 메시지를 HTTP 프로토콜에 준하여 , 검사를 하여 사용자가 요청한 웹페이지를 읽어들여 , Transport 계층으로 보내게 된다 . 웹페이지를 브라우저까지 전송하는 과정은 위의 정반대의 과정을 순차적으로 거치게 된다 .

Page 14: TCP/IP 발표자료 - 김연수

14

TCP/IP 내부 구조TCP/IP 내부 구조 Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

TCP/IP 내부 구조

TCP 기반의 소켓이 연결되어서 데이터를 송 , 수신하고 종료되기까지 총 3 단계를 거치게 된다 . 그 단계를 자세히 보면 아래와 같다 .

1] 첫 번째 단계 : 연결 설정

A B

SEQ: 1000, ACK: -

SEQ: 2000, ACK: 1001

SEQ: 1001, ACK: 2001

1. 첫 번째 (A 가 B 에게 ) : A 가 B 에게 전송할 데이터가 있으니 , 연결을 하자는 의미로 SYN(synchronization) 패킷을 전송한다 (SYN 안에는 SEQ 와 ACK 정보가 들어 있고 , 이 정보는 현재 보내는 패킷에 넘버를 부여해서 서로간의 데이터 수신 유무를 확인하는 데 사용 된다 .)

2. 두 번째 (B 가 A 에게 ) : 연결 준비가 다 되었다는 의미로 B 는 A 에게 SEQ 2000, ACK 1001 이라는 패킷을 보내게 된다 .ACK 1001 은 “좀 전에 전송해준 SEQ 가 1000 인 패킷은 잘 받았으니 다음 번 데이터 전송 시에는 SEQ 넘버 1001 를 보내달라” 라는 의미이다 . 그리고 B 도 A 와 마찬가지로 수신 확인을 위해서 패킷에 SEQ 2000 을 부여하고 있다 .이 패킷의 특징은 B 도 ‘준비가 되었다’는 SYN 의 의미도 지니지만 , 이전에 A 가 보낸 패킷의 확인 응답 기능도 지니고 있으므로 SYN+ACK(Acknowledgement) 메시지가 된다 .

3. 세 번째 (A 가 B 에게 ) : 마지막으로 전송하는 패킷은 다음의 의미를 지닌다 . 좀 전에 보내준 패킷을 잘 받았으니 이제 데이터를 주고 받읍시다 . A 도 마지막으로 B 에게 SEQ 2000 인 패킷을 잘 받았다는 의미로 ACK 2001 을 보내고 있다 .

* 서로간에 데이터를 주고 받을 수 있다는 것을 완벽히 확인하는데 세 번의 패킷 전송이 있었다 . 따라서 이것을 가리켜 three-way handshaking 이라 한다

SYN

SYN+ACK

ACK

Page 15: TCP/IP 발표자료 - 김연수

15

TCP/IP 내부 구조TCP/IP 내부 구조 Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

TCP/IP 내부 구조

TCP 기반의 소켓이 연결되어서 데이터를 송 , 수신하고 종료되기까지 총 3 단계를 거치게 된다 . 그 단계를 자세히 보면 아래와 같다 .

2] 두 번째 단계 : 데이터 송 /수신

A B

1. A 에서 B 로 100 바이트를 전송하면서 SEQ 1301 을 전송한다 . 따라서 다음번에 패킷을 전송할 때는 SEQ 1302 가 아니라 , 100 바이트를 전송했으므로 SEQ 1401이 되어야 한다 .

2. 또 다시 A 가 B 로 100 바이트를 전송하면서 SEQ 1401 을 전송해 준다 . 그런데 중간에 소멸되고 말았다 . 이러한 경우 A 는 일정 시간이 지나도 ACK 가 돌아 오지 않으면 재전송을 시작한다 . 결국 B 는 패킷을 수신하게 되고 ACK 1501 을 전송한다 .

SEQ : 1301, 100bytes

ACK : 1401

SEQ : 1401, 100bytes

SEQ : 1401, 100bytes

ACK : 1501

Time out

Page 16: TCP/IP 발표자료 - 김연수

16

TCP/IP 내부 구조TCP/IP 내부 구조 Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

TCP/IP 내부 구조

TCP 기반의 소켓이 연결되어서 데이터를 송 , 수신하고 종료되기까지 총 3 단계를 거치게 된다 . 그 단계를 자세히 보면 아래와 같다 .

3] 세 번째 단계 : 연결 종료

A B 1. 첫 번째 (A 가 B 에게 ) : 종료 요청 메시지를 담은 패킷을 전송한다 .FIN(finish) 이라 한다 .

2. 두 번째 (B 가 A 에게 ) : 패킷을 잘 받았다는 ACK 를 보낸다 .3. 세 번째 (B 가 A 에게 ) : 종료 해도 좋다는 FIN 을 A 에게 보낸다 .4. 네 번째 (A 가 B 에게 ) : 최종적인 수신 응답 메시지 ACK 를 전송한다 .

* 이렇게 종료 단계는 네 단계에 걸쳐서 진행되기 때문에 four-way handshaking 이라 한다 .

** TIME_WAIT : four-way handshaking 과정이 끝난 상태에서 A 의 소켓이 바로 소멸되는 것이 아니라 , TIME_WAIT 상태에 들어가게 된다 . 반면에 B 는 바로 연결이 종료되고 소켓이 소멸된다 . 즉 , 먼저 연결 종료를 요청할 경우 TIME_WAIT 상태를 거치게 된다 .

B 에게서 FIN 을 받고 마지막 ACK 전송 실패 시 재전송을 위해 TIME_WAIT 상태 존재 .

이것은 SO_REUSEADDR 옵션을 사용해주면 , TIME_WAIT 상태에 있는 소켓에 할당되어 있는 IP 주소와 Port 를 새로 시작하는 소켓에 할당해 주게 된다 .

SEQ : 5000, ACK : -

SEQ : 7500, ACK : 5001

SEQ : 7501, ACK : 5001

SEQ : 5001, ACK : 7502

FIN

ACK

FIN

ACK

TIME_WAIT

Page 17: TCP/IP 발표자료 - 김연수

17

Ⅲ. 자바 I/O 와 NIO 의 비교1. 자바 I/O 와 NIO 의 비교

Page 18: TCP/IP 발표자료 - 김연수

18

자바 I/O 와 NIO 의 비교자바 I/O 와 NIO 의 비교 Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

자바 I/O 와 NIO 의 비교

기존의 자바 IO 는 블록킹 IO 이므로 C 나 C++ 의 IO 에 비해 상당히 느렸었다 . 그러나 JDK 1.4에서는 운영체제 수준의 네이티브 기능을 적극적으로 활용하는 NIO 가 도입되어 , 자바 IO 의 단점을 보완하였다 .

프로세스

버퍼 버퍼 디스크컨트롤러 디스크

유저 영역 커널 영역

read() DMA 하드웨어

IO 흐름

유저 영역은 일반적인 프로세스들이 존재하는 제한된 권한을 갖는 영역이다 . 유저 영역 안의 프로세스들은 하드웨어 장치나 다른프로세스에 직접적으로 접근할 수 없기 때문이다 .커널 영역은 운영체제에 존재하는 영역으로서 하드웨어 장치에 직접적으로 접근하고 다른 프로세스를 제어할 수 있는 권한이 있다 .

자바에서 파일 읽기를 시도하면 제일 먼저 커널에 명령을 전달한다 . 커널은 시스템 콜 (read()) 을 사용해서 디스크 컨트롤러가 물리적

디스크로부터 읽어온 파일 데이터를 커널 영역 안의 버퍼로 저장한다 . 그 후 모든 파일 데이터가 커널 안의 버퍼로 복사되면 JVM( 프로세스 ) 안의 버퍼로 복사를 시작한다 .

이 과정에서 두가지 비효율적인 부분이 존재한다 .• 커널 영역 버퍼에서 프로세스 영역 안의 버퍼로 데이터를 복사한다는 점

(커널 영역의 버퍼에 저장된 데이터를 직접 사용한다면 시간도 단축 , 복사 대상인 데이터의 가비지 컬렉션도 필요 없어 진다 , 또한 소중한 CPU 자원도 좀더 효율적으로 사용할 수 있게 된다 .)

• 디스크 컨트롤러에서 커널 영역의 버퍼로 데이터를 복사하는 동안 프로세스 영역은 블록킹 된다는 점

Page 19: TCP/IP 발표자료 - 김연수

19

자바 I/O 와 NIO 의 비교자바 I/O 와 NIO 의 비교 Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

IO 향상을 위한 운영체제 수준의 기술

대 다수의 운영체제들은 IO 의 향상을 위해 많은 기능을 제공한다 . NIO 는 이러한 기능들을 사용함으로써 기존의 IO 에 비해 많은 성능향상을 이뤄냈다 .

IO 향상을 위한 운영체제수준의

기술

가상 메모리

메모리 맵 파일

파일 락버퍼

Scatter/Gather

구분 설명

버퍼 버퍼를 간단하게 설명하면 효율적으로 데이터를 전달하기 위한 객체다 . 데이터를 한 개씩 여러 번 반복적으로 전달하는 것 보다는 중간에 버퍼를 두고 그 버퍼에 데이터를 모아 한 번에 전달하는 것이 훨씬 효율적이다 . 그렇기 때문에 데이터를 전송하는 곳에서는 대부분 버퍼를 기본적으로 사용한다 .

Scatter/Gather 자바 프로그램 안에 버퍼 세개를 만들어 사용한다면 , 만약 동시에 이 각각의 버퍼에 데이터를 쓰거나 읽게되면 , 어쩔 수 없이 시스템 콜을 세 번 호출 해서 각각의 버퍼에 데이터를 읽거나 쓰게 된다 .그러나 Scatter/Gather 를 사용하면 시스템 콜을 한 번만 호출한다 . 대신에 시스템 콜을 한번 호출할 때마다 사용할 버퍼의 주소 목록을 넘겨줌으로서 , 운영체제에서는 최적화된 로직을 사용해서 주어진 버퍼들로 부터 순차적으로 데이터를 읽거나 쓴다 .

가상 메모리 가상 메모리는 프로그램이 사용할 수 있는 주소 공간을 늘이기 위해 운영체제에서 지원하는 기술이다 . 가상메모리는 사용하면 두가지 장점이 있는데 , 실제 물리적 메모리 크기 보다 큰 가상 메모리 공간을 사용할 수 있다는 점 , 여러 개의 가상 주소가 하나의 물리적 메모리 주소를 참조함으로써 메모리를 효율적으로 사용할 수 있다는 점 .

메모리 맵 파일 프로그램 수행중 파일을 읽고 쓰는 작업이 빈번할 경우 , 그때마다 매번 값비싼 시스템 콜과 더불어 불필요한 커널 영역과 유저 영역 버퍼 간의 복사가 이루어질 것이다 . 그러면 가비지 컬렉션도 빈번하게 발생하게 될텐데 이런 문제점을 해결하려고 운영체제에서 지워하는 것이 Memory-mapped IO 다 .Memory-mapped IO 는 파일시스템의 페이지들과 유저 영역의 버퍼를 가상메모리로 매핑시킨다 .사용시 장점은 , 프로세스가 파일 데이터를 메모리로서 바라 보기 때문에 read(), write() 시스템 콜을 할 필요가 없다는 점 , 매우 큰 파일을 복사하기 위해 많은 양의 메모리를 소비하지 않아도 된다는 점이다 .

파일 락 파일 락은 한 프로세스가 어떤 파일에 락을 획득했을 때 , 다른 프로세스가 그 파일로 동시에 접근하는 것을 막거나 또는 접근하는 방식에 제한을 두는 것이다 . 파일 락은 크게 공유락과 배타락이 있다 . 일반적으로 공유 락은 읽기 작업 , 배타락은 쓰기 작업에 사용된다 . 데이터 동기화 문제 때문에 사용 !

Page 20: TCP/IP 발표자료 - 김연수

20

자바 I/O 와 NIO 의 비교자바 I/O 와 NIO 의 비교 Ⅱ. TCP/IP 의 이해 Ⅱ. TCP/IP 의 이해

자바 NIO 의 변화

자바의 포인터 버퍼 도입•커널에 의해 관리되는 시스템 메모리를 직접 사용할 수 있는 Buffer 클래스 도입

네이티브 IO 서비스를 제공해주는 채널 도입•기존의 스트림은 단방향 이었다 .( 읽거나 쓰는 한가지만 가능 )•NIO 에서는 스트림의 향상된 버전인 채널을 도입채널은 스트림을 읽거나 쓰는 단방향에서부터 , 읽고 쓰는 양방향 통신이 가능한 세 가지 형식이 존재한다 . 또한 운영체제에서 제공해주는 다양한 네이티브 IO 서비스들을 이용할 수 있게 해준다 .

•버퍼가 시스템 메모리에 로드되면 운영체제에서 지원하는 다양한 기능들을 채널을 통해 사용

셀렉터 도입•기존의 자바 네트워크 프로그래밍의 한계클라이언트 하나당 스레드 하나를 생성해서 처리해야함 .( 사용자가 늘어나면 스레드가 많이 생성됨으로 인해 성능 급격히 저하 )

•단 하나의 스레드로 동시에 많은 IO 채널들을 효율적으로 관리할 수 있게 해줌•셀렉터 처리방식클라이언트의 모든 요청을 우선 앞단의 큐에 저장하고 큐를 모니터링 하는 스레드에 이벤트를 보낸다 .큐를 모니터링하는 스레드는 큐에 저장된 요청의 방향을 분석하여 적절히 프로세스 로직으로 보내주어 처리한다

Page 21: TCP/IP 발표자료 - 김연수

21

감사합니다 .